CC2530 timer1 备用位置 1 输出 PWM 问题。
时间:10-02
整理:3721RD
点击:
使用 CC2530 的定时器 1 进行协议栈的 PWM 控制,输出 RGB 信号。端口分别为 P0_2、P0_3、P0_4。
定时器初始化时使用备用位置 1,则 P0_2、P0_3、P0_4 分别为通道 0,通道 1,通道 2。但在实际测试时发现只有 P0_4 可以调节 PWM 信号, P0_2、P0_3 未能产生 PWM 信号。
代码如下:
/*pwm初始化*/
void InitPWM(void)
{
PERCFG &= ~0x40; //设置定时器1外设 I/O, 位置为备用位置1
PERCFG |= 0x03; //设置串口1和串口0的I/O位置为备用位置2
P2DIR = (P2DIR & ~0xc0) | 0x80; //设置定时器1优先级,通道0/1优先
P0DIR |= 0x7c; //P0定义 P0_2 ~ p0_6
P0SEL |= 0x7c; //P0定义为外设功能*/
T1CC0L = 0x78;
T1CC0H = 0x10;
T1CC1L = 0x78;
T1CC1H = 0x10;
T1CC2L = 0x78; // 占空比
T1CC2H = 0x10;
T1CCTL0 = 0x1c; //通道配置,010在比较(定时器计数值小于比较寄存器设定值时)翻转输出电平
T1CCTL1 = 0x1c;
T1CCTL2 = 0x1c;
T1CTL |= 0x01; // free-running mode 周期 0000-ffff
}
/* PWM 调节 */
void Pwm_Value(uint16 Rchlight, uint16 Gchlight, uint16 Bchlight)
{
/* P0_2 ~ P0_4 rgb 调光 */
T1CC0L = LO_UINT16(Bchlight);
T1CC0H = HI_UINT16(Bchlight);
T1CC1L = LO_UINT16(Rchlight);
T1CC1H = HI_UINT16(Rchlight);
T1CC2L = LO_UINT16(Gchlight);
T1CC2H = HI_UINT16(Gchlight);
}
实在看不出出错的地方,在这里也看到一个帖子,做法和我的都类似:PWM Timer 1 output for CC2530
请问你是在带有协议栈的基础上添加这个代码? 如果是的话检查P0.2 P03是否被定义其他的功能。
另外你可以下载Z-Stack Lighting 1.0.2,里面有实现好PWM的功能,可以参考下代码。
Hi,
您可以参照以下链接,或者参考该目录下的调光文件C:\Texas Instruments\Z-Stack Lighting 1.0.2\Projects\zstack\ZLL\SampleApp\Source\Light
https://e2e.ti.com/support/wireless_connectivity/proprietary_2-4_ghz/f/964/t/118346?tisearch=e2e-sitesearch&keymatch=CC2530%20RGB%20pwm
