arm_day04

操作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发送端,通过键盘

回显

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值