UART串口通讯中断.ppt

合集下载

S3C2410的串口UART及编程ppt课件

S3C2410的串口UART及编程ppt课件



6.2.7 波特率分频寄存器UBRDIV
波特率分频寄存器UBRDIV的定义和使用在6.1.2中已叙述, 不再重复。


6.2.8 UART单元各寄存器的定义
在随书提供的软件包2410test中,在2410addr.h文件中有关于 UART单元各寄存器的定义。
ppt课件 11







//UART #define rULCON0 ( * (volatile unsigned * )0x50000000)//UART 0 Line control #define rUCON0 ( * (volatile unsigned * )0x50000004)//UART 0 control #define rUFCON0 ( * (volatile unsigned * )0x50000008)//UART 0 FIFO control #define rUMCON0 ( * (volatile unsigned * )0x5000000c)//UART 0 Modem control #define rUTRSTAT0 ( * (volatile unsigned * )0x50000010)//UART 0 Tx/Rx status #define rUERSTAT0 ( * (volatile unsigned * )0x50000014)//UART 0 Rx error status #define rUFSTAT0 ( * (volatile unsigned * )0x50000018)//UART 0 FIFO status
ppt课件
9


6.2.4 UART MODEM控制寄存器UMCONn

UART串口通信—控制LED灯中断法

UART串口通信—控制LED灯中断法

UART串口通信—控制LED灯(中断法)项目说明:1.通过串口来控制LED灯,发送1(十六进制)点亮LED灯(8个LED蓝灯),发送2(十六进制)关闭LED灯(8个LED蓝灯)。

2.通信速率:9600bps(即波特率为9600)3.串口通信采用中断的方法。

此项目练习的目的:(我们应掌握如下知识点)(1)熟悉串口中断相关寄存器的配置。

(2)学会串口中断的使用方法。

完整代码:#include "reg52.h"/*串口初始化:主要涉及寄存器配置*/void UartInit(void) //初始化uart{TMOD = 0X20; //定时器1定时器方式工作模式2,可自动重载的8位计数器常把定时/计数器1 以模式2 作为串行口波特率发生器SCON = 0X50; //串口选择工作模式1使能接收,允许发送,允许接收PCON = 0X00; //8位自动重载,波特率加倍TH1 = 0XFD; //用11.0592MHz波特率9600TL1 = 0XFD;TR1 = 1; //打开中时器/*由于我们采用中断法,所以我们还需要对串口中断相关的寄存器进行配置*/ES = 1;//串口中断EA= 1;//CPU总中断}//写串口中断响应的服务程序:void UartISR(void) interrupt 4{unsigned char TempDat;if (RI)/*查询串口是否接收到一个完整的数据*/{RI = 0;/*清除标志,准备下一次判断*/TempDat = SBUF;/*读取串口数据*/if (1 == TempDat)/*判断串口接收到的数据*/{P1 = 0;/*如果接收到的数据是1,则点亮8个LED蓝灯*/}} else if (2 == TempDat){P1 = 0xff;/*如果接收到的数据是2,则关闭8个LED蓝灯*/}} else{}}}void main(void){UartInit();/*调用串口初始化函数,进行相应的配置,如波特率等*/ while(1)//不用干啥事,一直等待就行。

第5章(3)Uart串行中断

第5章(3)Uart串行中断
查询方法: 串 行 口 初 始 化
主 程 序
三. 串行通信工作方式
中断方法: 串 行 口 初 始 化 中断函数: 主 程 序
结论:不论是查询方式,还是中断 方式都需要软件对 TI 和 RI 清零!
三. 串行通信工作方式
实例3. 验证定时器T0工作于方式3情况下,T1作为串口波特率产 生器。功能实现,间隔1S钟,小灯状态实现反转,初始状态对 应0x55.具体要求如下: 1. T0选择低8位形成的独立定时器;
1 2 3

在串行通信中,数据传输速率的快慢,通过波特率来衡量。
• 波特率为每秒钟发送二进制数码的位数。单位为位/秒,即 b/S。 • 在异步通信中传输速度为360字符/秒,每个字符又包含10位, 则波特率为:360字符/秒 * 10位/字符 = 3600波特
• 在串行通信中,一般数据传输的速率有标准波特率数值, • 例如:110、300、600、1200、2400、4800、9600、19200、 38400波特等。
异步通信数据帧格式
一. 串行通信基本概念
同步通讯数据格式
同步通信——数据以块为单位连续传送。在发送一块数据 时,首先通过同步信号保证发送和接收端设备的同步(该 同步信号一般为硬件实现)然后,连续发送整块数据,发 送过程中,不再需要发送和接收端的同步。

