在没有引入UART之前,由于没有OS,我们写程序烧到开发板内执行后,并不能在程序的运行过程中打印一些提示信息告诉我们程序究竟运行了如何或者提供接口让用户去控制程序的运行路径,最后也只能通过物理现象去判断程序是否执行成功。
使用串口我们便可以实现开发板最基本的数据的发送和接收,实现同开发板的交互,控制程序的运行,并且在程序运行中打印出一些信息进行debug。实际上bootloader和kernel的控制台(nfs模式)都是通过uart实现的。由此我们可以发现uart在实际开发中是非常重要的。
UART寄存器详解
1.UART行控制寄存器ULCONn(ULCON0, R/W, Address = 0xEC00_0000)ULCONn的含义如表1所示。
表1 ULCONn的含义
2.UART行控制寄存器UCONn(UCON0,R/W Address = 0xEC00_0004)
寄存器详细说明如表2所示。
表2 UCONn
续表
3.UART FIFO 控制寄存器UFCONn(UFCON0,R/W,ADDRESS = 0xEC00_0008)
寄存器详细说明如表3所示。
表3 UFCONn的含义
4.UART MODEM控制寄存器UMCONn(UMCON0,R/W,ADDRESS = 0xEC00_000C)
寄存器详细说明如表4所示。
表4 UMCONn的含义
5.发送寄存器UTXHn和接收寄存器URXHn
这两个寄存器存放着发送和接收的数据,在关闭FIFO的情况下只有一个字节8位数据。需要注意的是,在发生溢出错误时,接收的数据必须被读出来,否则会引发下次溢出错误。
6.比特率分频寄存器UBRDIVn用于串口比特率的设置。S5PC100引入了UDIVSLOTn,使得波特率的设置比早期处理器更加精确。下面以设置波特率为115200为目标,介绍设置方法。
DIV_VAL = (PCLK / (bps*16 ) ) -1
=66.75M/115200*16 - 1 //PCLK由系统时钟提供,此为设定66.75M
=35.214
UBRDIVn = 35(DIV_VAL的整数部分)。
(UDIVSLOTn中1的数量)/16 = 0.2。
(UDIVSLOTn中1的数量) = 3。
根据手册中的建议3 0x0888(0000_1000_1000_1000b)11 0xDDD5(1101_1101_1101_0101b)选择“UDIVSLOTn = 0x0888; ”。
7.串口状态寄存器UTRSTATn(UTRSTAT0,R,ADDRESS = 0xEC00_0010)寄存器详细说明如表5所示。
表5 UTRSTATn的含义
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)