OK6410:UART

  串口又叫UART,通过异步实现(没有时钟,有时钟就是同步)
  串口一般为调试位
  串口的其中3条线,其功能是:发送、接收、接地线
  发送的数据是由开始位,数据位,停止位组成。开始停止均为高电平


  PC端先检测发送线是否为低电平,为低电平表示对方要发数据
  等待一段时间,然后开始检测数据,一般检测位的中间


  每一位占据多长时间:波特率(一秒钟之内要传输多少位),为115200
  开始位、数据位、停止位各占多少: 校验位为空,开始位没有设置,默认为1、数据位:8、停止位:1




  把数据写到一个缓冲器里面,硬件会自动发送数据
  读也一样。然后通过读寄存器获取数据


  先初始化串口,设置一些串口的参数,如波特率,数据位,停止位...
  GPA设置为串口的输入输出,设置为0010(专门给UART使用的)GPA0接收,GPA1发送


  设置串口0,这设置ULCON0


  红外模式:正常则设置0
  校验位:不使用,设置为000
  停止位: 0为1个
  数据位:8




  ULCON0 = 0x3 8n1 数据位8 无校验n 停止位1


  UCON0设置
  先设置时钟源,使用PCLK
  回环模式:内部接收和发送连在一起,测试用
  设置发送和接收模式


  可以使用Buffer,因为串口比较慢,最好用缓存区

  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因为数据位八位


  下面把代码贴出来:

  

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值