我是靠谱客的博主 飞快发带,最近开发中收集的这篇文章主要介绍ARM:UART总线使用(day03 uart驱动编程),觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

UART, 串行异步收发器
是接在GPIO管脚上,此管脚可以配置为GPIO功能,也可配置为uart功能
S5P6818内部集成了6个独立的UART控制器

问题:开发板上COM1座对应了CPU内部哪个UART控制器?
    线索是COM1 收发数据线连接到了CPU的哪个管脚上
    根据连接的CPU管脚去推断COM1对应了CPU内部的UART0控制器 

1串行接口的标准

RS232
       电气特性
          EIA电平/RS232电平
          逻辑0: 3~15v
          逻辑1: -3~-15v
       机械特性
          一般传输距离 <10m
          1对1数据传输
RS485  
       电气特性
       		差分信号 
       		超过1000m
       		1对多
       机械特性 

2串行通信协议

通信过程

   空闲状态时导线上默认为高电平
   传输数据时 首先是起始信号(一个周期的低电平)  
   发送数据时从低bit开始
   发送奇偶校验位(如果选择了无校验 那就没有校验位的发送过程了)
   发停止信号(1~2个周期的高电平)

通信协议中可变的参数

   数据位的个数:5~8bit
   校验方式: 奇校验 偶校验 无校验
   停止位的个数: 1 / 2 bit
   波特率: bps (bit per second)    

计算机内部使用的TTL电平

 逻辑0: 低电平 <0.7v
 逻辑1: 高电平 >2.4v

3编程配置

P71 管脚配置

   PC_TXD1----->UARTTXD0------>GPIOD18管脚
   PC_RXD1----->UARTRXD0------>GPIOD14管脚
   GPIOD14管脚 选功能1 (UARTRXD0)
   GPIOD18管脚 选功能1  (UARTTXD0)

   GPIODALTFN0  0XC001D020
       [29:28]  01, 配置GPIOD14为可选功能1
   GPIODALTFN1  0XC001D024
       [5:4]    01, 配置GPIOD18为可选功能1 

CPU感知外接硬件状态变化的方式:
1)轮询
2)中断
3)DMA directly memory access

   根据 8N1 115200 轮询模式  NON-FIFO
   ULCON0  0XC00A1000
      [1:0] 11, 8bit有效数据位
      [2]   0,  1bit停止位
      [5:3] 000, 无校验
      [6]   0, 正常收发模式
   UCON0   0XC00A1004
      [1:0] 01, 轮询方式接收数据
      [3:2] 01, 轮询方式发送数据    
      [5]   0,  正常模式
   UTRSTAT0 0XC00A1010
      [0]   0/1 接收缓冲区中无/有有效数据
      [1]   0/1 发送缓冲区非空/空
   UTXH0 0xc00a1020
      [7:0] 写入要发送的数据
 URXH0 0xc00a1024
    [7:0] 读取要接收的数据         

P314 配置时钟

  UART0CLKGEN0L   0XC00A9004
     [4:2]  001, 选择PLL1作为时钟源 (800MHz)
     [12:5]  15,  分频系数 
                 800MHz/(15+1) = 50MHz    
  UART0CLKENB  0xc00a9000
     [2]  0/1 禁止/使能给到UART0的时钟

   UBRDIV0 0xC00A1028
      26
   UFRACVAL0 0XC00A102C
      2
  以上两个特殊功能寄存器的配置参考 datasheet P969

  50000000/(115200*16)-1
 =27.13 - 1
 =26.13   
 0.13*16=2.08    

编译代码
arm-cortex_a9-linux-gnueabi-gcc -nostdlib -c main.c -o main.o
arm-cortex_a9-linux-gnueabi-gcc -nostdlib -c uart.c -o uart.o
arm-cortex_a9-linux-gnueabi-ld -nostdlib -nostartfiles -Ttext=0x48000000 -emain main.o uart.o -o uart
arm-cortex_a9-linux-gnueabi-objcopy -O binary uart uart.bin
下载运行
cp uart.bin /tftpboot/
在开发板上执行
tftp 48000000 uart.bin
go 48000000

最后

以上就是飞快发带为你收集整理的ARM:UART总线使用(day03 uart驱动编程)的全部内容,希望文章能够帮你解决ARM:UART总线使用(day03 uart驱动编程)所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(71)

评论列表共有 0 条评论

立即
投稿
返回
顶部