概述
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驱动编程)所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复