操作CPU内部寄存器
CPU (0-4G) SFRS(特殊功能寄存器)
遵循CPU的datasheet
1.控制寄存器GP*CON
2.禁止CPU上下拉电阻,寄存器GP*PUD
3.操作数据寄存器GP*DAT
位操作:只改变需要操作的GPIO管脚对应的bit,不改变其他bit
串口
UART
通用串行异步收发器
95H 10010101
串行通信:利用一条数据线将数据一位移位的顺序传送,特点通信线路简单,成本低,适用长距离传送
并行通信:利用多条数据线将数据的各位同时传送,特点是传输速度快,适用短距离传送
异步:在一个字符的传输时间范围内保持同步即可
同步:在数据传输过程中,需要一根时钟线同步,IIC总线,SPI总线
数据的收发器
发送方 接收方
串口通信协议:
起始位:数据开始传输的标志,逻辑0
数据位:需要传输的有效数据,5-8bit(5,6,7,8),表示一个字符
奇偶校验位:在数据位后面加上一位表示校验位
(1)奇校验:加上校验位后保证1的个数为奇数
(2)偶校验:加上校验位后保证1的个数为偶数
发送方(奇校验) 接收方(采用奇校验校验)
111000110 111000110
算校验位:0(相等,正确)
101000110
算校验位:1(不等,肯定错)
101000010(发生两bit翻转)
算校验位:0(相等,错误)
如果接收方按照双方约定校验方式计算出的校验位如果与接收到的校验位相比较,若相等,接收正确(?)
若不等,肯定接收错误
奇偶校验,只能校验出1bit发生错误
停止位:表示一个字符数据结束的标志,可以是1bit或者是2bit,逻辑1
空闲位:处于逻辑1,表示当前线路无数据传送
波特率:非常重要的参数,表示数据传输的速率。表示每秒钟传输的二进制位的个数。
串口通信采用全双工通信,同一时刻,既可以接收数据,也可以发送数据,由两根线完成。
接线方式:
2:RXD:接收管脚
3:TXD:发送管脚
5:接地
电平转换:
EIA电平(COM):
逻辑1:-3V~-15V
逻辑0:+3V~+15V
TTL电平(TPAD):
逻辑1:+2V~+5V
逻辑0:+0V~+0.8V
接收:EIA->TTL
发送:TTL->EIA
通过原理图可知:
1.发送管脚使用GPA0_1
2.接收管脚使用GPA0_0
s5pv210处理器中对串口收发器:
1.s5pv210处理器提供了4个独立的通用串行异步收发器(UART)
2.数据传输可是使用轮询方式,中断和DMA方式
3.采用系统时钟最大的传输速率3Mbps,最常用115.2Kbps
4.每个UART有两个FIFO(接收FIFO和发送FIFO)
ch0(256bytes)
ch1(64bytes)
ch2,ch3(16bytes)
5.ch0,ch1,ch2支持自动流控
6.ch0,ch1,ch2,ch3支持红外发送接收
7.停止位:1个或者2个
8.支持数据位5位,6位,7位,8位的有效数据宽度
9.支持奇偶校验
1.发送器
uart0,ch0(底板上标识是com1)
(1)TXD0:发送管脚,复用GPIO管脚中的GPA0_1
(2)发送缓冲寄存器:用于存放需要发送的数据
大小:非FIFO模式:1个字节
FIFO模式:256个字节(每个UART不一样)
(3)发送移位器:发送缓冲寄存器中的数据并不是直接传送到输出管脚TXD0上,还必须发送到发送移位器中(Transmit shifter),然后再由发送移位器通过移位操作,将数据一位一位的发送到TXD0管脚上。
2.接收器
(1)RXD0:接收管脚,复用GPIO的GPA0_0管脚
(2)接收缓冲寄存器:用于存放接收来对数据
大小:非FIFO模式:1个字节
FIFO模式:256个字节(每个UART不一样)
(3)接收移位器:从接收管脚RXD0上接收来的数据不是直接放到接收缓冲寄存器中,而是先一位一位的放到接收移位器,当收满一个字节之后,再放到接收缓冲寄存器。
3.波特率产生器:
发送移位器和接收移位器对数据的发送和接收都是按照波特率产生器产生的波特率的速度进行数据发送和接收的。
时钟源:
内部系统时钟源:PCLK
外部时钟:SCLK_UART
如果要使s5pv210处理器中UART0工作,实际上就是操作对应寄存器(SFRS)。
ULCONn 设置数据格式寄存器
UCONn 串口控制寄存器
UTXHn 发送缓冲寄存器
URXHn 接收缓冲寄存器
UTRSTATn 状态寄存器
UFCONn
UMCONn
UBRDIVn 设置波特率寄存器1
UDIVSLOTn 设置波特率寄存器2
UART0->com1
ULCON0 设置数据格式寄存器
UCON0 串口控制寄存器
UTXH0 发送缓冲寄存器
URXH0 接收缓冲寄存器
UTRSTAT0 状态寄存器
UFCON0
UMCON0
UBRDIV0 设置波特率寄存器1
UDIVSLOT0
串口协议:
起始位:
数据位:
奇偶校验位:
停止位:
空闲位:
ULCON0寄存器 0xE290_0000 =3
UCON0 控制器寄存器 0xE290_0004 =5
bit[5:0]
bit[10]
1.数据接收模式(轮询)
2.数据发送模式(轮询)
3.是否发送暂停位(正常)
4.回环模式(正常)
5.时钟源选择(PCLK=66.6MHZ)
UTXH0
URXH0接收缓冲寄存器
数据发送和接收都是采用轮询方式
UTRSTATn
Receivebuffer data ready:
bit[0]:
bit[0]=0,说明接收缓冲寄存器URXH0中还没有收到数据
bit[0]=1,说明接收缓冲寄存器URXH0中已经有有效数据
如果要读取接收缓冲寄存器URXH0时,什么读,应该判断状态寄存器UTRSTAT0的bit[0],只有bit[0]为1时,才能读取URXH0寄存器,否则,等待。
Transmitbuffer empty:
bit[1]:
bit[1]=0,不能向发送缓冲寄存器UTXH0写数据
bit[1]=1,可以向发送缓冲寄存器UTXH0写数据
如果要发送数据,首先判断状态寄存器UTRSTAT0的bit[1],只有bit[1]=1时,才能向发送缓冲寄存器UTXH0写数据,否则,等待。
数据收发模式:轮询方式,轮询状态寄存器UTRSTAT0的bit[1:0]
发送bit[1]=1,才能写UTXH0
接收bit[0]=1,才能读URXH0
都是在该bit为1时,才能操作。
波特率:
PCLK=66.5MHZ=66500000HZ
bps=115200
DIV_VAL=(66500000/(115200X 16)) – 1
=35.078559027777777777777777777778
DIV_VAL =UBRDIVn + (num of 1's in UDIVSLOTn)/16
得到:
UBRDIV0=35
(num of 1'sin UDIVSLOTn)/16 = 0.078559027777777777777777777778
(num of 1'sin UDIVSLOTn)= 1.2569444444444444444444444444444
对该数取整(舍去小数部分),即UDIVSLOT0寄存器的值的1的个数为1,查表
得到
UDIVSLOT0=0x0080
ULCON0=3 设置数据格式寄存器
UCON0=5 串口控制寄存器
UTXH0 发送缓冲寄存器
URXH0 接收缓冲寄存器
UTRSTAT0 状态寄存器
UFCON0=0
UMCON0=0
UBRDIV0=35 设置波特率寄存器1 PCLK=66.5MHZ
UDIVSLOT0=0x0080设置波特率寄存器2 bps=115200
数据发送
TPAD发送
PC接收,显示在屏幕
1.配置串口管脚
(1)GPA0_0 GPA0_1进行配置
GPA0CON
GPA0PUD
2.配置串口
ULCON0 = 3
UCON0=5
UFCON0=0
UMCON0=0
UBRDIV0=35
UDIVSLOT0=0x0080
3.发送字符函数
uart0_putc()
tarena#tftp 20008000 uart.bin
tarena#go 20008000
在显示器循环输出uart0 test!!!
uart0_test!!!
uart0_test!!!
uart0_test!!!
uart0_test!!!
uart0_test!!!
uart0_test!!!
uart0_test!!!
uart0_test!!!
TPAD发送端
PC接收端,显示在屏幕
uart0_putc();
uart0_puts();
接收字符
接收字符串
TPAD接收端
PC发送端,通过键盘
回显