概述
目录
- 一、 串口通信基础知识
- 1、数据的传输方式
- 2、数据的通信方式
- 3、串行通信接口
- 4、奇偶校验
- 二、AW60串行通信
- 1、串行通信接口概述
- 2、八大寄存器
- (1)波特率寄存器
- (2)数据寄存器(SCIxD)
- (3)控制寄存器
- (4)状态寄存器
- 3、寄存器初始化
- 4、编程实例
一、 串口通信基础知识
设备之间的通信方式可以分成并行通信和串行通信两种。它们的区别是:
并行通信 | 串行通信 | |
---|---|---|
传输原理 | 数据每个位都同时传输 | 数据按位顺序一位一位传输 |
优点 | 速度快 | 占用引脚资源少 |
缺点 | 占用引脚资源多 | 速度相对较慢 |
1、数据的传输方式
- 单工:数据传输是单向的,一端为发送端,另一端为接收端,如(a)图。
- 半双工:允许数据在两个方向上传输。但是,在任何时刻,只允许数据在一个方向上传输,不能同时收发;它实际上是一种切换方向的单工通信;它不需要独立的接收端和发送端,两者可以合并一起使用一个端口,如(b)图。
- 全双工:允许数据同时在两个方向上传输。因此,全双工通信是两个单工通信方式的结合,需要独立的接收端和发送端,如(c)图。
2、数据的通信方式
- 同步通信:带时钟同步信号传输。例如:SPI,IIC通信接口。
- 异步通信:不带时钟同步信号。例如:UART(通用异步收发器),单总线。
(1)在同步通讯中,收发设备上方会使用一根信号线传输信号,在时钟信号的驱动下双方进行协调,同步数据。例如,通讯中通常双方会统一规定在时钟信号的上升沿或者下降沿对数据线进行采样。
(2)在异步通讯中不使用时钟信号进行数据同步,它们直接在数据信号中穿插一些用于同步的信号位,或者将数据进行打包,以数据帧的格式传输数据。通讯中还需要双方规约好数据的传输速率(也就是波特率—每秒内传送的位数)等,以便更好地同步。常用的波特率有600、900、1200、1800、2400、4800、9600、115200等。
(3)在同步通讯中,数据信号所传输的内容绝大部分是有效数据,而异步通讯中会则会包含数据帧的各种标识符,所以同步通讯效率高,但是同步通讯双方的时钟允许误差小,稍稍时钟出错就可能导致数据错乱,异步通讯双方的时钟允许误差较大。
3、串行通信接口
通信标准 | 引脚说明 | 通信方式 | 通信方向 |
---|---|---|---|
UART(通用异步收发器) | TXD:发送端; RXT:接收端 ;GND:接地 | 异步通信 | 全双工 |
SPI | SCK:同步时钟;MISO:主机输入,从机输出;MOSI:主机输出,从机输入 | 同步通信 | 全双工 |
I2C | SCK:同步时钟;SDA:数据输入/输出端 | 同步通信 | 半双工 |
4、奇偶校验
- 字符奇偶校验检查(垂直冗余检查):它是为每个字符增加一个额外位,使字符中“1”的个数为奇数或偶数。
(1)奇校验:如果字符数据位中“1”的数目是偶数,校验位应为“1”,如果“1”的数目是奇数,校验位应为“0”。
(2)偶校验:如果字符数据位中“1”的数目是偶数,则校验位应为“0”,如果是奇数则为“1”。
二、AW60串行通信
1、串行通信接口概述
- MC9S08AW60系列包含两个独立的串行通信接口(SCI)模块,分别和PTE0(TxD1)、PTE1(RxD1);PTC3(TxD2)、PTC5(RxD2) 管脚复用。
- 每个SCI模块特性
(1)具有的独立的可编程波特率生成器
(2)支持低于115.2kbaud的多种标准波特率
(3)采用双缓冲结构
(4)接收器和发送器还具有硬件奇偶校验、接收唤醒和双缓冲。
(5)可编程的8位或9位字符长度。可选的13位暂停符。支持多种中断驱动或轮询操作
(6)SCI还具有多种工作模式:回路模式、单线模式、正常2线全双工模式
2、八大寄存器
(1)波特率寄存器
-
AW60的SCI模块内部含有波特率发生器,它将总线频率进行分频,以产生串行通信需要的波特率。分频因子由16位SCI波特率寄存器的(第12~0位)[SCR12:SBR0] 决定。而16位SCI波特率寄存器由两个8位寄存器SCIxBDH、SCIxBDL组成。
-
SCIxBDH:16位SCI波特率寄存器的高八位,也就是第8~15位;故SCIxBDH的第0 ~ 4位对应于[SCR8:SBR12],第5 ~ 7位未定义,一般取为0。
-
SCIxBDL:16位SCI波特率寄存器的低八位,也就是第0~7位;故SCIxBDH的第0 ~ 7位对应于[SCR0:SBR7]。
-
波特率计算公式:
-
SCIBD寄存器值的计算公式:
SCIBD=BUSCLK/(SCI波特率X16)
AW60的内部总线频率是4MHz,由于4MHz=4x10^6>65535,故通常把4MHz=(4x10 ^4)/10 ^(-2),这样做的目的是防止数据溢出。 -
设置波特率时首先写入SCIxBDH,缓存生成的高八位字节,然后再写入SCIxBDL。SCIxBDH中的值在写入SCIxBDL前不会变化。如:
void SCIInit(uint baud )
//baud是波特率(600、9600……)
{
uint Mbaud=0;
Mbaud=4*(10000/(baud/100))/16;
SCI1BDH=(uchar)((Mbaud&0xFF00)>>8);
SCI1BDL=(uchar)(Mbaud&0x00FF);
}
(2)数据寄存器(SCIxD)
- 数据寄存器包含两个独立的寄存器,两个独立的寄存器分别对应接收数据缓冲区与发送数据缓冲区。
- 接收数据时,读取数据寄存器(SCIxD)的内容。
- 发送数据时,将数据写到数据寄存器(SCIxD)。
- 该寄存器不需要初始化,直接可以用。
- 发出一个字符:
while(!(SCI1S1_TDRE));
//判断发送缓冲区是否为空
SCI1D=ch;
//ch是1个字节
(3)控制寄存器
- 控制寄存器有三个分别是SCIxC1、SCIxC2和SCIxC3。
- SCIxC1:该读/写寄存器用于设置SCI的工作方式,可选择运行模式、唤醒模式、空闲类型检测以及奇偶效验等。
数据位 | D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 |
---|---|---|---|---|---|---|---|---|
定义 | LOOPS | SCISWAI | RSRC | M | WAKE | ILT | PE | PT |
复位 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
位 | 功能描述 |
---|---|
LOOPS | 环路模式选择——用于选择SCI的发送、接收两个管脚的工作模式;0:正常操作——RxD和TxD管脚互相独立,工作于正常全双工模式;1:环路模式或单线模式,发送器输出被内部连接到接收器输入(见RSRC位),RxD管脚未被SCI使用 |
SCISWA | 等待模式下SCI停止允许位。0:在等待模式下SCI时钟继续运行,因此SCI能够在等待模式下产生中断唤醒CPU;1:在等待模式下SCI时钟被停止。 |
RSRC | 接收源选择—―此位只有在 LOOPS=1时才有含义和效果。当LOOPS=1时,接收器的输入被内部连接到TxD管脚,RSRC位决定此连接是否还连接到发送器的输出。0:在LOOPS=1的情况下,RSRC=0选定内部环回模式,且SCI不使用RxD或TxD管脚;1:单线SCI模式,TxD管脚被连接到发送器输出和接牧器输入 |
M | 数据帧格式选择位(9位或8位模式选择);0:8位正常模式,包括(起始位+8位数据位(LSB在前)+停止位);1:9位模式,起始位+8位数据位(LSB在前)+第9位数据+停止位。 |
WAKE | 接收唤醒方法选择。0:空闲线唤醒;1:地址符唤醒。 |
ILT | 空闲线类型选择—―用于设定检测空闲线的两种方法。0:空闲字符位计数从起始位之后开始;1:空闲字符位计数从停止位之后开始。 |
PE | 奇偶校验允许一一允许硬件奇偶生成器和校验。当允许奇偶校验时,那么数据位最高有效位MSB(第8位或第9位)被当作奇偶检验位。0:没有硬件奇偶生成器和校验;1:有硬件奇偶生成器和校验 |
PT | 奇偶校验类型 一一用于选定在 PE=11时是用偶校验还是奇校验。0:偶校验;1:奇校验 |
- SCIxC2:该寄存器主要用于收/发及相关中断控制的设置。
数据位 | D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 |
---|---|---|---|---|---|---|---|---|
定义 | TIE | TCIE | RIE | ILIE | TE | RE | RWU | SBK |
复位 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
位 | 功能描述 |
---|---|
TIE | 发送中断允许位。0:当TDRE=1时禁止产生硬件中断(可使用轮询);1:当TDRE=1时允许产生硬件中断 |
TCIE | 发送完成中断允许位。0:当TC=1时禁止产生硬件中断(可使用轮询);1:当TC=1时允许产生硬件中断。 |
RIE | 接收中断允许位。0:当RDRF=1时禁止产生硬件中断(可使用轮询);1:当RDRF=1时允许产生硬件中断 |
ILIE | 空闲线中断允许位。0:当IDLE=1时禁止产生硬件中断(可使用轮询);1:当IDLE=1时允许产生硬件中断 |
TE | 发送器允许。0:发送器关闭;1:发送器工作。 |
RE | 接收器允许 一一当SCI接收器关闭时,RxD管脚可用作通用I/O管脚。0:接收器关闭;1:接收器打开 |
RWU | 接收器唤醒控制一一在接收器等待对选定好的唤醒条件进行自动硬件检测的结果时,此位能被写1来使SCI接收器在此时处于备用状态。唤醒条件要么是在信息之间有一个空闲线( WAKE=0,空闲线唤醒),要么是字符中的最高有效位为1 (WAKE=1地址符唤醒)。应用软件设置RWU为1, 而选定的硬件唤醒事件会自动清零RWU。0:正常SCI接收器操作;1:SCI接收器在等待唤醒事件时转为备用模式。 |
SBK | 发送暂停一一先写1然后写0到SBK会在发送数据流中插入一个暂停符。只要SBK=1,由10或11位时间长度的逻辑0组成的额外的暂停符就被一直插 入到发送数据流中。0:正常发送器操作;1:插入的暂停字符被发送。 |
- SCIxC3:该寄存器主要用于9个数据位、TxD引脚方向、发送数据极性和错误中断的控制
数据位 | D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 |
---|---|---|---|---|---|---|---|---|
定义 | R8 | T8 | TxDIR | TXINV | ORIE | NEIE | FEIE | PEIE |
复位 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
位 | 功能描述 |
---|---|
R8 | 接收数据第9位一一当 SCI被配置为9位数据格式(M=1)时,R8用作接收数据中的处于SCIxD寄存器中接收缓存数据最高位MSB左边的第9数据。当读9位数据的时候,R8和SCIxD都必须被读才能完成自动清零RDRF的操作序列。 |
T8 | 发送数据第9位一一当SCI 被配置为9位数据格式(M=1)时,T8用作发送数据中的处于SCIxD寄存器中发送缓存数据最高位MSB左边的第9数据位。当写一个9位数据时,完整的9位值在SCIxD被写入之后就被传送到SCI移位寄存器中,因此T8如果要从当前值被改变那么应该在写SCIxD之前写入。如果T8不需要改变成一个新的值,那么它不需要在每次写SCIxD的时候都被重写。 |
TxDIR | 单线模式下的TxD管脚方向一一当SCI被配置为单线半双工工作模式(LOOPS=RSRC=1)时,此位决定TxD管脚的方向。0:单线模式下TxD管脚作为输入;1:单线模式下TxD管脚作为输出。 |
TXINV | 发送数据极性控制位一一设置该位可使发送数据输出的极性反转。0:发送数据极性未被反转;1:发送数据极性被反转。 |
ORIE | 接收器溢出中断允许一一此位用于允许OR=1产生一个硬件中断请求。0:禁止OR=1产生中断请求(可使用软件轮询);1:允许OR=1产生中断请求。 |
NEIE | 噪声错误中断允许一一此位用于允许NF=1产生一个硬件中断请求。0:禁止NF=1产生中断请求(可使用软件轮询);1:允许NF=1产生中断请求 |
FEIE | 成帧错误中断允许一一此位用于允许FE=1产生一个硬件中断请求。0:禁止FE=1产生中断请求(可使用软件轮询);1:允许FE=1产生中断请求 |
PEIE | 校验错误中断允许一一此位用于允许PF=1产生一个硬件中断请求。0:禁止PF=1产生中断请求<可使用软件轮询);1:允许PF=1产生中断请求。 |
(4)状态寄存器
待写……
3、寄存器初始化
- (1)根据通信双方的波特率,设定SCI波特率寄存器SCIxBD中分频因子。需要先写SCIxBDH,再写SCIxBDL。
- (2)更新SCI控制寄存器1(SCIxC1),设定环路模式、8位还是9位数据位、是否允许硬件奇偶校验等,如无特别需求,可取其缺省值而不做设定。
- (3)更新SCI控制寄存器2(SCIxC2)来允许发送、接收,以及是否允许发送中断和接收中断等。
- 如需要,更新SCI控制寄存器3(SCIxC3),再对发送数据是否取反、是否允许错误中断等进行设定。
- (4)允许SCI发送之后,通过读SCI状态寄存器1(SCIxS1)判断其中的TDRE位是否为1来判断发送数据寄存器是否为空,当发送数据寄存器为空时,可以写发送数据到发送数据寄存器SCIxD。
- (5)允许SCI接收之后,通过查询或中断方式判断SCIxS1中的接收数据寄存器满标志位RDRF是否为1来判断是否接收到了新数据,当接收到新数据时,读寄存器SCIxD来保存新数据,之后还要通过清零RDRF的操作清零RDRF标志位。
4、编程实例
最后
以上就是眯眯眼香水为你收集整理的串行通信(SCI模块)一、 串口通信基础知识二、AW60串行通信的全部内容,希望文章能够帮你解决串行通信(SCI模块)一、 串口通信基础知识二、AW60串行通信所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复