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

CC2540 PWM

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

我在用CC2540PWM控制灯时发现打开低功耗PWM输出很不稳定,关闭时正常,但如果不打开低功耗模式时广播时的电流太大,这个怎么解决?

PWM需要时钟源,低功耗会关闭时钟,二选一

我想在广播的时候开启低功耗,当收到蓝牙数据的时候主动开启时钟源,这样做行不行?

hi,Tao Hong,

请问你的PWM是怎么设置的呢,能方便把代码贴出来吗

广播的时候默认应该是不会进入低功耗模式的

Hi TaoHong 

我也遇到同样的情况,只不过你使用的是定时器的比较输出,而我使用的是定时器的输入捕获,我验证过,就算是一个简单的定时器溢出中断,没有捕获也没有比较,只要把POWER_SAVING这个宏打开,定时器的计数频率就会出现偏差,也就是与设定的频率不对应,我觉得是OSAL进入和退出休眠时,晶振间的频繁切换造成定时器的计数不正确,至今还没找到解决方法。

尝试一下不要这个函数

  HCI_EXT_ClkDivOnHaltCmd( HCI_EXT_ENABLE_CLK_divIDE_ON_HALT );

Hi WBJ 关闭了该函数后,依然不能实现在打开POWER_SAVING的情况下,使用定时器进行计数,请问还有什么方法吗?

void PWM_init()
{
 
 // PERCFG = PERCFG | 0x03; // Select Timer 1 Alternative 0 location, set U1CFG and U0CFG to Alternative 1
     PERCFG = (PERCFG & ~0x40) | 0x03; // Select Timer 1 Alternative 0 location, set U1CFG and U0CFG to Alternative 1
   // PERCFG = PERCFG | 0x40;
    P2DIR |= 0xc0; // Give priority to Timer 1
    P0SEL |= 0x18;  // Set P0.4, P0.5 and P0.6 to peripheral
  
  
    T1CNTH = 0xff;
    T1CNTL = 0xff;   
  
  
    T1CTL = 0x02;
     T1CCTL1 = 0x1c;
    T1CCTL2 = 0x1c;
   
    T1CC0L = 0x00;
    T1CC0H = 0x01;
   
   
   
    T1CC1L = 0x00;       
    T1CC1H = 0x00;
   
    T1CC2L = 0x00;       
    T1CC2H = 0x00;
    
}

你如果开了POWER_SAVING后如果要使用定时器,在使用前加上下面的代码输出的频率就稳定了

CLEAR_SLEEP_MODE();
  HAL_BOARD_INIT();
  osal_pwrmgr_device( PWRMGR_ALWAYS_ON );

Thx TaoHong

请问添加了   CLEAR_SLEEP_MODE();    HAL_BOARD_INIT();     osal_pwrmgr_device( PWRMGR_ALWAYS_ON );    这三句代码后,您是在哪里再启动POWER_SAVING 的呢?

我PWM输出只需要一段时间,完了后在加上osal_pwrmgr_device(POWER_SAVING )这个

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

网站地图

Top