下面介绍UART 的数据传输和接收、中断和波特率的产生、循环返回的模式、红外模式以及自动的数据流控制。
(1)数据传输
UART 所传送的数据帧是可编程的,包含1 个开始位,5 ~8 个数据位,1 个可选奇偶位和1 ~2 个停止位,具体由行控制寄存器(ULCONn)来定义。 发送器也可以产生断点条件,断点条件迫使串行输出口连续输出大于输出一帧数据所用时间的逻辑0 状态。 这个块在完整地传输完当前的信息后传输断点信号输出。 在断点传输后,继续传输数据给TxFIFO(在Non-FIFO 模式下的Tx 保持寄存器)。
(2)数据接收
与数据的传送一样,UART 接收的数据帧也是可编程的,行控制寄存器(ULCONn)包含了开始位,5 ~8 个数据位,1 个可选的奇偶位和1 ~2 个停止位,接收机可以发现数据溢出、奇偶错误、帧的错误和断点条件,其中每一个都可以在寄存器中置一个错误标志位。
①溢出错误表明新的数据在旧数据没有被读取的情况下,覆盖了旧的数据。
②奇偶错误表明接收器发现一个不希望出现的奇偶错误。
③帧错误表明接收的数据没有一个有效的停止位。
④断点条件表明接收器收到的输入保持了大于传输一帧数据时间的逻辑0 状态。
如果在接收3 个字的时间内没有接收到数据且Rx FIFO 是非空的,那么接收超时(在FIFO 模式下)。
(3)自动流控制AFC( Auto Flow Control)
S3C44B0X 中的UART 用nRTS(发送请求信号)和nCTS(清除发送信号)来支持自动流控制,以此解决UART 之间的互连。 如果用户将UART 连在Modem 上,那么需将UMCONn 寄存器的自动控制流位设为失效,而由软件来控制发送请求信号。
在自动流控制中,nRTS 被接收器条件控制,而发送器的操作被nCTS 信号所控制。 只有在nCTS 信号有效的情况下,UART 的发送器才会将数据传输到FIFO(在自动流控制中,nCTS信号的有效表示另外一个UART 的FIFO 准备接收数据)。 在UART 接收数据前,如果接收数据的FIFO 有超过2 字节的空间,那么nRTS 有效;如果接收数据的FIFO 的空间剩余空间在1字节以下,那么nRTS 无效(在AFC 中,nRTS 信号的有效表示接收器的FIFO 已经准备好接收数据)。 UART 的AFC 接口如图6.3 所示。
图6.3 UART 的AFC 接口
(4)非自动流控制(nRTS 和nCTS 由S/W 所控制)
1)接收数据操作
①选择接收模式(中断或是BDMA 模式)。
②检查UFSTARn 寄存器中Rx FIFO 计数的值,如果其值小于15,则用户须置UMCONn[0]为“1”(nRTS 有效);如果其值大于或等于15,则用户须置UMCONn[0]为“0”(nRTS 无效)。
③重复步骤②。
2)发送数据操作
①选择发送模式(中断或BDMA 模式)。
②检查UMSTATn[0]的值,如果其值为“1”(nCTS 有效),则用户往Tx 缓冲器或TxFIFO寄存器写数据。
3)RS-232C 接口(www.xing528.com)
①如果用户连接了调制解调器(modem)接口,则nRTS、nCTS、nDSR、nDTR、DCD 和nRI信号会被用到。 在这种情况下,用户利用软件通过S/W 用通用I/O 口来控制这些信号,因为AFC 不支持RS-232C 接口。
(5)中断/DMA 请求的产生
S3C44B0X 的UART 有7 个状态(Tx/Rx/Error)信号:溢出错误、奇偶错误、帧错误、断点条件、接收FIFO/buffer 数据准备就绪、发送FIFO/buffer 空和发送移位寄存器空等,它们由相应的UART 状态寄存器(UTRSTATn/UERSTATn)声明。
当处于接收错误状态时,如果在控制寄存器(UCONn)中接收错误状态中断使能位被置为“1”,溢出错误、奇偶校验错误、帧错误、断点错误每一个作为一种错误状态都可以发出错误中断请求。 当一个接收错误状态中断请求被发现时,引起中断请求的信号会被UERSTSTn 所识别。
如果控制器中的接收模式被选定为中断模式,当接收器从它的接收移位寄存器向它的接收FIFO 传输数据时,会激活接收FIFO 的可以引起接收中断的“满”状态信号。
同样,如果控制器中的发送模式被选定为中断模式,当发送器从它的发送FIFO 向它的发送移位寄存器传输数据时,可以引起发送中断的发送FIFO“空”状态信号被激活。
如果接收/发送模式被选定为DMA 模式,接收FIFO 满和发送FIFO 空的状态信号也可以被连接产生DMA 请求信号。
表6.27 与FIFO 相连的中断
(6)UART 错误状态FIFO
UART 除了RxFIFO 寄存器,还有一个错误状态FIFO,错误状态FIFO 指出FIFO 中的数据哪一个在接收时出错。 错误中断发生在有错误的数据被读取时。 为清除FIFO 的状态,寄存器URXHn(有错的)和UERSTATn 会被读取。
(7)波特率的产生
每一个UART 的波特率发生器为收/发器提供一个连续时钟,时钟源为可选为S3C44B0的内部系统时钟,波特率的时钟通过一个16 位分频器分频后产生,16 位分频器的值由UBRDIVn 寄存器具体说明,UBRDIVn 由下式决定:
分频器的值为1 ~(216 -1),例如:如果波特率为115 200 Bd,而MCLK 为40 MHz,则
(8)回环模式
S3C44B0X 的UART 提供了一个供参考的测试模块作为回环模式,来解决通信链接中出现的孤立错误。 此种模式下,所传输的数据会被立即接收,这个特点允许处理器检验内部的传输和接受所有SIO 通道的数据路径。 这种模式可以通过设定UCONn 寄存器中的回环模式位来选择。
(9)红外模式
S3C44B0X 的UART 模块支持红外传送和接收,它可以通过设置ULCONn 寄存器红外模式位来选择。 此模式下的执行原理如图6.4 所示。
图6.4 IrDA 功能框图
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。