回顾:
电路原理图, 控制LED实则就是控制CPU上的管脚
cpu datasheet,(CPU使用说明书)
GPIOCALTFN0
GPIOCOUTENB
GPIOCOUT
特殊功能寄存器是软件控制硬件的媒介
就向汽车这个商品中提供驾驶员操作汽车的媒介:方向盘 。。。
编辑代码
vi
编译代码
gcc ----> 编译结果只能运行在X86
交叉编译工具 arm-linux-gcc ----> 编译结果只能运行arm
编译
链接
由ELF ---> BIN
file du objcopy readelf objdump
运行代码
tftp
go
volatile的作用?以及使用场合?
防止编译器的过度优化
1)访问特殊功能寄存器
2)中断程序和进程共享的变量
3)多线程共享的变量
---------------------------------------------------------------
uart驱动程序
1、uart的基本概念
uart,串行异步收发器
异步通信和同步通信的区别?
单工
半双工
全双工
串行接口标准 电子工业协会制定的
RS232
电气特性
逻辑0, 3v~15v
逻辑1, -3v~-15v
计算机内部使用的 TTL电平
逻辑0, 低电平 <0.8v
逻辑1 高电平 >2.4v
机械特性,数据的传输距离<10m
RS485
传输距离可以超过1000m
串行通信时的重要参数
导线空闲状态处于高电平
发送时从低bit开始
如果遇到面试 画图解决
数据位个数:5~8bit
校验方式:奇校验 /偶校验 / 无校验
停止位: 1~2bit
波特率: bps(bit per second)
2、电路原理图
PC_RXD1 ----> UARTRXD0----->GPIOD14
PC_TXD1 GPIOD18
运行在arm核中的程序可以像操作LED一样
直接控制管脚上的电平状态达到发送数据的目的
实际开发过程中,cpu都集成uart控制器
运行arm核中的程序 去操作uart控制器
由uart控制器再去操作对应管脚形成需要的通信时序
从而简化软件编程
uart控制器能做哪些工作
还需要软件完成哪些工作
以及软硬件如何协调工作?
答案要去cpu datasheet找
3、datasheet
P71
GPIOD14, 可选功能1
GPIOD18, 可选功能1
P759
GPIODALTFN0 0xc001d020
[29:28] 01
GPIODALTFN1 0xc001d024
[5:4] 01
P960
S5P6818内部集成了6个独立的uart控制器
问题:COM1对应了CPU内部的哪个uart控制器?
以COM1连接到管脚GPIOD14 GPIOD18为线索
com1对应的时uart0控制器
CPU感知硬件状态变化的方式:
1)中断
2)轮询
3)DMA directly memory access
希望: 8N1 115200 polling non-fifo
ULCON0 0xc00a1000
[1:0] 11, 8bit数据位
[2] 0, 1bit stop
[5:3] 000, 无校验
[6] 0, 正常模式
UCON0 0xc00a1004
[1:0] 01, 轮询接收模式
[3:2] 01, 轮询发送模式
[5] 0, 正常操作
UTRSTAT0 0xc00a1010
[0] 0/1, 接收缓冲区空/非空
[1] 0/1, 发送缓冲区非空/空
[2] =1, 发送缓冲区为空 && 移位寄存器为空
UTXH0 0xc00a1020
[7:0]
URXH0 0xc00a1024
[7:0]
UARTCLKENB0 0xc00a9000
[2] 1/0 使能/禁止给uart0的时钟信号
UART0CLKGEN0L 0xc00a9004
[4:2] 1, 选择PLL1作为时钟源
PLL1=800MHz
[12:5] 15, 800M/(15+1) = 50MHz
第二次分频的分频系数
UBRDIV0
26
UFRACVAL0
2
50000000/(115200*16) - 1
=27.13 - 1
=26.13
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
练习: 对着代码重新阅读电路原理图 datasheet