您的位置 首页 汽车

ARM7串口编程关键

一.串口编程的硬件原理1串口特性:1>16字节接收FIFO和16字节发送FIFO2>接收FIFO触发点可设置为1,4,8或14字节。3>内置波特率发生器

一. 串口编程的硬件原理
1. 串口特性:
1>16字节接纳FIFO和16字节发送FIFO
2>接纳FIFO触发点可设置为1,4,8或14字节。
3>内置波特率发生器。
2. UART0引脚:
1>RxD0 引脚用于UART0承受数据,承受办法为串行输入。
2>TxD0引脚用于UART0发送数据,发送办法为串行发送数据。
3. UART0的结构和作业办法
先看图在阐明:

1> VPB总线供给CPU与UART0之间得的通讯衔接
(CPU内核经过VPB接口对UART0的寄存器进行读写拜访.)
2> UART0 接纳器模块监督串行输入线RxD0的有用输入。UART0 接纳单元的移位寄存器(U0RSR)经过RxD0接纳有用的字符。当U0RSR承受到一个有用字符时,它将该字符传送到UART0 接纳单元缓冲寄存器FIFO中,等候CPU经过VPB接口进行拜访。
3> UART0发送器模块接纳CPU或主机写入的数据并将数据缓存到UART0 的FIFO或U0THR中,UART0发送模块中的移位寄存器(U0TSR)读取U0THR或FIFO中的数据并将数据经过串行输出到引脚TxD0发送。
4> UART0的接纳模块和发送模块的状况信息保存在U0LSR中。
操控信息保存在U0LCR中。
5> UART0波特率发送器模块发生UART0 发送模块所运用的守时。波特率发生器模块时钟源为VPB时钟(pclk)。主时钟与U0DLL和U0DLM寄存器所界说的除数相除得到UART0 发送器模块运用的时钟,该时钟有必要为波特率的16倍。
6> 中止接口包括寄存器U0IER和U0IIR。中止接口接纳UART0发送模块和接纳模块宣布的单时钟宽度的使能信号。
4. UART0和ARM7 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位: 表明中止位挑选
0:1个中止位
1:2个中止位
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 效果:U0DLL和U0DLM寄存器一同构成一个16位除数。
l U0DLL和U0DLM都为8位寄存器。
l U0DLL:寄存分频值的低8位
l U0DLM:寄存分频值的高8位。
注:
Ø 1.运用U0DLL和U0DLM装备波特率之前,有必要先核算分频值。
Fdiv=Fpclk/(16*baud)
Ø 2.运用U0DLL和U0DLM装备波特率之前有必要把U0LCR操控寄存器的第8方位为1才干进行装备。装备完后要把U0LCR操控寄存器的第8方位位0。
2> 串口初始化化程序
A办法一:

void UART0_Init(uint32 bps)
{

uint16 Fdiv;
PINSEL0=0x00000005; //设置串口引脚
U0LCR=0x83;     //置为除数锁存位,进行装备
Fdiv=(Fpclk>>4)/UART0_BPS;
U0DLM=Fdiv>>8;
U0DLL=Fdiv&0xff;
U0LCR=0x03; //铲除除数锁存位,并设置作业形式
}
B.办法二:


typedef struct UartMode
{ uint8 datab; // 字长度,5/6/7/8
uint8 stopb; // 中止位,1/2
uint8 parity; // 奇偶校验位,0为无校验,1奇数校验,2为偶数校验
} UARTMODE;
uint8 UART0_Init(uint32 baud, UARTMODE set)
{ uint32 bak;


if( (0==baud)||(baud>115200) )
{
return(0);
}
if( (set.datab<5)||(set.datab>8) )
{
return(0);
}
if( (0==set.stopb)||(set.stopb>2) )
{
return(0);
}
if( set.parity>4 )
{
return(0);
}

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/qiche/260485.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部