6.4 异步发送/接收器(UART)
S3C2410A通用异步接收器和发送器(UART)提供了三个独立的异步串行I/O(SIO)端口,每个端口都可以在中断模式或DMA模式下操作.换言之,UART可以生成一个中断或DMA请求用于CPU和UART之间的数据传输.
6.4.1 S3C2410A的串行通信单元
S3C2410AUART单元提供三个独立的异步串行通信接口,皆可工作于中断和DMA模式.使用系统时钟最高波特率达230.4Kbps,如果使用外部设备提供的时钟,可以达到更高的速率.每一个UART单元包含一个16字节的FIFO,用于数据的接收和发送(对S3C2440来说,FIFO为64字节).
S3C2410AUART支持可编程波特率,红外发送/接收,一个或两个停止位,5bit/6bit/7bit/8bit数据宽度和奇偶校验.
每个UART包含一个波特率发送器、接收器、计数器和一个控制单元.其波特率发生器可由PCLK,FCLK/n或UEXTCLK(外部输入时钟)来锁定.发送器和接收器包含了16字节FIFO和数据移位器.数据写到FIFO后,在被传送前拷贝到发送移位器.数据通过发送数据引脚(TxDn)被发出.同时,接收数据通过接收数据引脚(RxDn)移入,然后从移位器拷贝到FIFO.
6.4.2 波特率的产生
波特率由一个专用的UART波特率分频寄存器(UBRDIVn)控制,计算公式如下:
UBRDIVn=(int)(ULK/(bps×16))-1
或者UBRDIVn=(int)(PLK/(bps×16))-1
其中:时钟选用ULK还是PLK由UART控制寄存器UCONn[10]的状态决定.如果UCONn[10]=0,用PLK作为波特率发生,否则选用ULK做波特率发生.UBRDIVn的值必须在1~(216-1)之间.
例如:ULK或者PLK等于40MHz,当波特率为115200时,
UBRDIVn=(int)(40000000/(115200×16))-1
=(int)(21.7)-1
=21-1=20
6.4.3 UART通信操作
发送的数据帧是可编程的.其包括一个开始位,5~8个数据位,一个可选的奇偶校验位和1~2个停止位,其可由线性控制寄存器ULCONn来设置.发送器也可以产生一个终止条件,其可以对一个帧发送时间强制串行输出为逻辑0.在当前发送字被完全传输完以后,该模块发送一个终止信号.在终止信号发送后,其串行发送数据到TxFIFO.
与发送类似,接收帧也是可编程的.接收帧由一个起始位,5~8个数据位,一个可选的奇偶校验和1~2位行控制寄存器ULCONn里的停止位组成.接收器还可以检测溢出错误、奇偶校验错误、帧错误和传输中断,每一个错误均可以设置一个错误标志.
溢出错误(Overrun error)是指已接收到的数据在读取之前被新接收的数据覆盖.
奇偶校验错误是指接收器检测到的校验和与设置的不符.
帧错误指没有接收到有效的停止位.
传输中断表示接收数据RxDn保持逻辑0超过一帧的传输时间.
在FIFO模式下,如果RxFIFO非空,而在3个字的传输时间内没有接收到数据,则产生超时.
6.4.4 中断/DMA请求生成
S3C2410A的每个UART有七个状态(Tx/Rx/Error)信号:溢出错误,奇偶校验错误,帧错误,终止,接收缓存数据准备好,发送缓存空和发送移位器空.其由相应UART的状态寄存器(UTRSTATn/UERSTATn)指出.
溢出错误、奇偶校验错误、帧错误、终止条件是作为接收错误状态来参考,每种错误都可以引起接收错误状态中断请求,如果在控制寄存器UCONn中的接收错误状态中断使能位置1.当接收错误状态中断请求被检测到,该信号引起的请求可以通过读UERSTSTn寄存器的值来鉴别.
当接收器传输接收移位器上的数据到在FIFO模式下的接收FIFO寄存器上且接收到的数据数量达到接收FIFO触发水平,接收中断产生,如果在控制寄存器UCONn中接收模式被置1(中断请求或查询模式).在非FIFO模式下,传输接收移位器的数据到接收保持寄存器将引起在中断请求或查询模式下的接收中断.
当发送器传输接收移位器上的数据到发送FIFO寄存器上且在发送FIFO中剩余的数据数量达到发送FIFO触发水平,发送中断产生,如果在控制寄存器UCONn中的接收模式被选定为中断请求或查询模式.在非FIFO模式下,传输发送保持寄存器的数据到发送移位器将引起在中断请求或查询模式下的发送中断.
如果在控制寄存器中发送模式和接收模式被选定为DMAn请求模式,这样DMAn请求将取代上述情形下的接收或发送中断出现.
表6-41 中断请求生成
6.4.5 UART控制寄存器
(1)UART行控制寄存器ULCONn.
该寄存器的第6位决定是否使用红外模式,位5~3决定校验方式,位2决定停止位长度,位1和0决定每帧的数据位数.
表6-42 UART行控制寄存器
表6-43 UART行控制寄存器中对各位的描述
(2)UART控制寄存器UCONn.
该寄存器决定UART的各种模式.
表6-44 UART控制寄存器
表6-45 UART控制寄存器中对各位的描述
续表
(3)UART FIFO控制寄存器UFCONn.
表6-46 UART FIFO控制寄存器
UFCONn[7∶6]=00∶Tx FIFO寄存器中有0个字节就触发中断
01∶Tx FIFO寄存器中有4个字节就触发中断
10∶Tx FIFO寄存器中有8个字节就触发中断
11∶Tx FIFO寄存器中有12个字节就触发中断
UFCONn[5∶4]=00:Rx FIFO寄存器中有4个字节就触发中断
01∶Rx FIFO寄存器中有8个字节就触发中断
10∶Rx FIFO寄存器中有12个字节就触发中断
11∶Rx FIFO寄存器中有16个字节就触发中断
UFCONn[3]:保留
UFCONn[2]=1∶FIFO复位清零Tx FIFO;0∶FIFO复位不清零Tx FIFO
UFCONn[1]=1∶FIFO复位清零Rx FIFO;0∶FIFO复位不清零Rx FIFO
UFCONn[0]=1:允许FIFO功能;0:不允许FIFO功能
(4)UART MODEM控制寄存器UMCONn.
表6-47 UART MODEM控制寄存器
UMCONn[7∶5]保留,必须全为0
UMCONn[4]=1:允许使用AFC模式;0:不允许使用AFC
UMCONn[3∶1]保留,必须全为0
UMCONn[0]=1:激活nRTS;0:不激活nRTS
(5)发送寄存器UTXH和接收寄存器URXH.
这两个寄存器存放着发送和接收的数据,当然只有一个字节,8位数据.需要注意的是在发生溢出错误的时候,接收的数据必须被读出来,否则会引发下次溢出错误.
(6)状态寄存器UTRSTAT.
表6-48 状态寄存器
表6-49 状态寄存器中对各位的描述
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。