打印
[Atmel]

SAML21走起18:CCL

[复制链接]
898|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
CCL是Configurable Custom Logic缩写,是用户可根据需要,扩展自己的逻辑。

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


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




根据快速指导形成程序:

然后编译:


以下是程序:
#include <asf.h>
void configure_ccl(void)
{
        struct ccl_config conf;
        ccl_get_config_defaults(&conf);
        ccl_init(&conf);
}
void configure_ccl_lut0(void)
{
        struct ccl_lut_config conf;
        ccl_lut_get_config_defaults(&conf);
        conf.truth_table_value = 0x02;
        conf.input0_src_sel = CCL_LUT_INPUT_SRC_IO;
        conf.input1_src_sel = CCL_LUT_INPUT_SRC_IO;
        conf.input2_src_sel = CCL_LUT_INPUT_SRC_IO;
        conf.filter_sel = CCL_LUTCTRL_FILTSEL_FILTER;
        struct system_pinmux_config lut0_input_pin0_conf, lut0_input_pin1_conf, lut0_input_pin2_conf;
        system_pinmux_get_config_defaults(&lut0_input_pin0_conf);
        system_pinmux_get_config_defaults(&lut0_input_pin1_conf);
        system_pinmux_get_config_defaults(&lut0_input_pin2_conf);
        lut0_input_pin0_conf.direction    = SYSTEM_PINMUX_PIN_DIR_INPUT;
        lut0_input_pin0_conf.mux_position = MUX_PA04I_CCL_IN0;
        lut0_input_pin1_conf.direction    = SYSTEM_PINMUX_PIN_DIR_INPUT;
        lut0_input_pin1_conf.mux_position = MUX_PA05I_CCL_IN1;
        lut0_input_pin2_conf.direction    = SYSTEM_PINMUX_PIN_DIR_INPUT;
        lut0_input_pin2_conf.mux_position = MUX_PA06I_CCL_IN2;
        system_pinmux_pin_set_config(PIN_PA04I_CCL_IN0, &lut0_input_pin0_conf);
        system_pinmux_pin_set_config(PIN_PA05I_CCL_IN1, &lut0_input_pin1_conf);
        system_pinmux_pin_set_config(PIN_PA06I_CCL_IN2, &lut0_input_pin2_conf);
        struct system_pinmux_config lut0_out_pin_conf;
        system_pinmux_get_config_defaults(&lut0_out_pin_conf);
        lut0_out_pin_conf.direction    = SYSTEM_PINMUX_PIN_DIR_OUTPUT;
        lut0_out_pin_conf.mux_position = MUX_PA07I_CCL_OUT0;
        system_pinmux_pin_set_config(PIN_PA07I_CCL_OUT0, &lut0_out_pin_conf);
        ccl_lut_set_config(CCL_LUT_0, &conf);
}
void configure_ccl_lut1(void)
{
        struct ccl_lut_config conf;
        ccl_lut_get_config_defaults(&conf);
        conf.truth_table_value = 0x02;
        conf.input0_src_sel = CCL_LUT_INPUT_SRC_IO;
        conf.input1_src_sel = CCL_LUT_INPUT_SRC_IO;
        conf.input2_src_sel = CCL_LUT_INPUT_SRC_IO;
        conf.filter_sel = CCL_LUTCTRL_FILTSEL_FILTER;
        struct system_pinmux_config lut1_input_pin0_conf, lut1_input_pin1_conf, lut1_input_pin2_conf;
        system_pinmux_get_config_defaults(&lut1_input_pin0_conf);
        system_pinmux_get_config_defaults(&lut1_input_pin1_conf);
        system_pinmux_get_config_defaults(&lut1_input_pin2_conf);
        lut1_input_pin0_conf.direction    = SYSTEM_PINMUX_PIN_DIR_INPUT;
        lut1_input_pin0_conf.mux_position = MUX_PA08I_CCL_IN3;
        lut1_input_pin1_conf.direction    = SYSTEM_PINMUX_PIN_DIR_INPUT;
        lut1_input_pin1_conf.mux_position = MUX_PA09I_CCL_IN4;
        lut1_input_pin2_conf.direction    = SYSTEM_PINMUX_PIN_DIR_INPUT;
        lut1_input_pin2_conf.mux_position = MUX_PA10I_CCL_IN5;
        system_pinmux_pin_set_config(PIN_PA08I_CCL_IN3, &lut1_input_pin0_conf);
        system_pinmux_pin_set_config(PIN_PA09I_CCL_IN4, &lut1_input_pin1_conf);
        system_pinmux_pin_set_config(PIN_PA10I_CCL_IN5, &lut1_input_pin2_conf);
        struct system_pinmux_config lut1_out_pin_conf;
        system_pinmux_get_config_defaults(&lut1_out_pin_conf);
        lut1_out_pin_conf.direction    = SYSTEM_PINMUX_PIN_DIR_OUTPUT;
        lut1_out_pin_conf.mux_position = MUX_PA11I_CCL_OUT1;
        system_pinmux_pin_set_config(PIN_PA11I_CCL_OUT1, &lut1_out_pin_conf);
        ccl_lut_set_config(CCL_LUT_1, &conf);
}
int main (void)
{
       
          
          /* Initialize the system and console*/
          system_init();
           configure_ccl();
           configure_ccl_lut0();
           configure_ccl_lut1();
           ccl_seq_config(CCL_SEQ_0, CCL_SEQ_D_FLIP_FLOP);
            ccl_lut_enable(CCL_LUT_0);
            ccl_lut_enable(CCL_LUT_1);
            ccl_module_enable();
                while(1);
       
}
我用万用表量了下电压 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

2398

主题

6956

帖子

67

粉丝