This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] CC2650MODA:TI RTOS 计时器重启

Guru**** 2562120 points
Other Parts Discussed in Thread: CC2650

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/912521/cc2650moda-ti-rtos-timer-restart

器件型号:CC2650MODA
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);
} 

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 Pritesh、

    复位的"是"取决于所讨论的模式。 在您的情况下、您需要手动重置计数器寄存器、以避免其达到设置的限值。

    一种执行所需操作的便捷方法,以便使用 driverlib 中的 TimerSynchronize() API:

    http://dev.ti.com/tirex/explore/content/simplelink_cc13x0_sdk_3_20_00_23/docs/driverlib_cc13xx_cc26xx/cc13x0/driverlib/group__timer__api.html

    为使用中的计时器调用此函数时、如果计时器处于运行状态、则应发出复位命令。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、M-W、

    我将尝试从 driverlib 中获取 TimeSynchronize() API。 是否有针对 driverlib API 的示例源代码。 大多数 MCU 的 driverlib 通常都提供了示例源代码、但我在 CC2650的 driverlib 包中找不到示例文件夹。 这将使您易于理解和使用 driverlib API。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 Pritesh、

    SDK 中没有 DriverLib 示例、现有文档就是我发送给您的链接中的内容。 它显示了每个 API 的代码片段、如果您研究这个、您会发现它基本上只是寄存器抽象。  

    在某些情况下、您可以在技术参考手册中找到有关使用 DriverLib 的简单示例。