查看: 253|回复: 0

[SAMD21] 【WINC1500-XSTK WiFi】LED0测试

[复制链接]

129

主题

4

好友

4787

积分

状元

Rank: 6Rank: 6

  • TA的每日心情
    开心
    1 小时前
  • 签到天数: 526 天

    [LV.9]以坛为家II

    发表于 2016-6-25 11:51:23 |显示全部楼层
    接上一篇帖子http://www.eeboard.com/bbs/thread-47853-1-1.html
    今天发现status LED和串口通信有关,打开串口时,该LED亮;关闭时,LED灭;发送数据时,LED闪烁,闪烁频率和数据操作频率有关,比如烧写程序整个过程中开发板status LED闪烁节奏有变化,一会快闪,一会慢闪,一会长亮。
    SAM D21板子上电电源灯亮,如下
    20160625_102228[1].jpg

    使用官网“\GETTING-STARTED”Demo,编译程序下载后,按下按键,LED亮,松开,灭
    20160625_102241[1].jpg

    串口通信如下,baud-38400,按下reset,输出初始信息,然后就是TC计数器操作,status LED每闪一次,输出一行字符
    注意,按下reset后LED0会先长亮2S,闪烁3S后长灭,需要按键唤醒
    2.JPG


    main程序
    1. int main(void)
    2. {
    3.         struct port_config pin;

    4.         system_init();

    5.         /*Configure UART console.*/
    6.         configure_console();

    7.         /*Configures the External Interrupt*/
    8.         configure_extint();

    9.         /*Configures the External Interrupt callback*/
    10.         configure_eic_callback();

    11.         /*Configures  TC driver*/
    12.         configure_tc();

    13.         /*Configures TC callback*/
    14.         configure_tc_callbacks();

    15.         /*Initialize the delay driver*/
    16.         delay_init();


    17.         /* Output example information */
    18.         puts(STRING_HEADER);

    19.         /*Enable system interrupt*/
    20.         system_interrupt_enable_global();


    21.     /*Configures PORT for LED0*/
    22.         port_get_config_defaults(&pin);
    23.         pin.direction = PORT_PIN_DIR_OUTPUT;
    24.         port_pin_set_config(LED0_PIN, &pin);

    25.         port_pin_set_output_level(LED0_PIN, LED0_INACTIVE);

    26.         for (int i = 0; i < 3; i++) {
    27.                 port_pin_toggle_output_level(LED0_PIN);
    28.                 delay_s(1);
    29.         }

    30.         for (int i = 0; i < 20; i++) {
    31.                 port_pin_toggle_output_level(LED0_PIN);
    32.                 delay_ms(100);
    33.         }

    34.         port_pin_set_output_level(LED0_PIN, LED0_INACTIVE);

    35.         /*main loop*/
    36.         while(1);
    37. }
    复制代码
    程序1s执行一次,输出一行字符
    其中LED0的定义
    #define LED0_PIN                  PIN_PB30
    #define LED0_ACTIVE               false
    #define LED0_INACTIVE             !LED0_ACTIVE
    按键的定义
    #define SW0_PIN                   PIN_PA15
    #define SW0_ACTIVE                false
    #define SW0_INACTIVE              !SW0_ACTIVE
    #define SW0_EIC_PIN               PIN_PA15A_EIC_EXTINT15
    #define SW0_EIC_MUX               MUX_PA15A_EIC_EXTINT15
    #define SW0_EIC_PINMUX            PINMUX_PA15A_EIC_EXTINT15
    #define SW0_EIC_LINE              15
    按键扫描,当按键按下时低电平有效,LED0亮,其实根据这个就可以简要画出LED电路了,可以判断
    1. static void update_led_state(void)
    2. {
    3.         bool pin_state = port_pin_get_input_level(BUTTON_0_PIN);
    4.         if (pin_state) {
    5.                 port_pin_set_output_level(LED_0_PIN, LED_0_INACTIVE);
    6.         } else {
    7.                 port_pin_set_output_level(LED_0_PIN, LED_0_ACTIVE);
    8.         }
    9. }
    复制代码
    1. static void tc_callback_to_counter(
    2.                 struct tc_module *const module_inst)
    3. {
    4.         static uint32_t count = 0;
    5.         count ++;
    6.         if(count%800 == 0){
    7.                 printf("The output is triggered by TC counter\r\n");
    8.         }

    9.         tc_set_count_value(module_inst,TC_COUNT_VALUE);
    10. }
    复制代码
    AS工程师的代码就是简洁工整,这个程序主要是控制LED0闪烁,然后使用定时器中断输出字符。
    使用如下宏定义输出出示字符串,其中用到了获取当前时间函数,开发板名字调用
    1. #define STRING_HEADER "-- Getting Started Example --\r\n" \
    2.                 "-- "BOARD_NAME" --\r\n" \
    3.                 "-- Compiled: "__DATE__" "__TIME__" --\r\n" \
    4.                 "-- Pressing and release button SW0 should make LED0 on and off --"STRING_EOL
    复制代码
    D21有5个16位的定时/计数器(TC)和3个24位用于控制的定时计数器的控制(TCC)
    TC框图如下
    155058mc5gc61kqzqbkkky.jpg


    其中AS调试升级固件时LED变化情况:首先USB枚举到了评估版的EDGB后进入了Bootloader模式(空闲)(2个LED同时闪烁),接着进入了Bootloader模式(升级固件中)(2个LED交替闪烁),稍等片刻后回到Bootloader模式(空闲)(2个LED同时闪烁)
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    关闭

    站长推荐上一条 /6 下一条


    手机版|爱板网 |网站地图  

    GMT+8, 2016-12-6 22:11 , Processed in 0.105973 second(s), 11 queries , Memcache On.

    苏公网安备 32059002001056号

    Powered by Discuz!

    回顶部