[MCU] 【MSP432评测】6、定时器

[复制链接]
1168|6
 楼主| xinmeng_wit 发表于 2020-4-19 14:18 | 显示全部楼层 |阅读模式
我们用定时器做个40ms的定时。
定时器的计数周期为SMCLK/8,其中SMCLK=12M.
所以定时40ms需要计数60000次

定时器初始化:

  1. void timer_init(void)
  2. {
  3.     TIMER_A0->CCTL[0] = TIMER_A_CCTLN_CCIE; // TACCR0 interrupt enabled
  4.     TIMER_A0->CCR[0] = 60000;//40ms
  5.     TIMER_A0->CTL = TIMER_A_CTL_SSEL__SMCLK | // SMCLK, continuous mode
  6.             TIMER_A_CTL_MC__CONTINUOUS|
  7.                                                 TIMER_A_CTL_ID_3;//SMCLK/8        =1.5M
  8.                 NVIC->ISER[0] |= 1 << ((TA0_0_IRQn) & 31);//使能中断

  9. }
中断函数:

  1. // Timer A0 interrupt service routine

  2. void TA0_0_IRQHandler(void) {
  3.     TIMER_A0->CCTL[0] &= ~TIMER_A_CCTLN_CCIFG;
  4.     P1->OUT ^= BIT0;//翻转LED灯
  5.     TIMER_A0->CCR[0] = 60000;              // Add Offset to TACCR0
  6. }
主程序:

  1. int main(void)
  2. {
  3.         WDT_A->CTL = WDT_A_CTL_PW |             // Stop watchdog timer
  4.                                         WDT_A_CTL_HOLD;
  5.         clk_init();//clk init
  6.         uart_init();//uart init,9600
  7.         timer_init();
  8.         GPIO_setAsOutputPin(GPIO_PORT_P1,GPIO_PIN0);//设置P1.0为输出
  9.         //sprintf((char *)ptr,"%.2f\r\n",a);
  10.        
  11.         //printf("test...\r\n");
  12.         while(1)
  13.         {
  14.                 jansson_pack_test();
  15.                 //GPIO_toggleOutputOnPin(GPIO_PORT_P1,GPIO_PIN0);
  16.                 for(int i=0;i<100000;i++)
  17.                 {;}
  18.         }
  19. }

实际的现象也是led灯进行周期性翻转。


zhangmangui 发表于 2020-4-19 21:45 | 显示全部楼层
不错   如果配点讲解就好了
观海 发表于 2020-5-9 16:27 | 显示全部楼层
非常感谢楼主分享
guanjiaer 发表于 2020-5-9 16:28 | 显示全部楼层
他有几个定时器啊
heimaojingzhang 发表于 2020-5-9 16:30 | 显示全部楼层
最短能定时多久啊
keaibukelian 发表于 2020-5-9 16:30 | 显示全部楼层
代码很详细
labasi 发表于 2020-5-9 16:30 | 显示全部楼层
非常感谢楼主分享
您需要登录后才可以回帖 登录 | 注册

本版积分规则

74

主题

289

帖子

2

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