S3C2410 的UART(通用异步串行口)单元提供三个独立的异步串行I/O 端口,每个都可以在中断和
DMA 两种模式下进行。UART支持的最高波特率达230.4kbps。每个UART通道包含2 个16 位FIFO
分别提供给接收和发送。
每个UART 包含波特率发生器,接收器,发送器和控制单元。。波特率发生器以PCLK或UCLK为时钟
源。 发送器和接收器包含16 字节FIFO 寄存器和移位寄存器,当发送数据的时候,数据先写到FIFO
然后拷贝到发送移位寄存器,然后从数据输出端口(TxDn)依次被移位输出。被接收的数据也同样从
接收端口(RxDn)移位输入到移位寄存器,然后拷贝到FIFO 中。
异步串行口的操作
数据发送操作
数据发送帧的格式是可编程的,它包含一个开始位,5 到8 个数据位,一个可选的奇偶位和一个
或两个停止位,这些可以通过线性控制器(ULCONn)来设置。发送器也能够产生发送中止条件。中
止条件迫使串口输出保持在逻辑0 状态,这种状态保持一个传输帧的时间长度。通常在一帧传输数据
完整地传输完之后,在通过这个全0 状态将中止信号发送给对方。中止信号发送之后,传送数据连续
放到FIFO 中(在不使用FIFO 模式下,将被放到输出保持寄存器)。
数据接收操作
与数据发送一样,数据接收的帧也是可以编程的,它包含一个开始位,5 到8 个
数据,一个可选的奇偶位和一位或两位停止位,它们都是通过线性控制器(ULCONn)
来设置的。
接收器能够检测溢出错误,奇偶校验错误,帧错误和中止状况,每种情况下都将
会将一个错误标志置位。
UART 异步串行口的波特率发生器
每个UART 的波特率发生器为传输提供了串行移位时钟。波特率产生器的时钟源可以从S3C2410
的内部系统时钟或UCLK 中来选择。。波特率由时钟源(PCLK 或UCLK)16 分频然后被UART 波特
率除数寄存器(UBRDIVn)指定的16 位除数决定。因此,UBRDIVn 的值可以按照下式确定:
UBRDIVn=(int)(PCLK/(bps*16))-1 , 其中bps为波特率。
例如,如果波特率为115200bps 且PCLK 或UCLK 为40MHz,则UBRDIVn 为:
UBRDIVn =(int)(40000000)(115200*16))-1
= (int)(21.7)-1
= 21-1 = 20
UART 异步串行口波特率发生器的误差极限
UART传输10bit数据的时间误差应该小于1.87%(3/160)。
tUPCLK = (UBRDIVn + 1) x 16 x 10 / PCLK 实际的传输10bit所需时间。
tUEXACT = 10 / baud-rate 理想情况下传输10位需要的时间。
UART error=(tUPCLK – tUEXACT) / tUEXACT x 100%
异步串行口的相关寄存器
线路控制寄存器(ULCON)
线性控制寄存器,主要用来规定传输帧的格式。下面表格是线控制寄存器的地址