CC2540/CC2541 定时器1 不能输出的2Mhz PWM 波
我的程序如下:
void PWR_init()
{
PCON = 0x00;
SLEEPCMD = 0x00;
}
void INT_init()
{
IEN0 = 0x00;
IEN1 = 0x00;
IEN2 = 0x00;
}
void main()
{
PWR_init(); //主动模式
do{
CLKCONCMD = 0x00;
}while(CLKCONSTA != 0x00); //系统时钟32M,Timer时钟32M
INT_init();//禁止所有中断
PWM_init();//初始化PWM
}
void PWM_init()
{
EA=0;
P0DIR|= 0x04; //set P0.2 as output
P0SEL &= (~0x04); //set P0.2 as GPIO
//PERCFG |= 0x33; // Move USART1&2 to alternate2 location so that T1 is visible
P0_2=0;
T1CTL = 0x02; // Div = 1, CLR, MODE = module
T1CNTL = 0; // Reset timer to 0;
T1CNTH = 0; // Reset timer to 0;
T1CC0L = 0X10; // Ticks = 16 (0.5us)
T1CC0H = 0x00; // Ticks =16 (0.5us)
T1CCTL0 = 0x4C;//这个不设置Timer1好像不会工作
//IP0 = 0x02; //提高优先级
//IP1 = 0x02;
EA=1;
IEN1 |= 0x02; // Enable T1 cpu interrupt
}
#pragma vector = T1_VECTOR
__interrupt void pwmISR (void) {
// Set up the timer registers
T1STAT = ~ T1STAT;
P0_2 = ~P0_2;
}
上面的程序,不管怎么调最高能输出240KHz的波形,折腾好几天了,手册也看了好几遍了,就是不知道为什么。
实际测量的波形是236.152Khz
你好,请问这个问题最后解决了吗?我也遇到同样的问题,看规格书应该可以啊,不行也得弄清楚为什么啊。。。
请问您这个代码是在带有BLE协议栈的基础上跑的吗?还是使用的proprietary模式8051直接跑的?
如果是基于BLE协议栈跑的,要注意在代码里面,所有 HCI_EXT_ClkDivOnHaltCmd( HCI_EXT_ENABLE_CLK_divIDE_ON_HALT ); 都去掉试试
不是这么玩的,2M的PWM要用自动翻转模式,而不是在ISR中手工翻转IO
这么做,受限于IO的速度和ISR的速度
---------------------
建议:用PWM的硬件翻转模式输出2M波形