一. 串行通信基本概念
波特率的概念和串行通信的传输
器、一个串行控制寄存器(SCON)。
二.串行口的结构及其涉及的SFR
发送数据过程——CPU将要发送的数据通 过单片机内部数据总线写入发送SBUF,在 内部硬件控制电路下,将发送 SBUF 中数 据通过TXD引脚串行输出。当发送SBUF数 据经过TXD引脚发送完成后,发送SBUF变 为空,在硬件设置上,SCON串行控制寄 存器中的TI位会被置1,通知CPU发送缓冲 区中的数据已经发送完成,CPU可以再发 送下一帧数据。

的UART串口通信详细ppt课件

的UART串口通信详细ppt课件

6.1.2 串行通信接口标准
一、RS-232C接口
RS-232C是EIA(美国电子工业协会)1969年修订 RS-232C标准。RS-232C定义了数据终端设备(DTE)与 数据通信设备(DCE)之间的物理接口标准。
1、机械特性
RS-232C接口规定使用25针连接器,连接器的尺寸及每个 插针的排列位置都有明确的定义。(阳头)
2、有电平偏移 RS-232C总线标准要求收发双方共地。通信距离较大时,
收发双方的地电位差别较大,在信号地上将有比较大的地电流 并产生压降。
3、抗干扰能力差 RS-232C在电平转换时采用单端输入输出,在传输过程
中当干扰和噪声混在正常的信号中。为了提高信噪比,RS232C总线标准不得不采用比较大的电压摆幅。
发送
接收
单工

发送 时间1 接收 接收 时间2 发送
半双工
发送
接收
接收
发送
全双
三、信号的调制与解调
利用调制器(Modulator)把数字信号转换成 模拟信号,然后送到通信线路上去,再由解调器 (Demodulator)把从通信线路上收到的模拟信 号转换成数字信号。由于通信是双向的,调制器 和解调器合并在一个装置中,这就是调制解调器 MODEM。
1
13
1
5
14
25
6
9
2、功能特性
4、过程特性
过程特性规定了信号之间的时序关系,以便正 确地接收和发送数据 。
TXD
M
计 RXD
O
算 RTS 机
D E
DSR
M
电话线
TXD
M
O
RXD 计
D E
RTS 算 机

串口中断UART0

串口中断UART0

关于串口0终端服务程序IRQ_UART0()IIR?U0IIR?答:U0IIR是接收器缓存寄存器U0RBR:接收器缓存寄存器访问时,先要设定U0LCR 的除数锁存访问位(DLAB)为0。

因为,U0DLL 与U0RBR/U0THR 在同一地址上。

DLAB = 1 时,选择U0DLL 和U0DLM (U0DLM 和U0IER 在同一个地址上);DLAB = 0 时,选择U0RBR/U0THR 和U0IER。

U0DLL 和U0DLM:构成一个16 位的除数。

VPB时钟(pclk) 是产生波特率的时钟源,波特率时钟源必须是波特率的16倍,于是有:baud_rate = pclk/(16*设定的除数)UART0 的中断:有4 个中断,分别是:RBR 中断;THRE 中断;Rx 线中断;其中RBR 中断里面包含有2个中断:数据可用RDA中断和接收超时CTI 中断。

FAQ一:1、什么是RDA 中断?当接收的有效数据到达接收FIFO设置寄存器(U0FCR) 中设置的触发点时,RDA中断被激活。

U0FCR[7:6]=00 触发点0(1字节);U0FCR[7:6]=01 触发点1(4字节);U0FCR[7:6]=01 触发点2(8字节);U0FCR[7:6]=01 触发点1(14字节);发生中断后,U0IIR[3:0] 内容为:0100。

如果发生中断后,读一下U0RAR 寄存器,那么就会得到最早到达的数据。

这时,FIFO 中的有效数据小于预定触发点,清零RDA 中断。

该中断的优先级为 2 。

2、什么是CTI 中断?在接收FIFO 中,有效的数据少于触发个数时,但至少有一个时,如果长时间没有数据到达,将触发CTI 中断。

这里所说的“长时间”是指在接收 3.5~4.5 个字节所需要的时间。

发生中断,则U0IIR[3:0] 内容为:1100。

在中断后,若从U0RBR 中读取接收FIFO中的数据,或者有新的数据送入接收FIFO中,这都将清零CTI 中断。

UART串口通讯(中断)

UART串口通讯(中断)


