嵌入式-ARM(裸板开发)-3-UART驱动开发

      最后更新:2022-02-21 00:41

      一、UART(串行通信)驱动编程

      1.基本概念

      通用异步收发传输器(Universal Asynchronous Receiver/Transmitter),通常称作UART,是一种串行异步收发协议,应用十分广泛。UART工作原理是将数据的二进制位一位一位的进行传输。在UART通讯协议中信号线上的状态位高电平代表’1’低电平代表’0’。当然两个设备使用UART串口通讯时,必须先约定好传输速率和一些数据位。

      2.串行通信按传输方向来定义的传输方式:单工/半双工/全双工

      3.串行接口标准

      RS232

      电气特性 (EIA(RS232)电平)

      逻辑0  +3~+15v

      逻辑1  -3~-15v

      机械特性

      传输距离 <10m

      只能做1对1通信

      RS485:工业现场

      传输时使用差分信号

      传输距离可以超过1000m

      可以做1对多通信

      TTL电平(用于计算机内部)

      逻辑0: 低电平 <0.7v

      逻辑1: 高电平 >2.4v

      4.数据传输协议

      空闲状态为高电平

      发送时首先是一个起始位(一个周期的低电平)

      发送数据时从LSB(最低值的比特位)开始发送

      每帧中数据位的个数5~8bit (变化)

      发送可能存在的1bit奇偶校验位 (变化)

      发送1~2bit的停止位(高电平)(变化)

      波特率: bps(bit per second)(变化)

      具体操作流程:

      1、电路原理图     (为找到UART对应的管脚)

      PC_TXD1 <------ UARTTXD0<------GPIOD18

      PC_RXD1 <------ UARTRXD0<------GPIOD14

      运行在ARM中的程序,控制UART控制器,再由UART控制器去控制收发数据的管脚,形成UART通信相关的时序,从而简化uart驱动编程

      2、cpu datasheet关于 uart 相关内容

      GPIOD18, 功能1

      GPIOD14, 功能1

      以上数据均由查找手册后得知,如下:

      GPIODALTFN0 0XC001D020

      [29:28]   01, 将GPIOD14管脚设置为功能1

      GPIODALTFN1 0XC001D024

      [5:4]     01, 将GPIOD18管脚配置为功能1

      以上数据均由查找手册后得知,如下:

      S5P6818 提供 6 个独立的通用异步收发器( UART),(即会拥有6个独立的UART控制器)每个 UART 能运行于中断或 DMA 模式,即 UART 可以发出中断或 DMA 请求以便在 CPU 和 UART 间传输数据。可支持高达4Mbps 的传输速率。

      CPU感知外接硬件状态变化的方式:

      1)中断

      2)轮询

      3)DMA  (directly memory access直接存储器访问)

      根据管脚的使用情况,底板上的 COM 座对应的是 UART0

      配置:8n1 115200 non-fifo polling

      ULCON0 0xc00a1000

      [1:0]  11, 8bit数据宽

      [2]    0,  1bit停止位

      [5:3]  000, 无校验

      [6]    0,  正常模式

      UCON0  0xc00a1004

      [1:0] 01, 接收数据时采用轮询模式接收

      [3:2] 01, 发送数据时采用轮询模式发送

      [4]=0 , 正常发送数据

      [5]   0,  正常模式

      UTRSTAT0 0XC00A1010

      [0]   0/1  接收缓冲区空/非空

      [1]   0/1  发送缓存区非空/空

      UTXH0    0xc00a1020

      [7:0] 将要发送的字节数据写入其中

      URXH0    0xc00a1024

      [7:0] 读取接收到的数据

      获取 UART 输入的时钟源信息:

      UART0CLKENB  0XC00A9000

      [2]  0/1 禁止/使能时钟

      UART0CLKGEN0L 0XC00A9004

      [4:2] 001, 选择PLL1作为UART的时钟源      PLL1=800MHz

      [12:5] 时钟分频系数   取值为15    分频后 800M/(15+1) = 50MHz

      配置串口波特率:(有公式,直接套)

      波特率分频寄存器UBRDIV,UFRACVAL:

      UBRDIV0  0XC00A1028

      26

      UFRACVAL0 0XC00A102C

      2   //0.13*16

      配置串口波特率公式::

      3、编码

      main.c

      uart.h

      uart.c

      4、交叉编译

      arm-cortex_a9-linux-gnueabi-gcc -c -nostdlib main.c -o main.o

      arm-cortex_a9-linux-gnueabi-gcc -c -nostdlib 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

      5、下载运行

      cp uart.bin /tftpboot/

      在开发板上执行

      tftp 48000000 uart.bin

      go 48000000

      本文由 在线网速测试 整理编辑,转载请注明出处。

          热门文章

          文章分类