照例,首先讲解一个原理。
S5P4418有5个UART可以使用。而nanopi2接出了3个,分别是UART0 3 4.
首先UART使用要配置时钟源,这点在
芯片手册上的5.1节有相关描述。
1. 配置串口时钟使能UARTCLKENB
2. 配置串口时钟产生参数。包括输出使能,分频系数,选择时钟源(PLL),时钟输出反转
然后是配置串口,这点在芯片手册的24节
1. 设置对应GPIO的复用功能,因为UART的RXD和TXD都是几个功能复用的,需要先调整到RXD和TXD功能
2. 设置对应GPIO的输入输出模式。RXD输入,TXD输出
3. 配置波特率。这里波特率的配置方法是用波特率除数,用两个寄存器来存,IBRD存放整数部分,FBRD存放小数部分。波特率除数的计算方法为
Divisor = UARTCLK/(16*baud),即波特率除数=串口时钟/(16*波特率),取整就直接强转int,小数取整的方法为 小数取整=小数部分*64+0.5,其中小数部分=整个数-整数部分。详情见代码
4.配置数据位,校验位,停止位
5.开启UART,收发使能,及禁用FIFO
配置完毕即可向寄存器DR扔数据来完成通信。这里要注意一下
UARTFR的是busy,相当于C51里的TI,当此位为1表示还在发送
相对应的UARTFR的是RI,接收。
代码在GitHub,点这里
结果:
有关代码的详细问题请在下面留言,我会及时回复的