UART – Advanced Features
概要 / Overview
最简单直接的使用UART接口的方式,是在轮循操作中来设置和处理UART接口。 轮询式UART的问题是轮询方式本身就是低效率的。 如果我们的UART被配置为115200的波特率和8N1,那么传输一个字符需要多长时间? 每个字节的数据需要10个符号来发送。 这意味着我们每秒钟可以传输11520个字符。 这意味着1个字符大约需要86微秒的时间来发送。
86微秒可能看起来并不长,但如果我们的微处理器以50Mhz的速度运行,这相当于每个字符发送需要4341个时钟周期。 这是一个相当多的时钟周期,为了发送一串字符中的下一个字符而要一直等待。
我们将研究一些硬件和软件技术,以减少我们等待数据传输或接收的时间。
中断 / Interrupts
减少等待UART的时钟周期数的最明显方法之一是让UART产生中断。 UART中断允许主应用程序在UART不活动时执行其他任务。 UART通常产生接收和发送中断。 当有新数据到达时,UART会产生一个接收中断。 对于接收中断,应用程序和ISR之间的交互是非常直接的。 中断服务例程将新数据放入SRAM,提醒主应用程序,并清除中断。 由于中断只在数据被接收时发生,处理器可以自由地进行其他操作。
发送中断有一点不同。 一些微控制器的UART在发送缓冲区为空时产生一个中断。 这个中断是为了指示应用程序可以通过UART发送下一个字节。 我们想要避免的是这样的情况,即应用程序没有传输数据,结果UART不断产生发送数据为空的中断。这种情况会使应用程序处于空转状态,因为UART处理程序会被不断执行。 如果你使用的微控制器在Tx硬件FIFO中没有数据时不断产生Tx空中断,你可以使用以下过程来消除主应用程序的空转:
1,当UART的循环发送缓

文章探讨了如何通过使用中断、硬件FIFO和软件循环缓冲区来提高UART接口的效率。中断允许在UART不活动时执行其他任务,FIFO减少了等待发送和接收字符的时间,而循环缓冲区则解决了数据传输速率与处理速度不匹配的问题。采用生产者-消费者模型管理发送和接收数据,确保数据传输的同步和高效。
最低0.47元/天 解锁文章
2515

被折叠的 条评论
为什么被折叠?



