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.

[参考译文] RTOS/CC1350:计时器中断无法正常工作

Guru**** 2540720 points


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

https://e2e.ti.com/support/wireless-connectivity/sub-1-ghz-group/sub-1-ghz/f/sub-1-ghz-forum/711197/rtos-cc1350-timer-interrupts-are-not-working-properly

器件型号:CC1350

工具/软件:TI-RTOS

您好!

当我添加除初始化之外的几乎任何函数时、请帮助我找出计时器中断停止工作的原因。

定时器初始化并按如下方式启动:

GPTimerCC26XX_Params 参数;

GPTimerCC26XX_PARAMS_INIT (params);
Params.width = GPT_CONFIG_32位;// GPT_CONFIG_16BIT;
params.mode = GPT_MODE_periode_up;
params.debugStallMode = GPTimerCC26XX_DEBUG_STALL_OFF;
GPTimerCC26XX_Handle hTimer = GPTimerCC26XX_OPEN (CC1350STK_GPTIMER0A、&params);

xdc_runtime_Types_FreqHz 频率;
BIOS_getCpuFreq (&freq);
GPTimerCC26XX_value loadVal = freq.lo - 1;//47999
GPTimerCC26XX_setLoadValue (hTimer、loadVal);
GPTimerCC26XX_registerInterrupt (hTimer、timerCallback、GPT_INT_MATCH);//GPT_INT_TIMEOUT
GPTimerCC26XX_START (hTimer);


void timerCallback (GPTimerCC26XX_Handle handle、GPTimerCC26XX_IntMask interruptMask){
//此处显示中断回调代码。 最大限度地减少中断处理。
GPIO_TOGGLE (Board_GPIO_LED1);

} 

 如果在 GPTimerCC26XX_START (hTimer)之后没有添加任何其他内容、则此代码段可正常工作;

但是、当我在上述代码之后添加循环、睡眠或几乎任何函数时、它会停止执行中断(触发 LED)

此外、当我在第一个片段之后或在回调函数内调用 UART_WRITE 函数时、计时器停止工作!  

为什么会发生这种情况! 定时器已经是一个硬件外设、并且应该独立于代码的其余部分工作。 它还执行硬件中断!  

提前感谢您

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

    如果要使用匹配中断、还必须使用 setMatchValue 设置匹配值。 如果您改为使用 GPT_INT_TIMEOUT、则将使用您提供的代码片段获得周期性 GPTimer 计时。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、M-W、

    我仍然想使用周期性中断(我希望计时器每秒切换一次 LED)。 但是、此外、我还想正常添加程序的其余部分(例如在 UART 上写入发生的中断数)。 但是当我添加任何其他要处理的内容时、计时器似乎停止/或中断停止执行。

    此致、
    Majd
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    如果您需要周期性计时器、则应使用 GPT_INT_TIMEOUT、而不是像您那样匹配(您可以使用匹配、但必须进一步更改代码)。 请参阅周期性计时器的示例用法:

    dev.ti.com/.../_g_p_timer_c_c26_x_x_8h.html

    关于程序在您执行任何其他操作时停止的问题、我希望这与您正在执行的操作有关。 例如、当您使用 UART 时、如何设置它、您是否确定没有在任务上下文之外执行任何阻塞调用(例如、回调中的阻塞 UART 写入将挂起 RTOS)?