Thread 中讨论的其他器件:CC2650
TI RTOS 具有用于打开、关闭、启动和停止计时器的计时器 API。 但没有用于重新启动/复位计时器的 API。 我在 GPIO 的下降沿中断上以 OneShot 向上模式启动计时器、我需要在 GPIO 的下降沿上重新启动计时器、仅在 GPIO 上没有下降沿的定义时间内、才允许计时器经过。 我尝试停止和启动计时器、但我认为这不是重新启动计时器。 我是否遗漏了什么? 什么是重新启动计时器的方法?
内联 void timer_start (uint32_t time_us){
GPTimerCC26XX_setLoadValue (hTimer、(timerTick_us * time_us)- 1);
GPTimerCC26XX_START (hTimer);
}
内联 void timer_stop (){
GPTimerCC26XX_STOP (hTimer);
}
void timerCallback (GPTimerCC26XX_Handle handle、GPTimerCC26XX_IntMask interruptMask){
timer_stop();
debug_toggle;
}
void edgeTriggerCallback (PIN_Handle handle、PIN_ID pinId){
timer_stop();
定时器_START (480);
EDGE_COUNT++;
}
void timer_init(){
//计时器配置
GPTimerCC26XX_Params 参数;
GPTimerCC26XX_PARAMS_INIT (params);
Params.width = GPT_CONFIG_16BIT;
params.mode = GPT_MODE_OneShot_Up;
params.debugStallMode = GPTimerCC26XX_DEBUG_STALL_OFF;
HTimer = GPTimerCC26XX_open (CONFIG_TIMER_0、params);
if (hTimer== NULL){
//Log_error0 ("打开 GPTimer 失败");
}
Types_FreqHz 频率;
BIOS_getCpuFreq (&freq);
timerTick_us =(freq.lo/1000000);
GPTimerCC26XX_VALUE loadVal = timerTick_us * TIME_RESET_MIN;//480us、单线复位
loadVal = timerTick_us * 480;//480us、1线复位
GPTimerCC26XX_setLoadValue (hTimer、loadVal);
GPTimerCC26XX_registerInterrupt (hTimer、&timerCallback、GPT_INT_TIMEOUT);
}
void one_init (one_device * d、const uint8_t count){
if (count > 4){
return;
}
timer_init ();
state = state_idle;
//获取单线制引脚的句柄
hOwPin = PIN_OPEN (&hOwPinState、aOwPin);
if (!hOwPin){
//处理分配错误
}
//边沿触发
PIN_registerIntCb (hOwpin、edgeTriggerCallback);
PIN_setInterrupt (hOwpin、PIN_ID (One_PIN)| PIN_IRQ_NEGEDGE);
}