UART0串口编程系列(一)

串口编程(UART0)

---------------------------------------------------------

Author             :tiger-john
WebSite            :blog.csdn.net/tigerjb

Email               [email protected]

Update-Time   : 2011123日星期日

Tiger声明:本人鄙视直接复制本人文章而不加出处的个人或团体,但不排斥别人转载tiger-john的文章,只是请您注明出处并和本人联系或留言给我3Q

---------------------------------------------------------

本文章针对的是ARM2200环境下编写串口程序,其中设计轮循方式,中断方式,以及在UC/OS-II操作系统下的串口编程。

使用轮循和中断两种方式来实现串口编程。

(当然了,用中断实现串口编程,系统的效率较高。但是难度也较大 。轮循方式效率较低,但是编程比较简单)

一.        串口编程的硬件原理

1.     串口特性:

1>16字节接收FIFO16字节发送FIFO

2>接收FIFO触发点可设置为14814字节。

3>内置波特率发生器。

2.     UART0引脚:
1>RxD0
引脚用于UART0接受数据,接受方式为串行输入。

2>TxD0引脚用于UART0发送数据,发送方式为串行发送数据。

3.     UART0的结构和工作方式

先看图在说明:

 

1>  VPB总线提供CPUUART0之间得的通信连接

(CPU内核通过VPB接口对UART0的寄存器进行读写访问.)

2>  UART0 接收器模块监视串行输入线RxD0的有效输入。UART0 接收单元的移位寄存器(U0RSR)通过RxD0接收有效的字符。当U0RSR接受到一个有效字符时,它将该字符传送到UART0 接收单元缓冲寄存器FIFO中,等待CPU通过VPB接口进行访问。

3>  UART0发送器模块接收CPU或主机写入的数据并将数据缓存到UART0 FIFOU0THR中,UART0发送模块中的移位寄存器(U0TSR)读取U0THRFIFO中的数据并将数据通过串行输出到引脚TxD0发送。

4>  UART0的接收模块和发送模块的状态信息保存在U0LSR中。

控制信息保存在U0LCR中。

5>  UART0波特率发送器模块产生UART0 发送模块所使用的定时。波特率发生器模块时钟源为VPB时钟(pclk)。主时钟与U0DLLU0DLM寄存器所定义的除数相除得到UART0 发送器模块使用的时钟,该时钟必须为波特率的16倍。

6>  中断接口包含寄存器U0IERU0IIR。中断接口接收UART0发送模块和接收模块发出的单时钟宽度的使能信号。

4.     UART0ARM7 CPU之间的通信过程

1>CPU通过UART0发送模块发送信息给外设

l  CPU发出信息通过AHB总线到AHB-VPB

l  通过AHB-VPB桥把信息转换后发送给VPB总线。

l  UART0接收模块接受来自VPB总线的数据。并将数据缓存到U0THR寄存器中。

l  UART0接受模块的移位寄存器U0TSR读取U0THR中的数据 并将数据通过输出引脚TxD0发送

2>外设通过UART0接收模块向ARM7 CPU发送信息

l  UART0移位寄存器(U0RSR)通过引脚RxD0接收有效字符。

l  UART0接收到一个有效字符后,通过读取U0RBR寄存器可以将FIFO中最早接收到的字节读出,当FIFO中不再包含有效数据时,该寄存器反映接收到的最后一个有效字节数据。接收的数据不足8位时,高位用0填充。

l  VPB总线将缓冲寄存器(U0RBR)中的数据通过AHB-VPB桥传到AHB总线上

l  AHB总线将数据传送给ARM7 CPU

二.          轮训方式的串口编程

1.     串口程序都有那几部分组成

看图:       

1>  串口初速化

A.    串口初始化的流程

l  设置I/O引脚连接到UART0

l  设置串口波特率

l  设置串口工作模式

B.     串口初始化需要设置的寄存器

l  U0LCR(控制寄存器):设置UART0的通信格式。

l  U0DLL,U0DLM(寄存器):设置UART0的通信波特率。

C.     具体寄存器的设置

(1) U0LCR(线控制寄存器)

l  作用:设置通信格式(通信字符长度,停止位个数,奇偶校验位

l  长度:8位寄存器

l  各位寄存器的含义:

[1 ,0]: 表示字长

00:表示5位字长

01:表示6位字符长度

10:表示7位字符长度

11:表示8位字符长度

2: 表示停止位选择

         01个停止位

 12个停止位

3位:表示奇偶使能

0:禁止奇偶产生和校验

1:使能奇偶产生和校验

注:奇偶使能:控制是否进行奇偶校验。如果使能,发送时将添加一位校验位。

[5 4]位:表示奇偶选择位

       00:奇数(数据位+校验位=奇数)

       01:偶数(数据位+校验位=偶数)

       10:校验位强制为1

       11:校验位强制为0

注:奇偶选择主要是设置奇偶校验类型。

   6位:间隔控制

                  0:禁止间隔发送

                  1:使能间隔发送

注:当该位为1时,输出引脚(TxD0)强制为逻辑0,可以引起通信对方产生间隔中断。在一些通信方式中,使用间隔中断作为通信的起始信号(eg:LIN Bus)      

   7位:除数锁存访问位

        0:禁止访问除数锁存寄存器

        1:始能访问除数锁存寄存器

(2) U0DLL,U0DLM(除数锁存寄存器)

l  作用:U0DLLU0DLM寄存器一起构成一个16位除数。

l  U0DLLU0DLM都为8位寄存器。

l  U0DLL:存放分频值的低8

l  U0DLM:存放分频值的高8位。

注:

你可能感兴趣的:(数据结构,编程,工作,buffer,dll)