微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 无线和射频 > TI Zigbee设计交流 > CC2530 TIMER4

CC2530 TIMER4

时间:10-02 整理:3721RD 点击:

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改变占空比?

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top