打印
[技术问答]

请教M0516定时器1 和3 应该怎么操作才合适?目前无法设置

[复制链接]
1483|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
Harvard|  楼主 | 2015-7-5 10:53 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
碰到一个奇怪的问题,现在定时器0和2都可以正常设置工作 .而对1和3的设置都无效;定时器1 ,3 的控制寄存器仍旧维持上电值. 请问这是什么情况??
void Timer2_init(void)
{
    _TIMER_RESET(TIMER2);

    TIMER2->TCSR = TIMER_TCSR_CEN_Msk | TIMER_TCSR_IE_Msk | TIMER_TCSR_MODE_PERIODIC | TIMER_TCSR_TDR_EN_Msk |
                      TIMER_TCSR_PRESCALE(22);
    TIMER2->TCMPR = 10;             //定时时长 timerover us
    NVIC_EnableIRQ(TMR2_IRQn);
        _TIMER_CLEAR_CMP_INT_FLAG(TIMER2);
}

void TMR0_Init(void)
{

    TIMER0->TCSR = TIMER_TCSR_INIT_IE(22);
    TIMER0->TCMPR = 2000; //定时器最小间隔为1us,定时2000,即为间隔2ms一次

    /* 使能TMR0中断 */
    NVIC_EnableIRQ(TMR0_IRQn);
}
void TMR1_Init(void)
{

    TIMER1->TCSR = TIMER_TCSR_INIT_IE(22);
    TIMER1->TCMPR = 2000; //定时器最小间隔为1us,定时2000,即为间隔2ms一次

    /* 使能TMR0中断 */
     NVIC_EnableIRQ(TMR1_IRQn);
}
void TMR3_Init(void)
{   
  

    _TIMER_RESET(TIMER3);        

     TIMER3->TCMPR = 100000;

     TIMER3->TCSR =  TIMER_TCSR_MODE_CONTINUOUS | TIMER_TCSR_TDR_EN_Msk | TIMER_TCSR_PRESCALE(22);   

}


用nulink在线调试后发现,TIMER1 和TIMER3的TCSR值还是上电状态. 而TIMER0 TIMER2,的设置却正常;

查看了bsp自带的timer例程,他4个定时器都用到了.单步调试发现 ,他的各个寄存器都是正常的, 是不是我的写法有问题?
沙发
Harvard|  楼主 | 2015-7-5 11:20 | 只看该作者
自己沙发一下 .解决了. 大意了 原来是timer的时钟没有使能, 所以那些tcsr设置不了
依葫芦画瓢 添入就可以了
    SYSCLK->APBCLK =    SYSCLK_APBCLK_ADC_EN_Msk | SYSCLK_APBCLK_PWM23_EN_Msk | SYSCLK_APBCLK_TMR2_EN_Msk | SYSCLK_APBCLK_TMR0_EN_Msk
                                             | SYSCLK_APBCLK_TMR3_EN_Msk | SYSCLK_APBCLK_TMR1_EN_Msk     | SYSCLK_APBCLK_WDT_EN_Msk;

使用特权

评论回复
板凳
史迪威将军| | 2015-7-5 21:14 | 只看该作者
是不是0和1复用呢。。。

使用特权

评论回复
地板
Harvard|  楼主 | 2015-7-5 21:25 | 只看该作者
没有复用.

使用特权

评论回复
5
仙女山| | 2015-7-6 14:03 | 只看该作者
Harvard 发表于 2015-7-5 11:20
自己沙发一下 .解决了. 大意了 原来是timer的时钟没有使能, 所以那些tcsr设置不了
依葫芦画瓢 添入就可以 ...

谢谢楼主的及时分享,效率太高了

使用特权

评论回复
6
Harvard|  楼主 | 2015-7-8 23:44 | 只看该作者
哈哈. 希望对和我一样 没有正确注意操作要领的朋友 有用.

使用特权

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

本版积分规则

74

主题

1729

帖子

21

粉丝