UART是什么?
通用异步收发器(universal asynchronous receiver transmitter)
UART直接是全双工方式传送数据
UART使用标准TTL/CMOS逻辑电平来表示数据(高:1 低:0)。为了增强数据的抗干扰能力,通常将TTL/CMOS逻辑电平转换为RS-232逻辑电平(高:0 低:1)—通过MAX3232芯片进行转换
什么是帧(frame)?
有效数据传输单位,具有完整意义,不可分割。
传送数据前要约定好波特率和数据的传输格式
什么是奇偶校验
数据位连同校验位,“1”的数目为奇数,奇校验
反之为偶数,偶校验
异步传输方式
拥有起始位
s3c2440
UART提供了3个异步串行通信端口
发送数据步骤
- SOC将数据写入发送FIFO
- UART自动将FIFO数据复制到发送移位器(transmit shifter)
- 发送移位器将数据一位一位发送到TxDn线上
接收步骤
上面的反步骤,是从RxDn数据线读入
s3c2440 UART使用
初始化
要设置
1. 波特率
2. 传输格式(多少个数据位,是否使用校验位,奇校验or偶校验,多少个停止位,是否使用硬件流控制)
3. 对于s3c2440还要选择相应引脚为UART功能
4. 选择UART通道工作模式为中断模式或者DMA模式
读取写入数据
向某个寄存器写入数据即可发送
从某个寄存器读取数据来接收
通过查询状态寄存器或者设置中断模式来得知数据是否发送或者接收完毕
相关控制寄存器
具体见s3c2440A芯片手册
ULCONn:行控制器
UCONn:控制寄存器
UFCONn:FIFO控制寄存器(默认FIFO触发深度为1,本例不需要该寄存器)
UMCONn:MODEM控制寄存器
UTRSTATn:状态寄存器(是否发送完毕)
UTXHn:发送缓冲寄存器
URXHn:接收缓冲寄存器
UBRDIVn:波特率除数因子寄存器
波特率
有三个UART波特率除数因子寄存器UBRDIV0~2,其中的值用于决定波特率
例如:
如果波特率为115200bps,且UART时钟频率为40MHz
UBRDIV = (int)(40 000 000/ (115200*16))-1
= (int)21.7 - 1
= 22 - 1 = 21