[Atmel] SAML21走起18:CCL

[复制链接]
1144|3
 楼主| ddllxxrr 发表于 2015-8-26 22:08 | 显示全部楼层 |阅读模式
CCL是Configurable Custom Logic缩写,是用户可根据需要,扩展自己的逻辑。

本例通过 LUT0  LUT1 连接到内部 sequential logic,实现了一个 D lip flop


首先在ASFWIZARD中加入CCL模块,然后在ASF EXPLORER中打开快速指导:




根据快速指导形成程序:

然后编译:


以下是程序:
  1. #include <asf.h>
  2. void configure_ccl(void)
  3. {
  4.         struct ccl_config conf;
  5.         ccl_get_config_defaults(&conf);
  6.         ccl_init(&conf);
  7. }
  8. void configure_ccl_lut0(void)
  9. {
  10.         struct ccl_lut_config conf;
  11.         ccl_lut_get_config_defaults(&conf);
  12.         conf.truth_table_value = 0x02;
  13.         conf.input0_src_sel = CCL_LUT_INPUT_SRC_IO;
  14.         conf.input1_src_sel = CCL_LUT_INPUT_SRC_IO;
  15.         conf.input2_src_sel = CCL_LUT_INPUT_SRC_IO;
  16.         conf.filter_sel = CCL_LUTCTRL_FILTSEL_FILTER;
  17.         struct system_pinmux_config lut0_input_pin0_conf, lut0_input_pin1_conf, lut0_input_pin2_conf;
  18.         system_pinmux_get_config_defaults(&lut0_input_pin0_conf);
  19.         system_pinmux_get_config_defaults(&lut0_input_pin1_conf);
  20.         system_pinmux_get_config_defaults(&lut0_input_pin2_conf);
  21.         lut0_input_pin0_conf.direction    = SYSTEM_PINMUX_PIN_DIR_INPUT;
  22.         lut0_input_pin0_conf.mux_position = MUX_PA04I_CCL_IN0;
  23.         lut0_input_pin1_conf.direction    = SYSTEM_PINMUX_PIN_DIR_INPUT;
  24.         lut0_input_pin1_conf.mux_position = MUX_PA05I_CCL_IN1;
  25.         lut0_input_pin2_conf.direction    = SYSTEM_PINMUX_PIN_DIR_INPUT;
  26.         lut0_input_pin2_conf.mux_position = MUX_PA06I_CCL_IN2;
  27.         system_pinmux_pin_set_config(PIN_PA04I_CCL_IN0, &lut0_input_pin0_conf);
  28.         system_pinmux_pin_set_config(PIN_PA05I_CCL_IN1, &lut0_input_pin1_conf);
  29.         system_pinmux_pin_set_config(PIN_PA06I_CCL_IN2, &lut0_input_pin2_conf);
  30.         struct system_pinmux_config lut0_out_pin_conf;
  31.         system_pinmux_get_config_defaults(&lut0_out_pin_conf);
  32.         lut0_out_pin_conf.direction    = SYSTEM_PINMUX_PIN_DIR_OUTPUT;
  33.         lut0_out_pin_conf.mux_position = MUX_PA07I_CCL_OUT0;
  34.         system_pinmux_pin_set_config(PIN_PA07I_CCL_OUT0, &lut0_out_pin_conf);
  35.         ccl_lut_set_config(CCL_LUT_0, &conf);
  36. }
  37. void configure_ccl_lut1(void)
  38. {
  39.         struct ccl_lut_config conf;
  40.         ccl_lut_get_config_defaults(&conf);
  41.         conf.truth_table_value = 0x02;
  42.         conf.input0_src_sel = CCL_LUT_INPUT_SRC_IO;
  43.         conf.input1_src_sel = CCL_LUT_INPUT_SRC_IO;
  44.         conf.input2_src_sel = CCL_LUT_INPUT_SRC_IO;
  45.         conf.filter_sel = CCL_LUTCTRL_FILTSEL_FILTER;
  46.         struct system_pinmux_config lut1_input_pin0_conf, lut1_input_pin1_conf, lut1_input_pin2_conf;
  47.         system_pinmux_get_config_defaults(&lut1_input_pin0_conf);
  48.         system_pinmux_get_config_defaults(&lut1_input_pin1_conf);
  49.         system_pinmux_get_config_defaults(&lut1_input_pin2_conf);
  50.         lut1_input_pin0_conf.direction    = SYSTEM_PINMUX_PIN_DIR_INPUT;
  51.         lut1_input_pin0_conf.mux_position = MUX_PA08I_CCL_IN3;
  52.         lut1_input_pin1_conf.direction    = SYSTEM_PINMUX_PIN_DIR_INPUT;
  53.         lut1_input_pin1_conf.mux_position = MUX_PA09I_CCL_IN4;
  54.         lut1_input_pin2_conf.direction    = SYSTEM_PINMUX_PIN_DIR_INPUT;
  55.         lut1_input_pin2_conf.mux_position = MUX_PA10I_CCL_IN5;
  56.         system_pinmux_pin_set_config(PIN_PA08I_CCL_IN3, &lut1_input_pin0_conf);
  57.         system_pinmux_pin_set_config(PIN_PA09I_CCL_IN4, &lut1_input_pin1_conf);
  58.         system_pinmux_pin_set_config(PIN_PA10I_CCL_IN5, &lut1_input_pin2_conf);
  59.         struct system_pinmux_config lut1_out_pin_conf;
  60.         system_pinmux_get_config_defaults(&lut1_out_pin_conf);
  61.         lut1_out_pin_conf.direction    = SYSTEM_PINMUX_PIN_DIR_OUTPUT;
  62.         lut1_out_pin_conf.mux_position = MUX_PA11I_CCL_OUT1;
  63.         system_pinmux_pin_set_config(PIN_PA11I_CCL_OUT1, &lut1_out_pin_conf);
  64.         ccl_lut_set_config(CCL_LUT_1, &conf);
  65. }
  66. int main (void)
  67. {
  68.        
  69.           
  70.           /* Initialize the system and console*/
  71.           system_init();
  72.            configure_ccl();
  73.            configure_ccl_lut0();
  74.            configure_ccl_lut1();
  75.            ccl_seq_config(CCL_SEQ_0, CCL_SEQ_D_FLIP_FLOP);
  76.             ccl_lut_enable(CCL_LUT_0);
  77.             ccl_lut_enable(CCL_LUT_1);
  78.             ccl_module_enable();
  79.                 while(1);
  80.        
  81. }
我用万用表量了下电压 LUT0 和 LUT1输出都是0,而输入都是1.

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
大苏牙 发表于 2015-8-27 11:01 | 显示全部楼层
学习了,谢谢楼主的分享
会飞の鱼 发表于 2015-8-31 22:15 | 显示全部楼层
程序部分主要写的是什么,感觉看的不是很懂。楼主可以说明一下吗???
罗勋义 发表于 2015-8-31 23:04 | 显示全部楼层
程序越来越傻瓜化了,都成堆积木了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:http://shop34182318.taobao.com/ http://shop562064536.taobao.com

2404

主题

7002

帖子

68

粉丝
快速回复 在线客服 返回列表 返回顶部