x210v3开发板u-boot-2012.10移栽之七-六步轻松搞定串口初始化
x210v3开发板u-boot-2012.10移植之七---六步轻松搞定串口初始化






欢迎加入朱老师物联网大课堂qq群 一起学习进步
群号:397164505
串口是调试的利器,单纯靠led来调试是很痛苦的一件事,所以当务之急是初始化串口。注意:我这里是初始化的串口0.
首先,从需求开始,先想象一下软件需要做些什么?串口无非就是要实现接收和发送数据,那么从哪里发送或者接收数据呢?所以就要求配置GPIO为UART模式,说明从这里接收或发送数据。发送数据的速度多快呢?所以要设置波特率。然后,一次发送的数据长度为多少?是否使用奇偶校验,停止位设为多少位?这就要配置ULCON。当然,外设都得配置时钟源,所以UCON少不了。用不用FIFO应当要可配置,那么UFCON是必须的。还有流控开不开,这个如果不懂的话可以看我的另一篇文章,串口通信原理。
1.六步轻松搞定串口初始化
1.1 配置相应GPIO口为串口模式
1.2 配置ULCON
1.3 配置UCON
1.4配置UFCON
1.5配置UMCON
1.6设置波特率
2.具体初始化细节
2.1 通过datasheet也就是S5PV210_UM_REV1.1.pdf文件,找到UART0接在GPA0口。配置GPA0CON为0x22222222,这里把UART1也配置了。
2.2 配置ULCON0(如果是串口2则配置ULCON2)为 0x3
2.3 配置UCON0(串口2是UCON2)为0x305
2.4 配置UFCON0(串口2为UFCON2)为 0x1,这个简单使能fifo就可以了。其他几个状态寄存器不用管
2.5 配置UMCON0(串口2为UMCON2)为0x0,不使用流控,不管他
2.6 波特率设置为115200
需配置两个寄存器UBRDIV0(串口2为UBRDIV2)为34(注意十进制哦)和UDIVSLOT0(串口2为UDIVSLOT2)为0xDFDD
这个要计算了 计算公式手册上有,直接看手册提供的例子40000000是UART的时钟频率,也就是PCLK,我们的PCLK配置为66MHz。
DIV_VAL=(66000000/(115200X16))-1 = 34.8 0.8X16= 13 查表得到 UBRDIV0 = 0xDFDD
初始化代码贴下面:
uart_init: /* set GPIO to enable UART0-UART4 */ mov r0, r8 ldr r1, =0x22222222 str r1, [r0, #0x0] @ config UART0 and UART1 ldr r1, =0x00002222 str r1, [r0, #0x20] @ config UART2 ldr r0,=S5PC110_UART_BASE @如果是使用串口2,只需将这里改为 ldr r0,=S5PC110_UART2_BASE ldr r1,=0x3 str r1,[r0] @ULCON=3 ldr r1,=0x305 str r1,[r0,#0x4] @UCON=0x305 ldr r1,=0x1 str r1,[r0,#0x8] @UFCON=1 ldr r1,=0x0 str r1,[r0,#0xc] @UMCON=0 ldr r1,=34 str r1,[r0,#0x28] @Baud rate 115200 ldr r1,=0xDFDD str r1,[r0,#0x2c] @UDIVSLOT mov pc,lr