串口接收中断有按字节触发中断,这个中断在8位机的时代就设计完成,在当下的32位MCU中亦保留。但在有FIFO的硬件外设中,串口接收或发送中断也有半满(1/2)中断,更高级一些的FIFO更有1/4和3/4满中断,类似的还有DMA传输。硬件设计中为什么会增加这个功能特性呢?肯定会有它的原因与道理的,您知道吗?核心原因和设计目的如下:
硬件原生触发逻辑 当DMA配置的传输总量完成一半时,硬件会自动置起对应的中断标志位,若提前开启该中断使能,就会触发半满中断,这是STM32等MCU的DMA外设自带的基础功能。
核心设计意义
实现“伪双缓冲”效果:将单个缓冲区逻辑拆分为前后两半,前半区数据接收完成后触发中断,MCU可及时处理前半段数据,此时DMA仍可向后半区写入新数据,避免新数据覆盖还未处理的旧数据,大幅降低连续大数据传输的丢包风险。
适配高实时场景:在高速ADC采样、大流量串口接收等场景下,无需等待整个缓冲区填满才处理数据,能让MCU更早介入数据搬运,减少数据溢出的概率,同时相比硬件双缓冲区方案,还能节省一半的内存占用。
补充全满中断的不足:对于持续不断的数据流,仅靠全满中断很容易出现数据覆盖问题,半满+全满的组合可以把数据处理的时间窗口拆成两段,给MCU内核留出更充裕的处理时间。
所以,亲爱的网友们你们不要辜负设计人员的良苦用心哟!
我要赚赏金
