Jon*_*ton 8 embedded serial-port interrupt stm32
在STM32F2上使用两个以115200波特率运行的USART,一个用于与无线电模块通信,另一个用于从PC进行串行通信.时钟速度为120MHz.
当同时从两个USART接收数据溢出时,可能会在一个USART或另一个USART上发生错误.快速回退包络计算应该有足够的时间来处理两者,因为中断只是简单地将字节复制到循环缓冲区.
在理论和测量中,将字节推送到缓冲区的中断代码应该/确实以2-4μS的顺序运行,在115200波特处我们有大约70us处理每个字符.
为什么我们在一个或另一个USART上看到偶尔的ORE?
更新 - 其他信息:
鉴于上述所有70us在我们清除中断的时间内至少是10倍 - 所以我不确定它是如此容易解释.我是否应该断定我必须考虑其他一些因素?
MDK-ARM是版本4.70
指纹中断由RTOS使用,因此无法计时其他ISR每个字节需要2-3μS才能运行.
小智 3
几个月前,我在 Cortex M4 (SAM4S) 上遇到了与您类似的问题。我有一个基于定时器中断以 100 Hz 调用的函数。
与此同时,我将 UART 配置为中断字符接收。UART 上的预期数据是 64 字节长的数据包,每个字符的中断会导致延迟,因此我的 100 Hz 更新功能以大约 20 Hz 的速度运行。100 Hz 在这个特定的 120 MHz 处理器上相对较慢,但每个字符的中断会导致大量延迟。
我决定将 UART 配置为使用 PDC(外设 DMA 控制器),我的问题立即消失了。
DMA 允许 UART 将数据存储在内存中,而无需中断处理器,直到缓冲区已满,从而节省大量开销。
就我而言,我告诉 PDC 将 UART 数据存储到缓冲区(字节数组)中并指定长度。当 UART 通过 PDC 填充缓冲区时,PDC 发出中断。
在 PDC ISR 中:
正如 swineone 上面推荐的那样,实施 DMA,您就会热爱生活。
归档时间: |
|
查看次数: |
7218 次 |
最近记录: |