S3C6410 轮询串口配置
一, 串口设置
串口需设置为 8位数据位 1位停止位 0位校验位 8n1 ,波特率 115200 ,无流控。
1. 配置GPIO引脚为串口功能
2. 数据数据配置 8N1
使该寄存器设置为 0x03 。正常模式 8位数据位 1位停止位 无校验位
3. 设置串口模式
使该寄存器设置为 0x05 。 发送接收设置为 中断或者轮询模式 其他位设置为零
4. 使能发送接收FIFO
[7:6] [5:4] 用于中断
设置[0] 位为 1 使能FIFO 其他设置为零
5. 设置UMCONn 为零 关闭流量控制
6. 设置波特率
波特率设置根据公式
DIV_VAL = UBRDIVn + (num of 1’s in UDIVSLOTn)/16
DIV_VAL = (PCLK / (bps x 16 ) ) −1
设置两个寄存器
UBRDIV n 即为公式 UBRDIVn
UDIVSLOT n 这个寄存器中 1 的个数 即为 (num of 1’s in UDIVSLOTn)
波特率 115200 PLCK = 66.5MHz
计算得 DIV_VAL = (66.5*10^6/ (115200 x 16 ) ) −1 = 35.08
35.08 = 35 + 0.08 即 UBRDIVn 设置为 35
(num of 1’s in UDIVSLOTn)/16 = 0.08 num of 1’s in UDIVSLOTn = 1
7. 发送数据与接收数据
发送数据 首先读取串口状态寄存器 UFSTATn 保证发送FIFO 未满, 即 [14] 位不能为1 。往URXHn 寄存器中写入一个字节 即发送
接收数据 首先读取串口状态寄存器UFSTATn 保证接收FIFO 有数据 即[5:0] 不为零 。读取 URXHn 寄存器的值 即受到一个字节的数据。[6] 判断接收FIFO 是否满。