打印
[MCU]

【MSP432评测】6、定时器

[复制链接]
817|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
xinmeng_wit|  楼主 | 2020-4-19 14:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我们用定时器做个40ms的定时。
定时器的计数周期为SMCLK/8,其中SMCLK=12M.
所以定时40ms需要计数60000次

定时器初始化:

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

}
中断函数:

// Timer A0 interrupt service routine

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

int main(void)
{
        WDT_A->CTL = WDT_A_CTL_PW |             // Stop watchdog timer
                                        WDT_A_CTL_HOLD;
        clk_init();//clk init
        uart_init();//uart init,9600
        timer_init();
        GPIO_setAsOutputPin(GPIO_PORT_P1,GPIO_PIN0);//设置P1.0为输出
        //sprintf((char *)ptr,"%.2f\r\n",a);
       
        //printf("test...\r\n");
        while(1)
        {
                jansson_pack_test();
                //GPIO_toggleOutputOnPin(GPIO_PORT_P1,GPIO_PIN0);
                for(int i=0;i<100000;i++)
                {;}
        }
}

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


使用特权

评论回复

相关帖子

沙发
zhangmangui| | 2020-4-19 21:45 | 只看该作者
不错   如果配点讲解就好了

使用特权

评论回复
板凳
观海| | 2020-5-9 16:27 | 只看该作者
非常感谢楼主分享

使用特权

评论回复
地板
guanjiaer| | 2020-5-9 16:28 | 只看该作者
他有几个定时器啊

使用特权

评论回复
5
heimaojingzhang| | 2020-5-9 16:30 | 只看该作者
最短能定时多久啊

使用特权

评论回复
6
keaibukelian| | 2020-5-9 16:30 | 只看该作者
代码很详细

使用特权

评论回复
7
labasi| | 2020-5-9 16:30 | 只看该作者
非常感谢楼主分享

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

68

主题

233

帖子

1

粉丝