第9章 LPC1114通用异步串行通信
9.1.3串行通信的数据帧
要保证串行通信正常进行,串行通信的双方必须采用统一的编码方式,即确定一个字符的表达形式以及位发送顺序和位串长度等,这就是串行通信中数据帧的概念。
数据帧包含4部分,分别为起始位、数据位、校验位和停止位,下面对其进行介绍。
1.起始位
通信线路上没有数据传送时一般处于逻辑1的状态。当发送设备有数据发送时,它首先要发送一个逻辑0信号,这个逻辑低电平就是起始位。当接收设备检测到这个低电平后,就开始准备接收数据位信号。起始位所起的作用就是设备同步,通信双方必须在传送数据位前协调同步。
2.数据位
数据位的个数依据通信双方的约定可以是5、6、7或8位。这些数据位被接收到移位寄存器中,构成传送数据字符。在字符数据传送过程中,数据位一般是从最低有效位开始发送,直至最高位发送结束。
3.奇偶校验位
奇偶校验位的主要作用是用于差错控制,检验所接收数据的正确性。通信双方必须选择相同的校验方式。
4.停止位
在奇偶校验位或数据位(当无奇偶校验时)之后发送的是停止位。它是一个字符数据的结束标志,可以是1位、1.5位或2位高电平。接收设备收到停止位之后,通信线路上便又恢复逻辑1状态,等待下一个起始位的到来。
在串行通信的时候,一个字节是8位,规定当没有通信信号发生时,通信线路保持高电平,当要发送数据之前,先发一位0表示起始位,然后发送8位数据位,数据位是先低后高的顺序,数据位发完后再发一位1表示停止位。这样本来要发送一个字节的8位数据,而实
际上我们一共发送了10位,多出来的两位其中一位起始位,一位停止位。而接收方原本一直保持高电平,一旦检测到了一位低电平,那就知道要开始准备接收数据了,接收到8位数据位后,然后检测到停止位,再准备下一个数据的接收。上述过程如图9-1所示。
图 9-1串行通信数据帧示意图
9.1.4串行通信的波特率
串行通信的双方必须采用同样的传送速率才能确保设备同步,这个速率就是波特率。波特率的设置主要是为了设定数据的发送或接收速度。通信线上传送的所有位信号都保持一定的持续时间,以便接收端能够正确接收,而每一位信号持续时间是由数据传送速度决定的。每秒钟传送二进制位的个数,称为波特率。如果数据以每秒9600个二进制位在通信线上传送,那么传送速度就是9600Baud,记为9600bps。
9.1.5同步通信和异步通信
串行通信有同步通信和异步通信两种基本通信方式,这两种通信方式对联络信号和数据有着不同的规定。
1.同步通信
同步通信的基本特征是发送和接收时钟保持严格同步。采用同步通信时,将许多字符组成一个信息组,这样字符可以一个接一个地传输,但是在每组信息(通常为帧)的开始要加上同步字符,在没有信息要传输时,要填上空字符,因为同步传输不允许有间隙,也不存在起始位和停止位,仅在数据块开始时用同步字符来指示。因此同步通信技术难度较大,但其通信速度较高,而且误码率较低。
在同步通信中,要求用时钟来实现发送端和接收端之间的同步,接收和发送时钟对于收发双方之间的数据传送同步是至关重要的。在发送方,一般都是在发送时钟的下降沿将数据串行移位输出;在接收方,一般都是在接收时钟的上升沿将数据串行移位输入。
2.异步通信
异步通信不需要同步字符,也不需要发送设备保持数据块的连续性。可以准备好一个发送一个,但要发送的每一字符都必须先按照通信双发约定好的格式进行格式化,在其前后分别加上起始位和停止位,用以指示每一字符的开始和结束。正是由于每一字符都包含有起始位和停止位,因此,异步通信的传输速率不如同步通信的效率高。但对接收与发送时钟的要求可以低一些。另外异步通信双方收发速率必须相同。
9.1.6串行通信的传输方式
串行通信的传输方式可以分为单工、半双工和全双工三种。
1.单工通信
单工通信是指数据只能单方向传输的工作方式,因此只占用一个信道(信道是指以传输媒质为基础的信号通道)。广播、遥控、遥测、无线寻呼等属于单工通信。
2.半双工通信
半双工通信是指通信双方都能交替地进行双向数据传输,但两个方向的数据传输不能同时进行。例如,使用同一载波频率的对讲机、收发报机都是半双工的通信方式。
3.全双工通信
全双工通信是指通信双发可同时进行数据收发的工作方式。一般情况下全双工通信的信道必须是双向信道。普通电话、手机都是最常用的全双工通信方式,计算机之间的高速数据通信也是这种方式。
9.2RS232C标准及通信接口设计
9.2.1三种串行接口标准
RS-232、RS-422与RS-485都是串行接口标准,最初是由美国电子工业协会(EIA)制
订并发布。RS-232在1962年发布,作为工业标准,以保证不同厂家产品之间的兼容。
RS-422由RS232发展而来,它是为了弥补RS-232的不足而提出的,为了改进RS-232通信距离短、速率低的缺点,RS-422定义了一种平衡通信接口,提高了传输速率。
为了扩展应用范围,EIA又于1983年在RS-422的基础上制订了RS-485标准,增加了多点、双向通信能力,即允许多个发生器连接到同一条总线上,同时增加了发送器的驱动能力和冲突保护特性,扩展了总线共模范围。
RS-232、RS-422与RS-485标准只对接口的电气特性作出规定,而不涉及接插件、电缆或协议。RS-232、RS-422与RS-485的电气规定如表9-1所示。
表 9-1 串行总线电气规定
规定RS-232 RS-422 RS-485
工作方式单端差分差分
节点数1收1发1发10收1发32收
最大传输电缆长度/ft(英尺) 50 400 400
最大传输速率20Kb/s 10Mb/s 10Mb/s
最大驱动输出电压/V ±25 -0.25~6 -7~12
驱动器输出信号电平负载/V ±5~±15 ±2.0 ±1.5
驱动器输出信号电平(空载)/V ±25 ±6 ±6
驱动器负载阻抗/Ω3000~7000 100 54
摆率30V/us N/A N/A
接收器输入电压范围/V ±15 -10~10 -7~12
接收器输入门限±3V ±200mV ±200mV
接收器输入电阻3~7 4 ≥12
驱动器共模电压/V - -3~3 -1~3
接收器共模电压/V - -7~7 -7~12
9.2.2RS-232C物理接口及电平标准
1.电平转换
RS-232C规定的逻辑电平与一般微处理器的逻辑电平不同,RS-232采用负逻辑方式:
2标准逻辑“1”对应:-5V~-15V电平;
2标准逻辑“0”对应:+5V~+15V电平;
2未定义区:-3V~+3V。
现在的PC机上的串口都是采用RS-232协议,而8051单片机的逻辑“1”通常是以5V
表示;而ARM微处理器的逻辑“1”通常是以3.3V表示,逻辑“0”通常是以0V表示的。所以在应用LPC1100系列的串口与PC机进行通信时必须进行电平转换把TTL或CMOS电平转换成RS-232电平,或把PC机的RS-232电平转换成微处理器的TTL或CMOS电平。
2.接口
RS-232采用9针和25针(很少见)的D型接口。一般情况下PC机预留的是9针公头,定义如表9-2所示;而开发板设计的电路都是采用9针母头,定义如表9-3所示。在物理结构上分为9针的和9孔的,习惯上我们也称之为公头和母头,如图9-2所示。
RS-232对于一般的双工通信来说只需要3条信号线即可实现,这三根信号线分别为RXD、TXD和GND。
表 9-2 RS-232公头(DB9 9针)接口定义
引脚符号功能
1 DCD 数据载波检测
2 RxD 接收数据
3 TxD 发送数据
4 DTR 数据终端准备就绪
5 GND 信号地
6 DSR 数据设备准备就绪
7 RTS 请求发送
8 CTS 清除发送
9 R1 振铃指示
表 9-3 RS-232母头(DB9 9孔)接口定义
引脚符号功能
1 DCD 数据载波检测
2 TxD 发送数据
3 RxD 接收数据
4 DSR 数据设备准备就绪
5 GND 信号地
6 DTR 数据终端准备就绪
7 CTS 清除发送
8 RTS 请求发送
9 R1 振铃指示
图 9-2 RS232通信接口
9.2.3 串行总线连接
在实际的应用中比较广泛的是RS-232和RS-485两种通信方式,下面将介绍这两种通信方式的应用。
1. 微处理器间直接通信
在微处理器之间可以直接连接它们的TXD 和RXD 管脚进行通信。只是采用这种方式进行通信时需要注意几点:
2 传输距离不能超过1.5m ;
2 不同电平之间需要注意电平匹配问题。
如图 9-3所示,为两个LPC1100系列微处理器的之间通信连接示意图。此连接方式适用于电平相同的微处理器之间的通信。以就是说,LPC1100微处理器和其他电源电压为3.3V 的微处理器之间都可以采用此方式通信。
图 9-3 微处理器间直接通信示意图 2. RS-232通信
为了提高传输距离和电平兼容,可以采用RS-232标准进行点对点的通信连接,如图 9-4所示。此电路不仅可以应用在不同微处理器之间进行通信,也可以应用在微处理器与PC 机之间进行通信。
RXD TXD
GND
LPC1100
图 9-4 RS-232通信示意图
3. RS-485通信
为了进一步提高传输距离,并实现点对多的传输,在工业上一般都是采用RS-485总线进行通信。RS-485可以采用两线方式,也可以采用四线方式进行通信。大多数情况下都是采用两线方式进行如图 9-5所示。
图 9-5 RS-485通信示意图
9.3 L PC1114串行通信接口
9.3.1 UART 特性
LPC1100系列Cortex-M0微控制器具有一个标准的异步串行口(UART ),具有以下特性: l 16字节收发FIFO ;
l 符合16C550工业标准;
l 接收器FIFO 触发点可为1、4、8和14字节;
TXD
RXD T2in T2out R2out R2in
RXD TXD R2in R2out T2out T2in LPC1100 LPC1100 RS-232 RS-232 系统1 系统2
TXD
RXD
CON DI A RO B CON TXD RXD CON
DI A RO B CON LPC1100
RS-485 RS-485 LPC1100
l内置波特率发生器;
l用于精确控制波特率的小数分频器,并拥有赖以实现软件流控制的自动波特率检测能力和机制;
l支持软件或硬件流控制执行;
l包含标准Modem接口信号(CTS、DCD、DTS、DTR、RI、RTS);
l支持RS-485/EIA-485的9位模式和输出使能;
l调制解调器控制。
LPC1100微处理器内部UART其结构框图如图9-6所示。APB总线为CPU和UART部分提供通信连接,UART接收单元监视串行输入线RXD的有效输入,UART接收移位寄存器RSR通过RXD接收有效字符。当RSR接收到一个有效字符时,它将字符传送到UART接收缓冲寄存器RBR中,等待CPU访问。
UART发送单元接收CPU写入的数据,并将数据缓存到UART发送缓冲器THR中,UART发送移位寄存器TSR读取存储在THR中的数据,并通过串行输出引脚TXD将数据集中发送。
图 9-6 UART结构框图
UART发送模块所需的时钟由UART波特率发生器产生,而UART波特率发生器时钟输入为UART_PCLK,由系统时钟经UART时钟分频器分频得到。
UART时钟分频器寄存器(UARTCLKDIV)配置UART外设时钟UART_PCLK,其位功能描述如表9-4所示。将DIV设为0x0就可以彻底关闭该时钟。使能UART时钟之前必须将UART管脚配置好。
表 9-4 UART时钟分频器寄存器位功能描述
位 符号 值
描述 复位值
7:0 DIV
0 1~255 UART_PCLK 时钟分频值 置0禁能UART_PCLK,否则等于系统时钟除以分频
值 0x00
31:8 - - 保留 0x00
9.3.2 UART 引脚描述
在使能UART 时钟之前,UART 管脚必须在相应的IOCON 寄存器中配置。其中有部分管脚可以重映射,管脚描述参见表 9-5所列。
表 9-5 UART 引脚描述 管脚
CPU 引脚 类型 描 述 RXD
P1_6 I 串行输入管脚,串行接收数据 TXD
P1_7 O 串行输出管脚,串行发送数据 RTS
P1_5 O 请求发送,RS-485方向控制管脚 DTR
P2_0、P3_0 O 数据终端就绪
DSR[1]
P2_1、P3_1 I 数据设置就绪 CTS
P0_7 I 发送控制引脚,清除发送 DCD[1]
P2_2、P3_2 I 数据载波检测 RI[1] P2_3、P3_3 I 铃响指示
[1] 仅用于LQFO48封装
9.3.3 UART 电路连接
如图 9-7是LPC1100系列微处理器采用RS-232与PC 机进行通信的原理图。在与PC 机进行通信的应用中,只需要把COM1与PC 机串口进行连接即可。不过需要特别注意的是RS-232电平转换芯片的选择。对于使用5V 供电的处理器,一般采用标注为232芯片(例如MAX232),而使用3.3V 供电的处理器一般采用3232芯片(例如MAX3232,SP3232)。
图 9-7 RS-232通信电路
9.3.4USB转串口通信
随着技术的发展,工业上还有RS232串口通信的大量使用,但是商业技术的应用上,已经慢慢的使用USB转UART技术取代了RS232串口,绝大多数笔记本电脑已经取消了串口,要实现单片机和电脑之间的串行通信只需要在电路上添加一个USB转串口芯片,就可以成功实现USB通信协议和标准UART串行通信协议的转换,开发板上使用的是CH340T 这个芯片,如图9-8所示。
图 9-8 USB转串口电路
9.4LPC1114串行通信常见寄存器
9.4.1UART接收缓冲寄存器RBR
RBR是UART RXD FIFO的最高字节,它包含了最早接收到的字符,并且可通过总线接口进行读取。LSB(位0)表示最早接收到的数据位。如果接收到的字符少于8位,则未使用的MSB用0填充。如果要访问RBR,LCR寄存器中的除数锁存访问位(DLAB)必须为0。RBR为只读寄存器。
表 9-6 UART接收缓冲寄存器位描述
位字符描述
7:0 RBR UART接收器缓冲寄存器包含了UART RXD FIFO当中最早接收到的字节
31:8 - 保留
9.4.2UART发送保持寄存器THR
THR是UART TXD FIFO的最高字节。它是TXD FIFO中的最新字符,可通过总线接口进行写入。LSB代表第一个要发送出去的位。如果要访问THR,LCR寄存器中的除数锁存访问位(DLAB)必须为0。THR为只写寄存器。
表 9-7 UART发送保持寄存器位描述
位字符描述
7:0 THR
写UART发送保持寄存器会使数据保存到UART发送FIFO中。当字节
达到FIFO的底部并且发送器可用时,字节就会被发送31:8 - 保留
9.4.3UART中断使能寄存器IER
IER用于使能4个UART中断源。如果要执行接收中断服务函数,用户还需要在CPSR里使能IRQ,可以通过NVIC提供的库函数来实现。其位描述如表9-8所示。
表 9-8 UART中断使能寄存器位描述
位字符描述
接收中断使
能使能UART的接收数据可用中断。它还控制着字符接收超时中断0:禁止RDA中断;
1:使能RDA中断
1
发送中断使
能使能UART的THRE中断。该中断的状态可从LSR[5]中读出0:禁止THRE中断;
1:使能THRE中断
2
接收线状态
中断使能使能UART的Rx线状态中断。
该中断的状态可从LSR[4:1]中读出0:禁止Rx线状态中断;
1:使能Rx线状态中断
3 - 保留
6:4 - 保留。用户软件不应对其写入1。从保留位读出的值未定义7 - 保留
8 自动波特率
结束中断使
能
0:禁止自动波特率结束中断;
1:使能自动波特率结束中断
9 自动波特率
超时中断使
能
0:禁止自动波特率超时中断;
1:使能自动波特率超时中断
31:10 - 保留。用户软件不应对其写入1。从保留位读出的值未定义
9.4.4UART中断标志寄存器IIR
IIR提供状态码用于指示一个待处理中断的优先级和中断源。在访问IIR过程中,中断被冻结。如果在访问IIR过程中产生了中断,该中断将被记录,下次访问IIR时便可将其读出。UART中断标志寄存器描述如表9-9所示。
表 9-9 UART中断标志寄存器位描述
位字符描述
0 中断状态中断状态。注意IIR[0]为低电平有效。待处理的中断可通过IIR[3:1]来确定0:至少有一个中断正在等待处理;
1:没有等待处理的中断
3:1 中断标志中断标志。IER[3:1]指示对应UART RXD FIFO的中断。下面未列出的IER[3:1]的其它组合都为保留值(100、101、111)
011:1 –接收线状态(RLS)
010:2a –接收数据可用(RDA)
110:2b –字符超时指示器(CTI)
001:3 – THRE中断
000:4 – Modem中断
5:4 - 保留。用户软件不应对其写入1。从保留位读出的值未定义7:6 FIFO使能这些位等效于FCR[0]
8 自动波特率
中断结束标
识
自动波特率中断结束。若已成功完成自动波特率检测且中断使能,则ABEOInt为真
9 自动波特率
超时中断标
志
自动波特率超时中断。若自动波特率发生了超时且中断使能,则ABTOInt为真
31:10 - 保留。用户软件不应对其写入1。从保留位读出的值未定义9.4.5UART FIFO控制寄存器FCR
FCR控制UART RXD和TXD FIFO的操作,寄存器位描述如表9-10所示。
表 9-10 UART FIFO控制寄存器位描述
位字符描述
0 FIFO使能0:UART FIFO被禁止。禁止在应用中使用
1:高电平有效,使能对UART RXD FIFO和TXD FIFO以及FCR[7:1]的访问。
该位必须置位以实现正确的UART操作。该位的任何变化都将使UART FIFO清空
1 RXD FIFO复位0:对两个UART FIFO均无影响
1:写1到FCR[1]将会清零UART RXD FIFO中的所有字节,并复位指针逻辑,该位可以自动清零
2 TXD FIFO复位0:对两个UART FIFO均无影响
1:写1到FCR[2]将会清零UART TXD FIFO中的所有字节,并复位指针逻辑。该位会自动清零
4 - 保留
5:4 - 保留。用户软件不应对其写入1。从保留位读出的值未定义
7:6 Rx触发选择这两个位决定了接收UART FIFO在激活中断前必须写入的字符数量
00:触发点0(默认1字节或0x01);
01:触发点1(默认4字节或0x04)
10:触发点2(默认8字节或0x08);
11:触发点3(默认14字节或0x0E)
31:8 - 保留
9.4.6UART线控制寄存器LCR
LCR决定了要发送和接收的数据字符格式,其位描述如表9-11所示。
表 9-11 UART线控制寄存器位描述
位字符描述
1:0 字长度选择00:5位字符长度01:6位字符长度10:7位字符长度11:8位字符长度
2 停止位选择
0:1个停止位
1:2个停止位(若LCR[1:0]=00时为1.5个停止位)3 奇偶校验使能
0:禁止校验的产生和检测
1:使能校验的产生和检测
5:4 奇偶校验控制00:奇校验。1s内的发送字符数和附加校验位为奇数01:偶校验。1s内的发送字符数和附加校验位为偶数10:强制“1”奇偶校验
11:强制“0”奇偶校验
6 间隔控制0:禁止间隔传输
1:使能间隔传输。当LCR[6]是高电平有效时,强制使输出管脚UART TXD为逻辑0
7 除数锁存访问位
0:禁止对除数锁存器的访问
1:使能对除数锁存器的访问
31:8 - 保留
9.4.7UART线状态寄存器LSR
LSR是一个只读寄存器,提供UART TXD和RXD模块的状态信息,具体的寄存器位描述见表9-12所示。
表 9-12 UART线状态寄存器位描述
位字符描述
接收数据就绪
(RDR)当RBR包含未读字符时,LSR[0]就会被置位;当UART 接收FIFO为空时,LSR[0]就会被清零
0:RBR为空
1:RBR包含有效数据
1
溢出错误
(OE)一旦发生错误,就设置溢出错误条件。读LSR会清零LSR[1]。
当UART RSR已有新的字符就绪,而UART RBR FIFO已满时,LSR[1]会置位。此时,UART接收FIFO将不会被覆盖,UART RSR内的字符将会丢失
0:溢出错误状态无效
1:溢出错误状态有效
2
奇偶错误
(PE)当接收字符的校验位处于错误状态时,校验错误就会产生。读LSR会清零LSR[2]。校验错误检测时间取决于FCR[0]
0:校验错误状态无效
1:校验错误状态有效
3
帧错误
(FE)当接收字符的停止位为逻辑0时,就会发生帧错误。读LSR会清零LSR[3]。帧错误检测时间取决于FCR。当检测到有帧错误时,Rx会尝试与数据重新同步,并假设错误的停止位实际是一个超前的起始位。但即使没有出现帧错误,它也无法假设下一个接收到的字符是正确的
0:帧错误状态无效
1:帧错误状态有效
4
间隔中断
(BI)在发送整个字符(起始位、数据、校验位以及停止位)过程中,RXD如果保持在空闲状态(全“0”),则产生间隔中断。一旦检测到间隔条件,接收器立即进入空闲状态,直到RXD进入标记状态(全“1”)。读LSR会清零该状态位。间隔检测的时间取决于FCR[0]
0:间隔中断状态无效
1:间隔中断状态有效
5
发送FIFO空
(THRE)当检测到UART THR已空时,THRE就会立即被设置。写THR会清零THRE 0:THR包含有效数据
1:THR为空
6
发送器空
(TEMT)当THR和TSR同时为空时,TEMT就会被设置;而当TSR或THR任意一个包含有效数据时,TEMT就会被清零
0:THR和/或TSR包含有效数据
1:THR和TSR为空
7
Rx FIFO错误
(RXFE)当一个带有Rx错误(如:帧错误、校验错误或间隔中断)的字符载入到RBR时,LSR[7]就会被置位。当LSR寄存器被读取并且UART FIFO中不再有错误时,该位就会清零
0:RBR中没有UART Rx错误或FCR[0]=0
1:UART RBR包含至少一个UART Rx错误
31:8 - 保留
9.4.8UART除数锁存寄存器DLL/DLM
UART除数锁存寄存器是UART波特率发生器的一部分并保存使用的值,它与小数分频器一同使用,来分频UART_PCLK时钟以产生波特率时钟,该波特率时钟必须是所需波特率的16倍。除数锁存DLL寄存器描述见表9-13,DLM寄存器描述见表9-14所示。在不使用小数分频器的情况下(这也是默认情况),目标波特率为:
Baud = Fpclk / (16*(DLM:DLL))
这两个寄存器一起构成16位除数,DLL包含的是除数的低8位,DLM包含的是除数的高8位。在访问UART除数锁存寄存器时,除数锁存访问位(DLAB)必须为1。
表 9-13 UART除数DLL寄存器位描述
位字符描述
7:0 DLLSB 与DLM寄存器一起决定UART的波特率
31:8 - 保留
表 9-14 UART除数DLM寄存器位描述
位字符描述
7:0 DLMSB 与DLL寄存器一起决定UART的波特率
31:8 - 保留
9.5UART中断
9.5.1NVIC与UART中断
LPC1100系列ARM处理器UART接口具有中断功能,由嵌套向量中断控制器(NVIC)来管理,UART位于NVIC中断通道21,UART接口中断与嵌套向量中断控制器(NVIC)的关系如图9-9所示。
中断使能寄存器ISER用来控制NVIC通道的中断使能。当ISER[21]=1时,通道21中断使能,即UART中断使能。中断优先级寄存器IPR用来设定NIVC通道中断的优先级。IPR5[15:8]用来设定通道21的优先级,即UART中断的优先级。
关于ISER和IPR的配置,我们可以直接利用CMSIS提供的NVIC函数来实现。关于NVIC函数的使用方法详见6.7节。
图 9-9 UART与NVIC的关系
当UART接口的中断优先级设定完毕且中断使能后,当中断触发条件满足时,则会触发中断。处理器响应中断后将自动定位到中断向量表,并根据中断号从向量表中找出UART 中断处理函数的入口地址,然后PC程序指针跳转到该地址处执行中断服务函数。因此,用户需要在中断发生前将UART的中断服务函数地址(UART_IRQHandler)保存到向量表中。此部分工作已经在startup_LPC11xx.s代码中完成。
9.5.2UART中断分类
UART中断主要分为5类:接收中断、发送中断、接收线状态中断、Modem中断和自动波特率中断,如图9-10所示。其中,接收线状态中断指接收过程中发生了错误,即接收错误中断。自动波特率中断包括自动波特率结束中断和超时中断。
图 9-10 UART中断示意图
1.接收中断
对于UART接口来说,有两种情况可以触发UART接收中断:接收字节数达到接收FIFO 的触发点(RDA)和接收数据超时(CTI)。
1)接收字节数达到接收FIFO中的触发点(RDA)引起的中断
LPC1100系列Cortex-M0微控制器UART接口具有16字节的接收FIFO,接收触发点可以设置为1、4、8、14 字节,当接收到的字节数达到接收触发点时,便会触发中断。
如图9-11所示,通过UART FIFO控制寄存器FCR,将接收触发点设置为“8字节触发”。那么当UART接收8个字节时,便会触发RDA中断(注:在接收中断使能的前提下)。
图 9-11 RDA 中断示意图
如果需要LPC1114微处理器响应RDA中断,需要采取以下步骤。
a)RDA中断初始化
RDA中断初始化函数需要设置两个寄存器:UART中断使能寄存器IER和UART FIFO 控制寄存器FCR。其中,UART FIFO控制寄存器FCR用来设置触发点。
例如:将UART 接口设置为8字节触发,设置代码如下。
LPC_UART->IER = 0x01;; //UART接收中断使能
LPC_UART->FCR; //UART接收缓冲区的触发点为8字节
b)RDA 中断服务程序
如果UART接口触发RDA中断,那么中断服务程序只需要连续读取UART接收器缓存寄存器RBR即可。
例如已将UART设置为8字节触发,那么RDA中断服务程序代码如下。
switch(LPC_UART->IIR & 0x0F)
{
case 0x04://发生RDA中断
for(i = 0; i < 8; i++) //连续读取RBR寄存器8次
{
RcvBuf[ i ] = LPC_UART->RBR;//将接收到的数据保存到接收缓冲区RcvBuf中}
}
2)接收超时(CTI)引起的中断
当接收FIFO中的有效数据个数少于触发个数时(注:接收FIFO中至少有一个字节),如果长时间没有数据到达,将触发CTI中断。
如图9-12所示,将接收FIFO的触发点设置为8字节,而外部设备只发了4个字节的数据,则经过一段时间后(3.5到4.5个字符时间),UART接口便会触发“接收超时中断”。接收超时中断的初始化设置与RDA中断的设置完全一致,而中断服务程序却有一些区别:对于RDA中断,可以确定当前接收FIFO中的字符数,而CTI中断却不清楚当前的字符个数,只能够通过判断当前接收FIFO是否为空来实现,程序如下。
switch(IIR & 0x0f)
{
case 0x0c:/* 发生超时中断——CTI */
while((LSR & 0x01) == 1) /*如果接收FIFO中含有数据,就读取UnRBR寄存器*/
{
RcvBuf [ i++ ] = RBR; /* 将数据保存到接收缓冲区RcvBuf 中*/
}
}
图 9-12 CTI 中断示意图
2.发送中断
LPC1100系列Cortex-M0微控制器UART接口具有16字节的发送FIFO,当发送FIFO由非空变为空时,便会触发“发送中断”。如图9-13所示,UART发送数据时,首先都是将数据送入“发送FIFO”。
现在连续将8个字节的数据送入“发送FIFO”,则当FIFO变为空时,会触发“THRE”中断。发生“THRE”中断后,读取UART中断标志寄存器(IIR)可以清除THRE中断标志位。此外,对UART发送器保持寄存器THR执行写操作也可以清除THRE中断。
图 9-13 发送中断示意图
3.接收线状态中断
在UART接收数据时,如果出现溢出错误(OE)、奇偶错误(PE)、帧错误(FE)和间隔中断(BI)中的任意一个错误时,都会触发接收线状态中断。具体的错误标志可以通过读取UART状态寄存器LSR[4:1]得到。当读取LSR寄存器时,会清除该中断标志。
异步串行通信的工作方式
异步串行通信的工作方式,然后给出了VB MSComm控件下异步串行通信在电子衡器中的应用实例,包括硬件接口及软件设计。关键词:RS-232 异步串行通信Visual Basic 电子衡器控件计算机一般提供了2个25针或9针的RS-232标准串行口,简称为COM1和COM2。在某些应用中,我们还可以通过插通信卡来获得额外的RS-232标准串行口。利用这些串行口可以与其它数字设备进行一般的数据通信,计算机的串行接口主要用于远程通信和低速输入输出设备。由于串行数据通信传输线条数最少,而且有许多较便宜的专用芯片可实现它,发送和接受器也简单,因而对数据传输速度要求不高的计算机和数字设备间的近程通信,多采用串行通信实现。而目前各个厂家生产的电子衡器的称重仪表多配有与上位机通信的RS—232C串行接口,因而计算机与称重仪表之间的数据通信用串口很容易实现,只需要制作一条2芯或3芯的数据线编写相应的接口程序即可实现,不需要增加其他硬件设备。采用这种方式组成的微机电子衡器有许多优点:称重仪表经过多年的发展,在数据采集、抗干扰、可靠性等方面技术成熟,质量稳定;而计算机在存储容量、数据处理、查询、统计报表等数据管理方面有明显优势。正是两者的完美结合,才使计算机与称重仪表组成的在线式称重管理系统得到了广泛的应用。1串行通信的工作方式串行通信,可分为同步和异步两种方式。异步方式是指在约定的波特率下,传送和接受的数据不需要严格的保持同步,允许有相对的延迟,虽然速度较慢,但经济实用,所以异步串行通信现大量应用于计算机接口技术中。计算机与称重仪表就采用异步通信的方式传送数据。1.1异步串行通信的数据格式在这种通信方式中,一般以一个字符为一帧。一帧最少由三部分组成:起始位、数据位、停止位,开始是一位起始位以发送一个逻辑“0”表示,接着是表示这个数据的数据位,数据位可以是5位、6位、7位或8位,再加一位奇偶校验位,然后是一个、一个半或二个停止位,停止位以逻辑“1”表示。1.2波特率串行通信每秒传送的位数,传送时先低位后高位。常用的波特率有600、1200、2400、4800、9600等。1.3端口在计算机中,一般都配有两个标准串行口,用COM1和COM2表示。(通常采用2个9针D型阳性插头。)1.4信号线RS—232C标准规定有25根连线,使用21个信号线。在我们讨论的微机电子衡器中仅用到3根信号线,它们是:发送数据线TXD(输出信号),接受数据线RXD(输入信号线),信号地GND。其余信号线定义可参考相关书籍。2串行通信在电子衡器中的应用实例串行通信接口设计,包括硬件、软件设计两部分。在WINDOWS操作系统下,可选用VC++、VB等可视化开发工具。下面将以上海耀华称重系统公司的XK3190—A1+为例,以VB6.0编程语言,说明串行通信的软、硬件设计过程。 2.1称重仪表仪表选用上海耀华XK3190-A1+仪表,其串口通信格式如下:2.1.1连续方式发送:所传送的数据为仪表显示的当前称量(毛重或净重),每帧数据由12组数据组成。 第X组 内容及注释 1 02(XON)开始 2 +或- 符号位 3 称量数据高位 : 称量数据: : 称量数据: 8 称量数据低位 9
8251串行通讯实验
安徽师范大学数计学院实验报告 专业名称11计科 课程微机原理 实验名称串行通信实验姓名 学号110704012
8251 可编程串行口与PC 机通讯实验 一、实验目的 (1) 掌握8251 芯片的结构和编程,掌握微机通讯的编制。 (2) 学习有关串行通讯的知识。 (3) 学习PC 机串口的操作方法。 二、实验说明 1、8251 信号线 8251 是CPU 与外设或Mode 之间的接口芯片,所以它的信号线分为两组:一组是用于与CPU 接口 的信号线,另一组用于与外设或Mode 接口。 (1)与CPU 相连的信号线: 除了双向三态数据总线(D7~D0)、读(RD)、写(WR)、片选(CS)之外,还有: RESET:复位。通常与系统复位相连。 CLK:时钟。由外部时钟发生器提供。 C/D:控制/数据引脚。 TxRDY:发送器准备好,高电平有效。
TxE:发送器空,高电平有效。 RxRDY:接收器准备好,高电平有效。 SYNDET/BRKDET:同步/中止检测,双功能引脚。 (2)与外设或Mode 相连的信号线: DTR:数据终端准备好,输出,低电平有效。 DSR:数据装置准备好,输入,低电平有效。 RTS:请求发送,输出,低电平有效。 CTS:准许传送,输入,低电平有效。 TxD:发送数据线。 RxD:接收数据线。 TxC:发送时钟,控制发送数据的速率。 RxC:接收时钟,控制接收数据的速率。 2、8251 的初始化编程和状态字 8251 是一个可编程的多功能串行通信接口芯片,在使用前必须对它进行初始化编程。初始化编 程包括CPU 写方式控制字和操作命令字到8251 同一控制口,在初始化编程时必须按一定的顺序。如 下面的流程图:
串口通信实验讲解
课程名称:Zigbee技术及应用实验项目:串口通信实验指导教师: 专业班级:姓名:学号:成绩: 一、实验目的: (1)认识串口通信的概念; (2)学习单片机串口通信的开发过程; (3)编写程序,使单片机与PC通过串口进行通信。 二、实验过程: (1)根据实验目的分析实验原理; (2)根据实验原理编写C程序; (3)编译下载C程序,并在实验箱上观察实验结果。 三、实验原理: 串行通信是将数据字节分成一位一位的形式在一条传输线上逐个地传送,此时只需要一条数据线,外加一条公共信号地线和若干条控制信号线。因为一次只能传送一位,所以对于一个字节的数据,至少要分8位才能传送完毕,如图3-1所示。 图2-1串行通信过程 串行通信制式: (1)单工制式 这种制式是指甲乙双方通信时只能单向传送数据,发送方和接收方固定。 (2)半双工制式 这种制式是指通信双方都具有发送器和接收器,即可发送也可接收,但不能同时接收和发送,发送时不能接收,接收时不能发送。
(3)全双工制式 这种制式是指通信双方均设有发送器和接收器,并且信道划分为发送信道和接收信道,因此全双工制式可实现甲乙双方同时发送和接收数据,发送时能接收,接收时能发送。 三种制式分别如图3-2所示 图3-2串行通信制式 3.1硬件设计原理 CC2530有两个串行通信接口USART0和USART1,两个USART具有同样的功能,可已分别运行于UART模式和同步SPI模式。 CC2530的两个串行通信接口引脚图分布如表3-1所示 表3-1 CC2530串行通信口引脚图分布 本实验CC2530模块使用的是USART1的位置2,P1_6和P1_7。
异步串行接口电路及通信系统设计设计报告
异步串行接口电路及通信系统设计 设计报告 2009级可编程逻辑课程名称: 实验题目:学生姓名: YC 开课学院: Bio开课时间: 2011课程设计可编程逻辑设计异步串行接口电路及通信系统设计、SXL、ZY、YLJ、WJ 学院至2012学年第二学期重庆大学本科学生课程设计指导教师评定成绩表学院年级学生姓名课程设计题目be学院2009级指导教师专业Zxm. Wxp. BME YC、SXL、ZY、YLJ、WJ 异步串行接口电路及通信系统设计指导教师评语课程设计成绩指导教师签名:年月日重庆大学本科学生课程设计任务书课程设计题目学院BE学院异步串行接口电路及通信系统设计专业BME 年级、班09 BME 01、02班
设计要求:设计一个能进行异步全双工串行通信的模块,该模块以固定的串行数据传送格式收发数据。1)每帧数据供10 位,其中1位启动位,8位数据位,1位停止位。2)波特率为:9600。3)收发误码率摘要摘要通用串口是远程通信接口,在数字系统使用很普遍,是一个很重要的部件。本论文使用VHDL语言描述硬件功能,并适当借助Verilog HDL 语言,利用在FPGA 芯片上的综合描述,采用模块化设计方法设计UART的各个模块。其中包括波特率发生器,程序控制器,UART数据接收器和UART数据发送器,采用的外部时钟为50MHZ,波特率为9600。在QuartusII 环境下进行设计、编译和仿真。最后的程序编译仿真结果及硬件测试结果表明系统设计完全正确。关键字:VHDL; Verilog HDL;UART; 帧格式; FPGA;异步通信I 摘要Abstract In this paper, the use of
单片机串行通信实验
单片机实验报告 实验名称:串行通信实验 姓名:高知明 学号:110404320 班级:通信3 实验时间:2014-6-11 南京理工大学紫金学院电光系
一、实验目的(四号+黑体) 1、理解单片机串行口的工作原理; 2、学习使用单片机的TXD\RXD口; 3、了解MAX232芯片的作用; 二、实验原理 MCS-51单片机内部集成有一个UART,用于全双工方式的串行通信,可以发送、接收数据。他有两个相互独立的接收、发送缓冲器,这两个缓冲器同名(SBUF),共用一个地址号(99H)。发送缓冲器只能写入,不能读出,接受缓冲器只能读出,不能写入。要发送的字节数据直接写入发送缓冲器。SBUF=a;当UART接收到数据后,CPU从接收缓冲器中读取数据,a=SBUF;串行口内部有两个移位寄存器,一个用于串行发送,一个用于串行接收。定时器T1作为波特率发生器,波特率发生器的溢出信号昨接受或发送移位寄存器的位移时钟。TI与RI分别为发送完数据的中断标志,用来想CPU发中断请求。 三、实验内容 1、发送信号 1)C51程序: #include