1、串行通信与中断的关系
(1)、串口通信分为发送 / 接收2部分。发送方一般不需要(也可以使用)中断即可完成发送,接收方必须(一般来说必须,也可以轮询方式接收就是CPU一直盯着收)使用中断来接收。
(2)、发送方可以选择使用中断,也可以选择不使用中断。使用中断的工作情景是:发送方先设置好中断并绑定一个中断处理程序,然后发送方丢一帧数据给transmitter,transmitter发送耗费一段时间来发送这一帧数据,这段时间内我们的发送方CPU可以去做别的事情,等transmitter发送完成后会产生一个TXD中断,该中断会导致事先绑定的中断处理程序执行,在这个中断处理程序中CPU会切换回来继续给transmitter放一帧数据,然后CPU切换离开;不使用中断的工作情景是:发送方事先禁止TXD中断(当然也不需要给相应的中断处理程序了),发送方CPU给一帧数据到transmitter,然后transmitter耗费一段时间来发送这帧数据,这段时间CPU不能离开,在这等着(CPU没有切换去做作的事情),待发送方发送完后CPU再给它一帧数据继续发送直到所有数据发完。(使用中断CPU在transmitter发送耗费时间内是可以去干别的事,而不使用中断CPU只能一直盯着发送直到发送全部数据完成)。CPU是怎么知道transmitter已经发送完了?有中断时发完会给一个中断,而没有中断时,是有个状态寄存器,状态寄存器中有一个位叫发送缓冲区空标志(空时被置1,满时为0),transmitter发送完成(发送缓冲区已经空了)就会给这个标志位置位,CPU就是通过不断查询这个标志位为1还是0来指导发送是否已经完成了。
(3)、接收方也可以选择使用中断和不使用中断。使用中断情景:当接收到一帧数据后会产生一个中断(也要绑定一个中断处理程序),这个中断会通知(中断处理程序)CPU,CPU会过来接收这帧数据。接收完成后CPU可以去干别的事了。如果不使用中断情景:CPU就得不停地盯着(一个寄存器,有一个位叫接收缓冲区满标志位,这个位是硬件自动置位的)。
(4)、因为串口通信是异步的,异步的意思就是说发送方占主导权(朱老师比喻领导让你等他一会找你有事)。也就是说发送方随时想发就能发,但是接收方只有时刻等待才不会丢失数据。因为这个差民就导致发送方可以不用中断,而接收方不得不使用中断模式。
(5)、是否使用中断是通过一个寄存器配制的。
2、210串行通信接口的时钟设计
(1)、串口通信为什么需要时钟?因为串口通信需要一个固定的波特率,所以transmitter和receiver都需要一个时钟信号。
(2)、时钟信号从那里来?源时钟信号是外部APB(PCLK_PSYS 66MHz)总线提供给串口模块的(这就是为什么我们说串口是挂在APB总线上的),然后进到串口控制器内部后给波特率发生器(实质上是一个分频器),在波特率发生器中进行分频,分频后得到一个低频时钟,这个时钟就是给transmitter和receiver使用的。
(3)、串口通信中时钟的设置主要看寄存器设置。重点有:寄存器源设置(为串口控制器选择源时钟,一般选择为PCLK—PSYS,也可以是SCLK—UART),还有波特率发生器的2个寄存器。
(4)、波特率发生器有2个重要的寄存器:UBRDIVn和UDIVSLOTn(n用来区分210的4个串口),其中UBRDIVn是主要的设置波特率的寄存器,UDIVSLOTn是用来辅助设置的,目的校准波特率的。
中断相关寄存器-1
中断相关寄存器-2:
波特率相关寄存器—1:
波特率相关寄存器—2:
来源:CSDN
作者:qq_41680432
链接:https://blog.csdn.net/qq_41680432/article/details/104737150