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