练习
• 通过PC串口助手或其它串口工具发送字符 串 • 将该字符串前面添加响应字符“>”,字符串 后添加结束字符“#”,然后传送回PC • 比如接收到包“This is a test string!”,则返 回字符串“> This is a test string!#” • 该练习主要锻炼中断发送接收程序设计, 以及通过接收超时区分数据包间隔 • 课后编写MODBUS RTU协议的3号从协议 功能,下次课堂测试该功能。
线状态寄存器(UnLSR)为只读寄存器,它提 供UARTn发送和接收模块的状态信息 。
UART线状态寄存器

功能
7
RXFE RxFIF O错误
6
TEMT 发送 器空
5
THRE 发送 保持 寄存 器空
4
BI 间隔 中断
3
FE 帧错 误
2
PE 奇偶 错误
1
OE 溢出 错误
0
RDR 接收 数据 就绪
中断方式UART0初始化
• void UART0_Ini(void) • { uint16 Fdiv; • PINSEL0 = (PINSEL0 & 0x0fffffff0) | 0x00000005; • // 只修改P0.0和P0.1连接到UART0,教材P174表4.53 • U0LCR = 0x83; • // DLAB = 1,允许设置波特率, 教材P288 • Fdiv = (Fpclk / 16) / UART_BPS; // 设置波特率 • U0DLM = Fdiv / 256; //教材P283 • U0DLL = Fdiv % 256; • U0LCR = 0x03; // 8位数据位,1位停止位,无奇偶校验 • U0FCR = 0x0C7; // 使能和复位TX和RX FIFO, Rx触发点为14字节 • U0IER = 0X05; //RBR、Rx线状态 中断使能, THRE中断禁止,P284 • VICIntSelect |= 1<<6; //选择UART0为IRQ • VICIntEnable = 1<<6; //允许UART0中断 • VICVectCntl15 = 0x20 | 6; • VICVectAddr15= (int)UART0_IRQHandler; • }

外部中断-串口通讯

外部中断-串口通讯

硬件查询
自 然 优 先 级 中断源 高 级
INT0 T0 INT1 T1 RX TX
IE0 1
ET0 1 TF0 IT1 1 0 IE1 1 ET1 1 TF1
PT0 1 0
中断入口
EX1 1
PX1 1 0 PT1 1 0 0 自 然 优 先 级 中断源
低 级
RI TI
ES 1 ≥1
PS 1 0
中断入口
同步通信: 在异步通信中,每个字符要用起始位和停止位作 为字符开始和结束的标志,占用了时间;所以在数据 块传递时,为了提高速度,常去掉这些标志,采用同 步传送。由于数据块传递开始要用同步字符来指示, 同时要求由时钟来实现发送端与接收端之间的同步, 故硬件较复杂。
通信方向: 单工传送:在串行通讯中,把通讯接口只能发送或接 收的单向传送方法叫单工传送; 双工传送:而把数据在甲乙两机之间的双向传递,称 之为双工传送。在双工传送方式中又分为半双工传送 和全双工传送。 1 、半双工传送:是两机之间不能同时进行发送和接 收,任一时该,只能发或者只能收信息。 2、全双工传送:是两机之间能同时进行发送和接收 。
串行口的结构
MCS-51单片机内部有一个功能很强的全双工的串行口, 该串行口有四种工作方式,波特率可用软件设置,由片内的 定时器/计数器产生。串行口接收、发送数据均可触发中断系 统,使用十分方便。
MCS-51单片机内部的串行口,有两个物理上独立地接收 、发送缓冲器 SBUF ,可同时发送、接收数据,发送缓冲器只 能写入不能读出,接收缓冲器只能读出不能写入,两个缓冲 器共用一个字节地址(99H)。
中断和中断系统 CPU正在处理某件事的时候,外部发生了另一事件,请求CPU迅 速处理,CPU暂时停止当时的工作,转入处理所发生的事件,处 理结束后,再回到原来的地方,继续原来的工作,这样的过程称 为中断,如图所示。
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

• {int i;
• switch(U0IIR & 0x0f)
•{
• case 0x04:
//RxFIFO达到14字节

for(i=0;i<13;i++) RcvBuf[RcvP++]=U0RBR; break;

case 0x0c:
//接收超时, 表示数据结束

while(U0LSR & 0x01) RcvBuf[RcvP++]=U0RBR;
• VICIntSelect |= 1<<6; //选择UART0为IRQ
• VICIntEnable = 1<<6; //允许UART0中断
• VICVectCntl15 = 0x20 | 6;
• VICVectAddr15= (int)UART0_IRQHandler;
•}
中断服务函数
• void UART0_IRQHandler(void)
0 使能FIFO
• UART发送FIFO缓冲区
• UART0、UART1各含有1个 16字节的发送FIFO缓冲区。
• UnTHR是UARTn发送FIFO 的最高字节。
• UART的发送FIFO是一直使 能的。
UnTHR
发送FIFO
UnTSR
TXD
• UART线状态寄存器——UnLSR
线状态寄存器(UnLSR)为只读寄存器,它提 供UARTn发送和接收模块的状态信息 。
U0IER = 0X07; // THRE中断使能
RcvL=0;} //结束处理
…… //其它主程序处理
•}
• return(0);
•}
练习
• 通过PC串口助手或其它串口工具发送字符 串
• 将该字符串前面添加响应字符“>”,字符串 后添加结束字符“#”,然后传送回PC
• 比如接收到包“This is a test string!”,则返 回字符串“> This is a test string!#”
UART串口通讯
中断方式LPC21XX串口通讯
• UART结构图
CTS DSR
RI DCD DTR RTS
MODEM
Modem控制寄存器 U1MCR
Modem状态寄存器 中断使能寄存器
B 总
UnIER
线
中断标志寄存器 UnIIR
UARTn高速缓存寄存器 UnSCR
UARTn发送单元
UART线状态寄存器

