本帖最后由 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);
}
|