天天看点

ARM_s5pv210_arm_3

ARM_s5pv210_arm_3

串口

UART

通用串行异步收发器

串行通信:利用一条数据线将数据一位移位的顺序传送,特点通信线路简单,成本低,使用长距离传送。

并行通信:利用多条数据线将数据的各位同时传送,特点是传输速度快,适用短距离传送。

异步:在一个字符的传输时间范围内保持同步即可。

同步:在数据传输过程中,需要一根时钟线同步,IIC总线,SPI总线。

数据的收发器

发送方 接收方

串口通信协议:

起始位:数据开始传输的标志,逻辑 0

数据位:主要传输的有效数据,5-8bit(5,6,7,8),表示一个字符

奇偶校验位:在数据位后面加上一位表示校验位

(1)奇校验:加上校验位后保证1的个数为奇数

(2)偶校验:加上校验位后保证1的个数为偶数

发送方(奇校验) 接收方(采用奇校验校验)

11100011 0 111000110算校验位等于0 正确

110000110算校验位等于1 错误

110000010算校验位等于0 ?(相等) 错误

如果接受方按照双方约定校验方式计算出的校验位如果与接收到的校验位相比较,若相等,接受正确(不一定)

若不相等,肯定接受错误

奇偶校验,只能校验出1bit发生错误

停止位:表示一个字符数据结束的标志,可以是1bit或者是2bit

空闲位:处于逻辑1,表示当前线路无数据传送。

串口通信协议:

8o1

起始位:0

数据位:8

奇偶校验位:奇校验

停止位:1bit

空闲位:

95H 10010101

ARM_s5pv210_arm_3

串口通信采用全双工通信,同一时刻,既可以接收数据,也可以发送数据,由两根线完成。

接线方式:

ARM_s5pv210_arm_3

2:RXD——接收管脚

3:TXD——发送管脚

5:接地(用作参考电平)

ARM_s5pv210_arm_3

电平转换:

EIA电平(COM):

逻辑1:-3v~-15v

逻辑0:+3v~+15v

TTL电平(T—PAD):

逻辑1:+2v~+5v

逻辑0:0v~0.8v

发送TTL转EIA

接收EIA转TTL

波特率:非常重要的参数,表示数据传输的速率。表示每秒钟传输的二进制位的个数。

此处开发板使用GPA0_0接收,GPA0_1发送

s5pv210处理器中对串口收发器:

1.s5pv210 处理器提供了4个独立的通用串行异步收发器(UART)

2.数据传输使用轮询方式,中断和DMA方式。

3.采用系统时钟最大的传输速率3Mbps,最常用的是115.2Kbps(115200波特率)

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.支持奇偶校验。

ARM_s5pv210_arm_3

1.发送器

uart0,ch0(开发板上的com1)

(1)TXD0:发送管脚,复用GPIO管脚中的GPA0_1

(2)发送缓冲寄存器:用于存放需要发送的数据

大小:非FIFO模式:1个字节。

FIFO模式:256个字节(每个UART不同)

(3)发送移位器:发送缓冲寄存器中的数据并不是直接传送到输出管脚TXD0上,还必须发送到发送移位寄存器中(Trensmit shifter),然后再由发送移位器通过移位操作,将数据一位一位的发送到TXD0管脚上。

2.接收器

uart0,ch0

(1)RXD0;发送管脚,复用GPIO管脚中的GPA0_0

(2)接收缓冲寄存器:用于存放需要发送的数据

大小:非FIFO模式:1个字节。

FIFO模式:256个字节

(3)接收移位器:接收缓冲寄存器中的数据并不是直接放到接收缓冲寄存器中,而是先一位一位的存放到接收移位器中,当接收满一个字节后再发送到接受缓冲器中。

3.波特率产生器:

发送移位器和接收移位器对数据的发送和接收都是按照波特率产生器产生的波特率的速度进行数据发送和接收的。

ARM_s5pv210_arm_3

时钟源:

内部系统时钟源:PCLK

外部系统时钟源:SCLK_UART

ARM_s5pv210_arm_3

如果要使水平s5pv210处理器中uart0工作,实际上就是操作对应寄存器(SFRS)

寄存器(SFRS):

UARTn->comx

ULCONn 设置数据格式寄存器

UCONn 串口控制寄存器

UTXHn 发送缓冲寄存器

URXHn 接收缓冲寄存器

UTRSTATn 状态寄存器

UFCONn

UMCONn

UBRDIVn 设置波特率寄存器1

UDIVSLOTn 设置波特率寄存器2

串口协议:

起始位:

数据位:

奇偶校验位:

停止位:

空闲位:

ULCON0寄存器=3 OxE2900000

ARM_s5pv210_arm_3

UCON0 控制寄存器 = 5 0xE2900004

bit[5:0]

ARM_s5pv210_arm_3
ARM_s5pv210_arm_3

bit[10]

ARM_s5pv210_arm_3
ARM_s5pv210_arm_3

1.数据接收模式(轮询)

2.数据发送模式(轮询)

3.是否发送暂停位

4.回环模式(正常)

5.时钟源选择(PCLK=66.6MHZ)

UTXH0 0xE290_0020

ARM_s5pv210_arm_3

URXH0 0xE290_0024

ARM_s5pv210_arm_3
ARM_s5pv210_arm_3

数据发送和接收都是采用轮询方式

UTRSTAT0

ARM_s5pv210_arm_3

Receive buffer data ready:

bit[0]:

bit[0]=0,说明接受缓冲寄存器URXH0中还没有收到数据

bit[0]=1,说明就收缓冲寄存器URXH0中已经有有效数据

如果要读取接收缓冲寄存器URXH0时,应该判断状态寄存器UTRSTAT0的bit的bit[0],只有bit[0]为1时,才能读取URXH0寄存器,否则,等待。

Transmit buffer 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时,才能操作。

波特率:

波特率计算:

ARM_s5pv210_arm_3
ARM_s5pv210_arm_3

PCLK = 66.5MHZ

bps=115200

DIV_VAL = (66500000/(115200*16))-1=35.07855902777777777

DIV_VAL = UBRDIVn + (num of 1’s in UDIVSLOTn)/16

得到:

UBRDIV0=35

(num of 1’s in UDIVSLOTn)/16 = 0.07855902777777777

(num of 1’s in UDIVSLOTn) = 1.256944444444444444444444

对该数取整(舍去小数部分),即UDIVSLOT0寄存器的值的1的个数为1,查表

ARM_s5pv210_arm_3

(上表写错了,0x0080应该是0000_0000_1000_0000b)

得到UDIVSLOT0 = 0x0080;

ULCON0 = 3 设置数据格式寄存器

UCON0 = 5 串口控制寄存器

UTXH0 发送缓冲寄存器

URXH0 接收缓冲寄存器

UTRSTAT0 状态寄存器

UFCON0

UMCON0

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