DM6437下裸定时器在CC5.4下开发的疑问现象解决

之前写的code发现有Bug存在,于是去调试这个定时器,悲剧的时当时自己使用的最简单的定时模式,竟然出现一些难以理解的现象。

DM6437的Time有64bit ,32 bit等最简单的定时模式,对应的工作末模式包括once stop 和continuous 模;

以配置64bit模式如下:

/*set 1us unit times*/
void timer0_init(Uint32 times)
{

    TIMER0_TGCR = 0;
    TIMER0_EMUMGT = 0x0003;
    TIMER0_TIM12 = 0;
    TIMER0_TIM34 = 0;
    TIMER0_PRD12 = times * 27;  // 1us
    TIMER0_PRD34 = 0;
    TIMER0_TGCR = (0 << 2) |//TIMMODE 64bit GP Timer
                             (1 << 1) | //TIMER0 3:4 no reset
                             (1 << 0); // TIMER0 1:2 no reset
    
    TIMER0_TRC = (0 << 22) |
                           (0 << 8) |   //internal clock
                           (0 << 6) ;  //one-time mode disable
                          
}


void  start_timer0()
{

    TIMER0_TRC |= (1 << 6);

}

void stop_timer0()
{
    
    TIMER0_TRC ^= (1 << 6); //disable the timer0.
    TIMER0_TIM12 = 0;
    TIMER0_TIM34 = 0;// clear count value

}

是的,配置代码就是这么简单,但是虽然我设置了once stop启动,但是JTAG拉着仿真器进入中断后,你会发现其实TIM12和TIM34的数值为0,这按datasheet说的是保持当前的count value,(Whenthe timer is enabledfor onetime operation(ENAMODE12=1),it counts up until the counter value equals the period value and then stops.)。故一直以为是配置有误了。占时还不知道这里面的原因,不过可以肯定的是,定时器是按着正常的配置来工作了的。只是进入中断后才出现的清空。

好吧,就这样的留点东西,分享给大家。

 

原因:目测可能是as hadow register当ccs5读取的时候?不过实测貌似的确自动回归0

 

你可能感兴趣的:(DM6437下裸定时器在CC5.4下开发的疑问现象解决)