CC2530 TIMER4
I want used CC2530 timer4 generator pwm signal,Now ,Normal frequency,but by changing the T4CC1 unable to change the duty cycle.the pwm output is P2.0 .
void pwm_timer4_init(void)
{
P2SEL &=~0X01; //P2.0默认为普通端口
PERCFG |= 0x10;
P2SEL |= 0X01;
P2DIR |= 0X01; //p2.0输出
P2INP &=~0X00;
T4CNT = 0X00; //initial value
T4CTL |= 0x04; //clear timer3
T4CTL |=0XE6;
T4CCTL0 = 0x1C;
}
void pwm_timer4_send(void)
{
T4CC0 = 0xFA; //overflow value
T4CC1 = 0X5A;
T4CTL |= 0x10; //start timer3
}
怎么就没有人回答啊,请TI的工程师帮忙解决,现在项目上使用遇到的问题,谢谢!
P2SEL (0xF5) – Port 2 Function Select and Port 1 Peripheral Priority Control
这个寄存器上面的PRI1P1也需要设置priority
void pwm_timer4_init(void)
{
P2SEL &=~0X01; //P2.0默认为普通端口
PERCFG |= 0x10; //优先级设置
P2SEL |= 0X01; //使用第二功能
P2DIR |= 0X01; //p2.0输出
P2INP &=~0X00; //设置上拉,功能
T4CNT = 0X00; //initial value
T4CTL |= 0x04; //clear timer3
T4CTL |= 0XE6; //module mode 128分频
T4CCTL0 = 0x1C; //通道0
P2SEL |= 0X10;
}
void pwm_timer4_send(uint8 data)
{
T4CC0 = 0xFA; //overflow value
T4CC1 = 0X3A;
T4CTL |= 0x10; //start timer3
}
经过修改后还是现象相同,通过修改T4CC1值占空比仍然保持为0.4%左右,能帮我看看是哪个寄存器设置不对么?
谢谢!
PWM波输出应该配置成Peripheral I/O
我已经进行了设置,现在是频率输出是正确的,只是通过修改TCC0的值没法改变占空比。
PERCFG |= 0x10; //优先级设置
P2SEL |= 0X01; //使用第二功能
没有能帮忙解决的方案么,请帮忙解决此问题,谢谢!
请TI的工程师帮忙解决,好像这个定时器4用的人太少了,资料不是太多,请帮助解决一下,谢谢!
PERCFG |= 0x10;//设置Timer4 alternative 2
P2SEL ~= 0x01;//设置P2_0 为a peripheral output
T3CC0 = 0xFA;
T3CC1 = 0x5A;
T3CCTL0 = 0x1c;
T3CTL |= 0xE7; // divide with 128 and to do up-down mode
T3CTL |= 0x40;//start
P2SEL ~= 0x01;//设置P2_0 为a peripheral output
此句是否有误,我需要的是tomer4,看上面的配置应该都是timer3的,timer3的操作我已经调试完成,现在只是timer4无法改变占空比。
谢谢!
timer3和timer4是两个一样的定时器,你是不是有IO复用,或其他地方有设置没注意到。
这是我的测试程序,没有其它功能在里面。
#include <iocc2530.h>
void pwm_timer4_init(void)
{
P2SEL &=~0X01; //P2.0默认为普通端口
PERCFG = 0x10; //优先级设置
P2SEL |= 0X01; //使用第二功能
P2DIR |= 0X01; //p2.0输出
P2INP = 0x00 ; //&=~0X00; //设置上拉,功能
T4CNT = 0X00; //initial value
T4CTL |= 0x04; //clear timer3
T4CTL |= 0XE6; //module mode 128分频
T4CCTL0 = 0x1C; //通道0
P2SEL = 0X11;
}
void pwm_timer4_send(void)
{
T4CC0 = 0xFA; //overflow value
T4CC1 = 0X8A;
T4CTL |= 0x10; //start timer3
}
void main(void)
{
pwm_timer4_init();
pwm_timer4_send();
}
请帮助解决timer4的问题,谢谢!
void main(void)
{
pwm_timer4_init();
pwm_timer4_send();
while(1) {};
}
这样试试看,会不会你的main()函数中在循环执行初始化呢?
这个貌似是初始化的,如何修改占空比呢?
怎么会循环初始化呢?程序是停在了while(1);哪里
您的问题解决了吗?
问题已经解决了,修改模式就行了。
问题解决,自问自答!
PERCFG &= ~0x20; //优先级设置
P1SEL |= 0X18; //使用第二功能
P1DIR |= 0X18; //p1.3输出
//P1INP = 0x00 ; //&=~0X00; //设置上拉,功能
T3CNT = 0X06; //initial value
T3CTL |= 0x04; //clear timer3
T3CTL |= 0XE0; //module mode 128分频
P2SEL |= 0X20;
T3CCTL0 = 0x2C;//0x1C; //通道0 (P1.3)
T3CC0 = 0x60; //compare value
T3CCTL1 = 0x2C;//0x1C; //通道1(P1.4)
T3CC1 = 0x80;
修改:T3CC0 = 0x60; //compare value改变占空比。
T3CNT是个只读寄存器,唯一能做的数值操作就是通过T3CTL.CLR位将其清0,T3CNT = 0X06是啥意思?
设置成加减计数模式,能通过T3CC0改变占空比?