TI中文支持网
TI专业的中文技术问题搜集分享网站

CC2540输出多路pwm波

hi,各位大牛!

     小弟玩cc2540通过pwm控制led灯,配置timer1同时输出pwm波,通过手机或者ble host控制pwm的占空比,存在如下的问题:通过手机发送数据改变设备的占空比,ch1,ch3,ch4可以正常调节占空比,当时调节ch2的占空比是,将占空比调大了,直接就导致蓝牙断开了,请高手解答,小弟先谢过了!贴代码如下:

timer1相关配置:

    PERCFG = (PERCFG & ~0x40) | 0x03; // Select Timer 1 Alternative 0 location, set U1CFG and U0CFG to Alternative 1
    P2DIR |= 0xC0; // Give priority to Timer 1
    P0SEL |= 0x70;  // Set P0.4, P0.5 and P0.6 to peripheral
       T1CNTH = 0xff;
    T1CNTL = 0xff;       T1CTL = 0x02;       /* mode: modulo bit[1:0]=10, div: tick/128 bit[3:2]=11 */
    T1CCTL0 = 0x3c;
    T1CCTL1 = 0x24;
    T1CCTL2 = 0x24;
    T1CCTL3 = 0x24;       T1CCTL4 = 0x24;       T1CC0L = 0x00;
    T1CC0H = 0x01;          T1CC1L = 0x01;          T1CC1H = 0x00;          /* white */
    T1CC2L = 0x01;           T1CC2H = 0x00;          /* green */
    T1CC3L = 0x01;           T1CC3H = 0x00;          /* blue */
    T1CC4L = 0x01;       T1CC4H = 0x00;          /* red */

profile中写数据回调:

static bStatus_t test_WriteAttrCB( uint16 connHandle, gattAttribute_t *pAttr,
                                    uint8 *pValue, uint8 len, uint16 offset )
{
  bStatus_t status = SUCCESS;
   if ( pAttr->type.len == ATT_BT_UUID_SIZE )
  {
       uint16 uuid = BUILD_UINT16( pAttr->type.uuid[0], pAttr->type.uuid[1]);

    switch ( uuid )
    {
      case R_SERVICE_UUID:

            T1CC1L = pValue[3]+1;
           T1CC1H = 0x0;                       T1CC2L = pValue[1]+1;
           T1CC2H = 0x0;                       T1CC3L = pValue[0]+1;
           T1CC3H = 0x0;                       T1CC4L = pValue[2]+1;
           T1CC4H = 0x0;

}

  return ( status );
}

代码很简单,就是手机或者ble host发送4Byte数据调节4个通道的占空比,当ch2的数据比较大,比如:T1CC2L = 0xbf时,这时蓝牙就直接断开了,求解答!

Yan:

Hi lee,

你能同时用sniffer抓包看一下吗? 

可以把抓的包也共享出来看一下?

看一下断开连接的原因.

另外, 是否也有尝试过用timer3 或 timer4 获取PWM?

Bob Chen2:

回复 Yan:

您好,他都说是3路控制RGB亮度的了,肯定需要3路PWM 就只有Timer1满足啦~

同时,我也遇到相同的问题,现在我的问题是,就是发现只要一开PWM,系统就老是往睡眠状态跑。

例如:

我在 “ SimpleBLEXX.c ”  的文件中的 void SimpleBLEXX_Init( uint8 task_id )函数中添加一段定时器初始化代码,发现只要PWM一启动,系统就老跑到 “ hal_sleep.c ” 文件中的 void halSetSleepMode(void) 函数中,导致我的PWM波形总是不稳定。

现在还不晓得为什么。

希望TI员工,也希望,本帖的发帖者能够不吝赐教~O(∩_∩)O哈哈~

supcond:

回复 Bob Chen2:

关闭POWER SAVING就行了

da qin zheng sheng:

这个引脚可能虚焊?

wenqi lu:

hi lee jason

我现在也遇到这个问题。请问解决了吗?

赞(0)
未经允许不得转载:TI中文支持网 » CC2540输出多路pwm波
分享到: 更多 (0)