SPV210串口通信接口详解3

串行通信与中断的关系

(1)串口通信分发送和接收2部分。发送方一般不需要中断,接收方需要(一般必需要,有时候用轮询)使用中断接收

(2)发送方可以选择使用中断,也可以选择不使用中断。使用中断的工作情景:发送方先设置好中断并绑定好一个中断处理程序,然后发送方丢一帧数据给transmitter,transmitter发送完成后会产生一个TXD中断,该中断会导致事先绑定的中断处理程序执行,在中断处理程序中cpu会切换回来继续给transmitter放一帧数据 ,然后cpu切换离开。

(3)不使用中断的工作情景:发送方事先禁止TXD中断(当然也不需要给对应的中断处理程序了)发送方CPU给一帧数据到transmitter,然后transmitter耗费一段时间来发送这帧数据,这段时间CPU在这里等着(CPU没有切换去做别的事情)待发送方发送完成后CPU再给它一帧数据发送直到所有数据发完。CPU是怎么知道transmitter已经发送完了?原因:有一个状态寄存器,状态寄存器中有一个位叫做发送缓冲区标志位,transmitter发送完成(发送缓冲区空了)就会给这个标志位置位,CPU就是通过不断的查询这个标志位为1还是0来指导发送是否已经完成的。

(4)串口通信是异步的,异步的意思是发送方占有主导权,也就是发送方想发就发,但是接收方只有时刻等待才不会丢数据。所以这个差异就导致发送方可以不用中断,而接收方不得不使用中断模式。

串口通信接口的时钟设计

(1)串口通信为什么需要时钟?因为串口通信需要波特率。

(2)时钟从哪里来?源时钟信号是外部APB总线(PCLK_PSYS,66MHz)提供给串口模块的(这就是为什么我们说串口挂在APB总线上的),然后进到串口控制器内部后给波特率发生器(实质是一个分频器),在波特率发送器中进行分频,分频后得到一个低频时钟,这个时钟给transmitter和receiver使用的。

(3)串口通信时钟设置主要看寄存器设置。重点的有:寄存器源设置(为串口控制器选择源时钟,一般选择为PCLK_PSYS,也可以是SCLK_UART),还有波特率发生器的2个寄存器。

(4)波特率发生器有两个重要的寄存器:UBRDIVn和UDIVSLOTn是主要的设置波特率的寄存器,UDIVSLOTn用来辅助设置的,目的是为了校准波特率的。

猜你喜欢

转载自blog.csdn.net/weixin_40405692/article/details/81329934