[Atmel] 用SAM-BA或JLINK跑ATSAM4E16的程序(14)定时器

[复制链接]
 楼主| ddllxxrr 发表于 2015-11-19 19:22 | 显示全部楼层 |阅读模式
定时器计数器(总)包括几个相同的16位或32位定时器计数器通道。TC通道数是特定设备,请参阅设备特定数据表的更多信息。
每个通道可以独立编程来执行一个广泛的功能,包括频率测量,事件计数,间隔测量,脉冲产生,延迟时间,脉冲宽度调制。
每个通道有三个外部时钟输入,五个内部时钟输入,2个多功能输入/输出信号,可由用户配置。每个通道都可以驱动一个内部中断信号,可以被编程来产生处理器中断。
定时器计数器(TC)嵌入一个正交解码逻辑连接在前面的计时器。在启用时,正交解码器进行输入行滤波,正交信号的解码,并连接到定时器/计数器,以读取电机的位置和速度。


今天搞定时器模块,首先建立ASF工程后加入TC模块:


然后打开ASF EXPLORER,打开API文档,找到EXAMPLE的文档

跟据提示,形成相应的程序。然后调式。

程序如下:

  1. #include <asf.h>


  2. /* Use TC Peripheral 0. */
  3. #define TC             TC0
  4. #define TC_PERIPHERAL  0


  5. /* Configure TC0 channel 2 as capture input. */
  6. #define TC_CHANNEL_CAPTURE 2
  7. #define ID_TC_CAPTURE ID_TC2
  8. #define PIN_TC_CAPTURE PIN_TC0_TIOA2
  9. #define PIN_TC_CAPTURE_MUX PIN_TC0_TIOA2_MUX

  10. /* Use TC2_Handler for TC capture interrupt. */
  11. #define TC_Handler  TC2_Handler
  12. #define TC_IRQn     TC2_IRQn

  13. #define TC_CAPTURE_TIMER_SELECTION TC_CMR_TCCLKS_TIMER_CLOCK3

  14. static void tc_capture_initialize(void)
  15. {
  16.         /* Configure the PMC to enable the TC module */
  17.         sysclk_enable_peripheral_clock(ID_TC_CAPTURE);
  18.         #if SAMG55
  19.         /* Enable PCK output */
  20.         pmc_disable_pck(PMC_PCK_3);
  21.         pmc_switch_pck_to_mck(PMC_PCK_3, PMC_PCK_PRES_CLK_1);
  22.         pmc_enable_pck(PMC_PCK_3);
  23.         #endif
  24.         /* Init TC to capture mode. */
  25.         tc_init(TC, TC_CHANNEL_CAPTURE,
  26.         TC_CAPTURE_TIMER_SELECTION /* Clock Selection */
  27.         | TC_CMR_LDRA_RISING /* RA Loading: rising edge of TIOA */
  28.         | TC_CMR_LDRB_FALLING /* RB Loading: falling edge of TIOA */
  29.         | TC_CMR_ABETRG /* External Trigger: TIOA */
  30.         | TC_CMR_ETRGEDG_FALLING /* External Trigger Edge: Falling edge */
  31.         );
  32. }
  33. void TC_Handler(void)
  34. {
  35. while(1);
  36. }

  37. int main (void)
  38. {
  39.         /* Insert system clock initialization code here (sysclk_init()). */
  40.     sysclk_init();
  41.         board_init();
  42.         tc_capture_initialize();

  43.         /* Insert application code here, after the board has been initialized. */
  44. }


从上边程序可以清楚看出,用的是 TIOA

那么,我应怎么做呢?首先通过数据手册找到TIOA管脚是PA15

在49脚上,而我的开发板在SD卡上,如图:



我于是就用镊子轻触SD卡第九脚对地,模拟个下降沿,没有想到居然进到中断里边了。



就这样程序调通,当然我的中断用个while(1)这个是调试用的。真正的程序没有这样写的。我这个人达到目地不折手断。



本帖子中包含更多资源

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

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

本版积分规则

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

2403

主题

6994

帖子

68

粉丝
快速回复 在线客服 返回列表 返回顶部
个人签名:http://shop34182318.taobao.com/ http://shop562064536.taobao.com

2403

主题

6994

帖子

68

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