CC2540关于定时器模模模式的设置

2019-04-13 13:23发布

直接上代码,代码有详解/* 本程序为定时器3倒计数模式中断方式 关于定时器总结: 模式为自由模式时,只需要常规设置寄存器即可; 模式为模模模式时,正/倒计数模式时,只需要添加设置T3CCTL0寄存器为比较模式即可 模式为倒计数模式时,由于倒计数到0x00时,硬件会关闭定时器,如果想要连续使用, 一定在中断或则溢出标记中重新打开定时器! */ #include #define LED1 P1_0 int count = 0; void init_led() { P1SEL &= ~(1 << 0);//set p1_0 as generic io P1DIR |= (1 << 0); //set P1_0 as output LED1 = 0x0; //set led1 off } void init_clock32MHZ() { CLKCONCMD &= ~(1 << 6);//set source system clcok 32MHZ while(CLKCONSTA & 0x40);//wait source system clcok stable CLKCONCMD &= ~((1 << 6) | (1 << 2 ) | (1 << 1) | (1 << 0));//设置主时钟为32MHZ while(CLKCONSTA & 0x1);//wait main clcok stable CLKCONCMD |= (6 << 3);//set TICKSPD = 500KHZ //TICKSPD default = 16MHZ } void init_timer3() { //使用模模式,倒计数,正倒计数时,必须设置这个寄存器为比较模式 T3CCTL0 |= (1 << 2); T3CTL |= (7 << 5) | (1 << 3) | 1;//TICKSPD/128,enable inter, XXmode T3CC0 = 125; // IEN1 |= (1 << 3); //enable T3IE T3CTL |= (1 << 4); //start Timer3 IEN0 |= (1 << 7);//enable EA } #pragma vector=T3_VECTOR __interrupt void t3_isr() { IRCON &= ~(1 << 3);//clear inter flag //T3CTL |= (1 << 4); //start Timer3,如果使用倒计数模式 count++; if(count > 64){//2s LED1 = 0x1; count = 0; } if(count > 32){//1s LED1 = 0x0; } } void main() { init_led(); init_clock32MHZ(); init_timer3(); while(1); }