TI论坛
直播中

张琪

7年用户 228经验值
私信 关注
[问答]

如何解决CC2541 osal_start_timerEx()函数程序乱套问题?

ti及各位朋友大家好!
在向CC2541 osal_start_timerEx()添加定时事件时我碰到了一个新问题,如下:
在TI例程文件“simpleBLEperipheral.h”里面定义了:
// Simple BLE Peripheral Task Events, Total 15 Task Events can be included in one project
#define SBP_START_DEVICE_EVT                        0x0001
#define SBP_PERIODIC_EVT                                  0x0002
#define SBP_ADV_IN_CONNECTION_EVT             0x0004
#define BATT_PERIODIC_EVT                                 0x0006  
#define SBP_MOTOR_RUN_OVERTIME_EVT        0x0008

但由于产品需要,需要在上述“SBP_MOTOR_RUN_OVERTIME_EVT”事件后面再多加一个定时中断事件进来。
#define SBP_AUTO_LOCK_EVT                             0x0005  // 设成0x0009都不行--即中断没反应,也暂时不管它吧

在中断事件“SBP_MOTOR_RUN_OVERTIME_EVT”里面添加如下命令--即启动“SBP_AUTO_LOCK_EVT”定时(AUTO_LOCK_DELAY=8000):
if ( events & SBP_MOTOR_RUN_OVERTIME_EVT )  
[...
osal_start_timerEx( simpleBLEPeripheral_TaskID, SBP_AUTO_LOCK_EVT, AUTO_LOCK_DELAY );        
P1_3 = 1;   // turn on led,for test only

return ( events ^ SBP_MOTOR_RUN_OVERTIME_EVT );  
]
上述中断测试工作正常即8秒后SBP_AUTO_LOCK_EVT事件被正确触发(P1_3控制的灯被点亮)。也没问题。
但当“SBP_AUTO_LOCK_EVT”事件被触发后,这个函数里面的程序就乱套了(不管我是否Disable/Enable "P1_3 = 0; "命令行, “P1_3 = 0; ”一直被执行!即P1_3控制的灯都会熄灭。好像根本不理会这个命令行一样。奇怪了)

if ( events & SBP_AUTO_LOCK_EVT )  
[         
P1_3 = 0;   // turn off led,for test only
return ( events ^ SBP_AUTO_LOCK_EVT );  
]

请问如何解决该问题?急切等待回答,谢谢!

回帖(3)

凌云志

2019-10-10 09:54:55
定义事件只能是1个bit位的,如0x0001,0x0002,0x0004,0x0008....
0x0005是0101,有两个bit了,这是不对的。你需要熟悉下osal以及event
                                                                          
举报

张琪

2019-10-10 10:07:41
谢谢TI同***
举报

李子月

2019-10-10 10:16:53
引用: shenzhenqide 发表于 2019-10-10 14:28
定义事件只能是1个bit位的,如0x0001,0x0002,0x0004,0x0008....
0x0005是0101,有两个bit了,这是不对的。你需要熟悉下osal以及event
                                                                          

不错,谢谢。                                                                          
提供德州仪器蓝牙和射频cc2540,cc2541,cc26系列,cc13系列脱机烧录工具。



 
举报

更多回帖

发帖
×
20
完善资料,
赚取积分