shipinsky 2012-02-22
在分析ARM-Linux s3c2440中UART的时有必要先了解 s3c2440A中串口的硬件知识。也就是本文----
硬件篇:
S3c2440A串口提供三个独立的异步串行通信I/O端口(asynchronousserial I/O ports)。每一个串口均可以以普通中断方式或者DMA方式进行数据收发,采用系统时钟时,最大速率为115.2kbps.如果采用外部时钟(UEXTCLK),UART速度可以更快。每个串口包含有2个64-byte的FIFO缓存区用来发送或传输数据。
S3c2440A 串口具有可编程波特率,红外(IR)收发数据,1或者2 位的停止位(stop),5/6/7/8 位数据宽度和奇偶校验功能(parity checking)。
每个串口由波特率产生单元,发送单元,接收单元和控制单元组成。如下图所示,波特产生单元的时钟可以是PCLK,FCLK/n,或者UEXTCLK(外部输入的时钟)。发送和接收单元包含有一个64-byte的FIFOs(先入先出队列)和数据移位器。发送数据时,数据被写进FIFO然后拷贝到数据移位器后发送数据,最后数据被一位一位由数据发送脚(TxDn)送出。类似的,数据在接收时,数据一位一位的由数据接收脚(RxDn)接收,然后拷贝到FIFO缓存区。
寄存器:
串口的控制寄存器有三个:UCON0 ~ UCON1分别对应于每一个串口,用于设置UART的工作模式,波特率,中断类型等。
状态寄存器:UTRSTAT0 ~UTRSTAT2, 用于串口工作时,接收/发送的状态指示
FIFO控制寄存器: UFCON0 ~ UFCON2, 用于对FIFO的设置。
FIFO状态寄存器: UFSTAT0 ~ UFSTAT2, 用于表示FIFO缓存中的状态
对于Arm-linux s3c2440串口的使用,主要是对以上寄存器的操作。
下一篇将结合源码分析arm-linux s3c2440串口驱动的实现(软件篇)