FreeRTos 高频 ISR

FreeRTos High Frequency ISR

谁能帮我做一个高(比如6kHz)执行率的任务? 需要在此频率上进行 SPI 传输(任务代码已编写)。我可以在没有任何控制的情况下达到7kHz以上(只有一个任务没有时间控制,运行全职),所以时间不是问题。

问题是 TICK_RATE 的分辨率为 ms,这对我需要的来说太高了。通过一些研究,我发现降低时间分辨率会导致不必要的开销。

所以,方法是使用 ISR。那正确吗?找不到如何做到这一点的例子。我对 FreeRTos 几乎没有任何经验。

在 Toradex IMX7D 中使用 Toradex FreeRTOS 版本。

提前致谢。

您是在问如何使用 FreeRTOS 执行此操作吗?在这种情况下 FreeRTOS book has examples, as does the website (this is just one way of doing it)。但是,正如您自己指出的那样,由于您确实需要在中断中执行此操作的频率 - 在这种情况下,您需要查看硬件手册以查看硬件在将数据传输到外围设备方面具有哪些功能,等等

你需要更清楚地表达你的任务。什么单片机?两侧传输?你有 DMA 吗?

你可以尝试使用你的MCU的定时器来执行计时,并在它的ISR中运行 xSemaphoreGiveFromISR.

在 RTOS 任务中放置监听器 xSemaphoreTake( xSemaphore, LONG_TIME ) == pdTRUE

根据examples/imx7_colibri_m4/driver_examples/gpt(Toradex FreeRTOS 版)中的解决方法解决。

刚刚使用了从 ccmRootmuxGptOsc24m 时钟派生的 GPTB。这很重要,因为 linux 内核在使用默认 Pfd0 时钟启动时挂起。

要获得我需要的频率,只需将 GPTB 频率除以所需频率,然后传递给 GPT_SetOutputCompareValue()。