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

CC2541 osal_start_timerEx()问题

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

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 );  

 }

 

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

 

定义事件只能是1个bit位的,如0x0001,0x0002,0x0004,0x0008....

0x0005是0101,有两个bit了,这是不对的。你需要熟悉下osal以及event

谢谢TI同事的点拨,改正了,运行正常。非常感谢!

不错,谢谢。

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

网站地图

Top