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
我现在也遇到这个问题。请问解决了吗?