微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 无线和射频 > TI蓝牙设计交流 > C2541 BLE OSAL设置定时器的相关问题?

C2541 BLE OSAL设置定时器的相关问题?

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

现在需要在BLE 蓝牙协议栈里面使用一个定时器。我是基于官方给的代码SimpleBLEPeriheral 进行修改的。我使用的是在SimpleBLEPeripheral_Init 函数中调用了osal_start_timerEx(simpleBLEPeripheral_TaskID,TIMER_UPDATE_EVT,250);

可以在SimpleBLEPeripheral_ProcessEvent中接收到TIMER_UPDATE_EVT这个事件,从打印的系统时间也可以看出是准时的250ms调用一次,但是当我将时间间隔修改到150ms以下,比如10ms时,从打印的系统时间来看并没有达到10ms的时间,而是在150ms左右摆动。如何解决这个问题?

另外我按照TI官方给的代码直接用过控制寄存器设置T3定时器,同样在Init函数中

T3CTL |= 0x08 ; //开溢出中断
T3IE = 1; //开总中断和T3中断
T3CTL|=0XE0; //128分频,128/16000000*N=0.5S,N=62500
T3CTL &= ~0X03; //自动重装,选择自由模式 00->0xff 62500/256=244(次)
T3CTL |=0X10; //启动
EA = 1;

int count; //用于定时器计数
uint32 systime=0;
#pragma vector = T3_VECTOR //定时器T3
__interrupt void T3_ISR(void)
{
IRCON = 0x00; //清中断标志, 也可由硬件自动完成
if(++count>244) //244次中断后LED取反,闪烁一轮(约为0.5 秒时间)
{
count = 0; // 计数清零
systime=osal_GetSystemClock();
printf("%d\n",systime);
// LED1=~LED1;
}
}

但这个只是响应了一次,就不会继续响应了?希望有有高手帮忙解决一下这个问题,非常感谢!

Move to BLE form

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

网站地图

Top