7
6
5
4
3
2
1
0
功能 RXFE TEMT THRE BI FE PE OE RDR
RxFIF 发送 O错误 器空
发送 保持 寄存 器空
间隔 中断
帧错 误
奇偶 错误
溢出 错误
接收 数据 就绪
中断方式UART0初始化
• void UART0_Ini(void)
• { uint16 Fdiv;
发送缓冲寄存器
UnTHR
移位寄存器 UnTSR
UARTn波特率发生器
除数锁存寄存器
UnDLL、UnDLM
UARTn接收单元
接收缓冲寄存器
UnRBR
移位寄存器 UnRSR
FIFO控制寄存器(UnFCR)
UARTn控制寄存器(UnLCR) UARTn状态寄存器(UnLSR)
TxDn RxDn
• UART接收FIFO缓冲区
• PINSEL0 = (PINSEL0 & 0x0fffffff0) | 0x00000005;

// 只修改P0.0和P0.1连接到UART0,教材P174表4.53
• U0LCR = 0x83;

// DLAB = 1,允许设置波特率, 教材P288
• Fdiv = (Fpclk / 16) / UART_BPS; // 设置波特率
• 该练习主要锻炼中断发送接收程序设计, 以及通过接收超时区分数据包间隔
• 课后编写MODBUS RTU协议的3号从协议 功能,下次课堂测试该功能。

RcvL=RcvP; //一帧数据结束标志

RcvP=0; break;
//准备接受下一数据
• case 0x02:
//发送缓冲器空

if(TxdP==TxdL) {U0IER = 0X05;
// THRE中断禁止

TxdL=TxdP=0;}

else {for(i=16;i>0;i--) {if(TxdP==TxdL) break; //发送字符完

else U0THR = TxdBuf[TxdP++];} } break;
• case 0x06:
//状态中断

RcvL=U0LSR; //读状态, 清除错误标志

RcvP=RcvL=TxdP=RxdL=0; break;
• }}
演示程序
• int main(void)
• { uint8 RcvP=0,RcvL=0,TxdP=0,RxdL=0;
• UART0、UART1各含有1 个16字节的接收FIFO缓冲 区。
• 软件设置接收FIFO缓冲区 的触发字节。
UnRSR
RXD
接收FIFO
UnFCR
UnRBR

7
6
功能
Rx触发点设置
00:1字节
01:4字节
10:8字节
11:14字节
UART FIFO控制寄存器
[5 : 3]
2

复位TxFIFO
1 复位RxFIFO
char RcvBuf[256],Txdbuf[256];
• int i=0;
• UART0_Ini();
• while(1)
• { if(RcvL!=0){ //接收到完整数据包
……
• for(i=16;i>0;i--) {if(TxdP==TxdL) break; //发送字符完

else U0THR = TxdBuf[TxdP++];}
• U0DLM = Fdiv / 256;
//教材P283
• U0DLL = Fdiv % 256;
• U0LCR = 0x03; // 8位数据位,1位停止位,无奇偶校验
• U0FCR = 0x0C7; // 使能和复位TX和RX FIFO, Rx触发点为14字节
• U0IER = 0X05; //RBR、Rx线状态 中断使能, THRE中断禁止,P284
相关文档
最新文档