cc2530定时器BUG

2019-08-03 18:49发布

本帖最后由 voidx 于 2010-4-9 13:01 编辑

CC2530 定时器BUG:

datasheet:
When the timer operates in modulo mode, the 8-bit counter starts at 0x00 and increments at each active clock edge. When the counter reaches the terminal count value held in register TxCC0, the counter is reset to 0x00 and continues to increment. The flag TIMIF.TxOVFIF is set when on this event.

实际情况是,TIMIF.TxOVFIF根本没有置位。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
3条回答
voidx
2019-08-04 00:26
本帖最后由 voidx 于 2010-4-9 12:52 编辑

模式0,1,2,3,其中模式2:Modulo Mode无法城城中断


测试代码:


void CLK_RC_TO_XOSC(void)
{
    SLEEPCMD &= ~SLEEPCMD_OSC_PD;       //打开双震荡
   
    while((SLEEPSTA & SLEEPSTA_XOSC_STB)==0);  //等待XOSC稳定
    asm("nop");
   
    CLKCONCMD = (CLKCONCMD & ~(CLKCONCMD_CLKSPD | CLKCONCMD_OSC)) | CLKCONCMD_CLKSPD_DIV_1;
   
    CC2530_WAIT_CLK_UPDATE();
    SLEEPCMD |= SLEEPCMD_OSC_PD;
}

#define LED P1_2
void LED_Init(void)
{
  P1    &= ~_BV(2);
  P1DIR |=  _BV(2);
}

#define T1234_BASE_CLK    (32000000UL/128UL)

void T1234_BaseClkSet(void)
{
   CLKCONCMD = (CLKCONCMD & ~CLKCONCMD_TICKSPD) | CLKCONCMD_TICKSPD_DIV_128;
   CC2530_WAIT_CLK_UPDATE();
}

#define T3_CLK          (T1234_BASE_CLK/1)             //T3_CLK=T1234_CLK/1=250K


void T3_Init(void)      
{
    T3CC0 = T3_CLK/2000;

    //T3CTL  =  T3CTL_DIV(0) | T3CTL_OVFIM |  T3CTL_CLR | T3CTL_MODE(0);   //Free-Running Mode
    //T3CTL  =  T3CTL_DIV(0) | T3CTL_OVFIM |  T3CTL_CLR | T3CTL_MODE(1);   //Down Mode
    //T3CTL  =  T3CTL_DIV(0) | T3CTL_OVFIM |  T3CTL_CLR | T3CTL_MODE(2);     //Modulo Mode
    T3CTL  =  T3CTL_DIV(0) | T3CTL_OVFIM |  T3CTL_CLR | T3CTL_MODE(3);   //Up/Down Mode
   
    T3CTL |=  T3CTL_START ;
      
    TIMIF &= ~TIMIF_T3OVFIF;
   
    IRCON &= ~IRCON_T3IF;
   
    IEN1 |=   IEN1_T3IE;
}

ISR(T3_VECTOR)    //T3中断
{
    TIMIF &= ~TIMIF_T3OVFIF;
    IRCON &= ~IRCON_T3IF;
   
    LED=!LED;
}


int main()
{
    CLK_RC_TO_XOSC()   ;  //主时钟由RC切换到32M晶振
    T1234_BaseClkSet() ;  //定时器基时钟设置,128分频,250K
   
    LED_Init();         //LED初始化
    T3_Init();          //T3初始化
   
    EA=1;               //开全局中断
  
    while(1);
}

一周热门 更多>