FreeRTos高频ISR

时间:2018-07-30 13:48:15

标签: freertos isr

有人可以帮我执行高(例如6kHz)执行率的任务吗? 需要在该频率上进行SPI传输(任务代码已写入)。我可以在没有任何控制的情况下达到7kHz以上的频率(只需一项任务就没有定时控制,可以全时运行),因此时间不是问题。

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

因此,方法是使用ISR。那正确吗?找不到如何执行此操作的示例。我在FreeRTos中几乎没有经验。

在Toradex IMX7D中使用Toradex FreeRTOS版本。

谢谢。

3 个答案:

答案 0 :(得分:0)

您是否在问如何使用FreeRTOS做到这一点?在这种情况下,FreeRTOS book和网站(this is just one way of doing it)都有示例。但是,正如您自己指出的那样,由于频率很高,因此您确实需要在中断中执行此操作-在这种情况下,您需要查看硬件手册,以了解硬件在将DMA数据传输到外围设备方面具有哪些功能,等

答案 1 :(得分:0)

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

您可以尝试使用MCU的计时器执行计时,并在ISR中运行   xSemaphoreGiveFromISR

在RTOS任务中,将侦听器 xSemaphoreTake(xSemaphore,LONG_TIME)== pdTRUE

答案 2 :(得分:0)

基于examples / imx7_colibri_m4 / driver_examples / gpt(Toradex FreeRTOS版本)中的解决方案解决了该问题。

仅使用了源自ccmRootmuxGptOsc24m时钟的GPTB。这很重要,因为linux内核使用默认的Pfd0时钟在启动时挂起。

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