#include <ioCC2530.h>
void Init_T1_Direction(void)
{
//EA=0;
PERCFG = 0x00; //Timer1位于位置1 P0_3~P0_6
P0SEL |= 0x78; //P03-P06用作外设接口01111000
P0DIR |=0X78; //output
P2DIR = 0XC0; //P0优先作为TIMER1()1st priority: Timer 1 channels 0-1
/*******************************************
P2DIR 0X00 0X40 0X80 0XC0
P0_6 P0_6 P0_3、P0_6 P0_4、P0_5、P0_6
********************************************/
/*******************************************
P2DIR :BIT7-6
00 USART0 USART1 TIMER1
01 USART1 USART0 TIMER1
10 TIMER1(channels0-1) USART1 USART0 TIMER1(channels2-3)
11 TIMER1(channels2-3) USART0 USART1 TIMER1(channels0-1)
********************************************/
T1CNTL=0X00;
T1CNTH=0X00; //Timer1 counter
T1CC0L= 0xff; //
T1CC0H= 0x05;
//T1CCTL1=0x1c; //Clear when equal CCRO,Set when equal CCRx,00 101 100
T1CCTL1=0x34; //Set when equal CCRO,Clear when equal CCRx,00 110 100
T1CC1L= 0x7f;
T1CC1H= 0x02;
//T1CCTL2=0x1c;
T1CCTL2=0x34;
T1CC2L= 0x7f;
T1CC2H= 0x02;
//T1CCTL3=0x1c;
T1CCTL3=0x34;
T1CC3L=0x7f;
T1CC3H=0x02;
//T1CCTL4=0x1c;
T1CCTL4=0x34;
T1CC4L= 0x7f;
T1CC4H= 0x02; //
T1CTL =0X00;
T1CTL |=0X0c; // divider=128
T1CTL |= 0x02; //modulo mode and start
}
void main()
{
Init_T1_Direction();
while(1) { }
}
程序 如上,配置后不能正常产生四路,当改变 P2DIR配置时(改变Timer1与Usart优先级),P0_3、P0_4、 P0_5、P0_6能产生PWM的如下
P2DIR 0X00 0X40 0X80 0XC0
能产生PWM的I/O P0_6 P0_6 P0_3、P0_6 P0_4、P0_5、P0_6
附上 Timer1与Usart优先级关系:
/*******************************************
P2DIR :BIT7-6
00 USART0 USART1 TIMER1
01 USART1 USART0 TIMER1
10 TIMER1(channels0-1) USART1 USART0 TIMER1(channels2-3)
11 TIMER1(channels2-3) USART0 USART1 TIMER1(channels0-1)
********************************************/
谢谢!!