[Atmel] 用ASF跑SAMD21程序(29) 呼吸灯

[复制链接]
2097|0
 楼主| ddllxxrr 发表于 2015-2-5 14:33 | 显示全部楼层 |阅读模式
呼吸灯,仿人类吸引,是检验开发板及单片机性能的一种方法。

首先建立ASF工程,然后把TCC(CALLBACK)模块包含进来。



然后点开,ASF EXPLORER中的快速指导。



按照提示形成程序,然后改一下代码如下:
  1. static void tcc_callback_to_change_duty_cycle(
  2. struct tcc_module *const module_inst)
  3. {
  4.         static uint32_t delay = 10;
  5.         static bool flag = true;
  6.         if(flag)
  7.     {
  8.                 delay +=64;
  9.                 if(delay >= 0xFFE0)
  10.                 flag = false;
  11.         }
  12.         else
  13.         {
  14.                 delay-=64;
  15.                 if(delay<=0x20)
  16.                 flag = true;
  17.                
  18.         }
  19.        
  20.         tcc_set_compare_value(module_inst,
  21.         (enum tcc_match_capture_channel)
  22.         (TCC_MATCH_CAPTURE_CHANNEL_0 + CONF_PWM_CHANNEL),
  23.         delay + 1);
  24. }




总程序清单如下:

  1. /**
  2. * \file
  3. *
  4. * \brief Empty user application template
  5. *
  6. */

  7. /**
  8. * \mainpage User Application template doxygen documentation
  9. *
  10. * \par Empty user application template
  11. *
  12. * This is a bare minimum user application template.
  13. *
  14. * For documentation of the board, go \ref group_common_boards "here" for a link
  15. * to the board-specific documentation.
  16. *
  17. * \par Content
  18. *
  19. * -# Include the ASF header files (through asf.h)
  20. * -# Minimal main function that starts with a call to system_init()
  21. * -# Basic usage of on-board LED and button
  22. * -# "Insert application code here" comment
  23. *
  24. */

  25. /*
  26. * Include header files for all drivers that have been imported from
  27. * Atmel Software Framework (ASF).
  28. */



  29. #include <asf.h>
  30. #define CONF_PWM_MODULE      LED_0_PWM4CTRL_MODULE
  31. #define CONF_PWM_CHANNEL     LED_0_PWM4CTRL_CHANNEL
  32. #define CONF_PWM_OUTPUT      LED_0_PWM4CTRL_OUTPUT
  33. #define CONF_PWM_OUT_PIN     LED_0_PWM4CTRL_PIN
  34. #define CONF_PWM_OUT_MUX     LED_0_PWM4CTRL_MUX

  35. static void configure_tcc_callbacks(void);
  36. static void configure_tcc(void);
  37. static void tcc_callback_to_change_duty_cycle(struct tcc_module *const module_inst);
  38. struct tcc_module tcc_instance;

  39. static void tcc_callback_to_change_duty_cycle(
  40. struct tcc_module *const module_inst)
  41. {
  42.         static uint32_t delay = 10;
  43.         static bool flag = true;
  44.         if(flag)
  45.     {
  46.                 delay +=64;
  47.                 if(delay >= 0xFFE0)
  48.                 flag = false;
  49.         }
  50.         else
  51.         {
  52.                 delay-=64;
  53.                 if(delay<=0x20)
  54.                 flag = true;
  55.                
  56.         }
  57.        
  58.         tcc_set_compare_value(module_inst,
  59.         (enum tcc_match_capture_channel)
  60.         (TCC_MATCH_CAPTURE_CHANNEL_0 + CONF_PWM_CHANNEL),
  61.         delay + 1);
  62. }

  63. static void configure_tcc(void)
  64. {
  65.         struct tcc_config config_tcc;
  66.         tcc_get_config_defaults(&config_tcc, CONF_PWM_MODULE);
  67.         config_tcc.counter.period = 0xFFFF;
  68.         config_tcc.compare.wave_generation = TCC_WAVE_GENERATION_SINGLE_SLOPE_PWM;
  69.         config_tcc.compare.match[CONF_PWM_CHANNEL] = 0xFFFF;
  70.         config_tcc.pins.enable_wave_out_pin[CONF_PWM_OUTPUT] = true;
  71.         config_tcc.pins.wave_out_pin[CONF_PWM_OUTPUT]        = CONF_PWM_OUT_PIN;
  72.         config_tcc.pins.wave_out_pin_mux[CONF_PWM_OUTPUT]    = CONF_PWM_OUT_MUX;
  73.         tcc_init(&tcc_instance, CONF_PWM_MODULE, &config_tcc);
  74.         tcc_enable(&tcc_instance);
  75. }
  76. static void configure_tcc_callbacks(void)
  77. {
  78.         tcc_register_callback(
  79.         &tcc_instance,
  80.         tcc_callback_to_change_duty_cycle,
  81.         (enum tcc_callback)(TCC_CALLBACK_CHANNEL_0 + CONF_PWM_CHANNEL));
  82.         tcc_enable_callback(&tcc_instance,
  83.         (enum tcc_callback)(TCC_CALLBACK_CHANNEL_0 + CONF_PWM_CHANNEL));
  84. }


  85. int main (void)
  86. {
  87.         system_init();
  88.         configure_tcc();
  89.         configure_tcc_callbacks();

  90.         system_interrupt_enable_global();
  91.         while (true) {
  92.         }
  93. }
运行的结果是,真象呼吸一样。渐亮又渐灭。

本帖子中包含更多资源

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

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

本版积分规则

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

2404

主题

7001

帖子

68

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