本文主要是介绍OK6410:UART,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
串口又叫UART,通过异步实现(没有时钟,有时钟就是同步)串口一般为调试位
串口的其中3条线,其功能是:发送、接收、接地线
发送的数据是由开始位,数据位,停止位组成。开始停止均为高电平
PC端先检测发送线是否为低电平,为低电平表示对方要发数据
等待一段时间,然后开始检测数据,一般检测位的中间
每一位占据多长时间:波特率(一秒钟之内要传输多少位),为115200
开始位、数据位、停止位各占多少: 校验位为空,开始位没有设置,默认为1、数据位:8、停止位:1
把数据写到一个缓冲器里面,硬件会自动发送数据
读也一样。然后通过读寄存器获取数据
先初始化串口,设置一些串口的参数,如波特率,数据位,停止位...
GPA设置为串口的输入输出,设置为0010(专门给UART使用的)GPA0接收,GPA1发送
设置串口0,这设置ULCON0
红外模式:正常则设置0
校验位:不使用,设置为000
停止位: 0为1个
数据位:8
先设置时钟源,使用PCLK
回环模式:内部接收和发送连在一起,测试用
设置发送和接收模式
UFCON0最后一位使能,则使用
UMCON0流量控制,先设置为0
串口波特率配置寄存器UBRDIV0
PCLK = 66.5MHz
b = 115200
UBRDIVO的计算公式:
Div_val = 66.5 * 10^6 / 115200 /16 - 1 = 35.08 = UBRDIVO + VDIVSLOTO的1个数 / 16 = 35 + 0.8得1的个数为1
读取UFSTAT0最后三位while(UFSTATO & 0x7f == 0);
如果RX FIFO为空,等待
6位为1则缓存器满,有数据则读取URXH0,即返回
写数据函数
读取while(UFSTATO & (1 << 14)); 如果TX FIFO满,等待
把数据送到UTXHO
注意URXHO、UTXHO为unsigned char因为数据位八位
下面把代码贴出来:
这篇关于OK6410:UART的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!