嵌入式技术基础与实践(第2版)第05章_第1页
嵌入式技术基础与实践(第2版)第05章_第2页
嵌入式技术基础与实践(第2版)第05章_第3页
嵌入式技术基础与实践(第2版)第05章_第4页
嵌入式技术基础与实践(第2版)第05章_第5页
已阅读5页,还剩51页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第第5 5章章 串行通信接口串行通信接口SCISCI主要内容主要内容v5.1 5.1 异步串行通信的通用基础知识异步串行通信的通用基础知识v5.2 AW605.2 AW60的的SCISCI模块的编程结构模块的编程结构v5.3 AW605.3 AW60的的SCISCI构件设计与测试构件设计与测试v5.4 AW605.4 AW60的中断源与第一个带有中断的编程的中断源与第一个带有中断的编程实例实例5.1 异步串行通信的通用基础知识异步串行通信的通用基础知识5.1.1 5.1.1 串行通信的基本概念串行通信的基本概念 异步串行通信的格式异步串行通信的格式 SCI(standardSCI(standa

2、rd non-return-zero mark/space data non-return-zero mark/space data format)format) “ “标准不归零传号标准不归零传号/ /空号数据格式空号数据格式”通常采用通常采用NRZNRZ数据格式数据格式. .“不归零不归零”的最初含义是:用正、负电平表示的最初含义是:用正、负电平表示二进制值,不使用零电平。二进制值,不使用零电平。“mark/space”mark/space”即即“传号传号/ /空空号号”分别是表示两种状态的物理名称,逻辑名称记为分别是表示两种状态的物理名称,逻辑名称记为“1/0”1/0”。下图给出了。下图

3、给出了8 8位数据、无校验情况的传送格式位数据、无校验情况的传送格式 串行通信数据格式串行通信数据格式 串行通信的波特率串行通信的波特率 波特率单位是位波特率单位是位/ /秒,记为秒,记为bpsbps。通常情况下,波特率的单位。通常情况下,波特率的单位可以省略。通常使用的波特率有可以省略。通常使用的波特率有300300、600600、900900、12001200、18001800、24002400、48004800、96009600、1920019200、3840038400、5760057600、115200115200、128000128000等等 奇偶校验奇偶校验 字符奇偶校验检查(字

4、符奇偶校验检查(character parity checkingcharacter parity checking)称为垂直)称为垂直冗余检查(冗余检查( vertical redundancy checkingvertical redundancy checking,VRCVRC),它是每个),它是每个字符增加一个额外位使字符中字符增加一个额外位使字符中“1”1”的个数为奇数或偶数。的个数为奇数或偶数。 奇校验:如果字符数据位中奇校验:如果字符数据位中“1”1”的数目是偶数,校验位应为的数目是偶数,校验位应为“1”1”,如果,如果“1”1”的数目是奇数,校验位应为的数目是奇数,校验位应为“

5、0”0”。 偶校验:如果字符数据位中偶校验:如果字符数据位中“1”1”的数目是偶数,则校验位应的数目是偶数,则校验位应为为“0”0”,如果是奇数则为,如果是奇数则为“1”1” 串行通信的传输方式串行通信的传输方式 单工(单工(SimplexSimplex):数据传送是单向的,一端为发送端,另一):数据传送是单向的,一端为发送端,另一端为接收端。这种传输方式中,除了地线之外,只要一根数据线端为接收端。这种传输方式中,除了地线之外,只要一根数据线就可以了。有线广播就是单工的就可以了。有线广播就是单工的 全双工(全双工(Full-duplexFull-duplex):数据传送是双向的,且可以同时接)

6、:数据传送是双向的,且可以同时接收与发送数据。这种传输方式中,除了地线之外,需要两根数据收与发送数据。这种传输方式中,除了地线之外,需要两根数据线,站在任何一端的角度看,一根为发送线,另一根为接收线。线,站在任何一端的角度看,一根为发送线,另一根为接收线。一般情况下,一般情况下,MCUMCU的异步串行通信接口均是全双工的的异步串行通信接口均是全双工的 半双工(半双工(Half-duplexHalf-duplex):数据传送也是双向的,但是在这种):数据传送也是双向的,但是在这种传输方式中,除了地线之外,一般只有一根数据线。任何一个时传输方式中,除了地线之外,一般只有一根数据线。任何一个时刻,只

7、能由一方发送数据,另一方接收数据,不能同时收发。在刻,只能由一方发送数据,另一方接收数据,不能同时收发。在freescalefreescale的的HCS08HCS08系列系列MCUMCU中,监控模式的通信就采用这种方式中,监控模式的通信就采用这种方式5.1.2 RS-232RS-232总线标准总线标准 MCU MCU引脚一般输入引脚一般输入/ /输出使用输出使用TTLTTL电平,而电平,而TTLTTL电平的电平的“1”1”和和“0”0”的特征电压分别为的特征电压分别为2.4V2.4V和和0.4V0.4V,适用于板内数据传输。,适用于板内数据传输。为了使信号传输得更远,美国电子工业协会为了使信号

8、传输得更远,美国电子工业协会EIA(ElectronicEIA(Electronic Industry Association)Industry Association)制订了串行物理接口标准制订了串行物理接口标准RS-232CRS-232C。RS-232CRS-232C采用负逻辑,采用负逻辑,-3V-3V-15V-15V为逻辑为逻辑“1”1”,+3V+3V+15V+15V为逻为逻辑辑“0”0”。RS-232CRS-232C最大的传输距离是最大的传输距离是30m30m,通信速率一般低于,通信速率一般低于20Kbps20Kbps。 RS-232 RS-232接口,简称接口,简称“串口串口”,它主

9、要用于连接具有同,它主要用于连接具有同样接口的室内设备。目前几乎所有计算机上的串行口都是样接口的室内设备。目前几乎所有计算机上的串行口都是9 9芯接芯接口。下面给出了口。下面给出了9 9芯串行接口的排列位置,相应引脚含义见下表。芯串行接口的排列位置,相应引脚含义见下表。上图为上图为9 9芯串行接口排列芯串行接口排列引脚号引脚号功能功能引脚号引脚号功能功能1 1接收线信号检测接收线信号检测( (载波检载波检测测DCD)DCD)6 6数据通信设备准备就数据通信设备准备就绪绪(DSR)(DSR)2 2接收数据线接收数据线(RXD)(RXD)7 7请求发送请求发送(RTS)(RTS)3 3发送数据线发

10、送数据线(TXD)(TXD)8 8允许发送允许发送(CTS)(CTS)4 4数据终端准备就绪数据终端准备就绪(DTR)(DTR)9 9振铃指示振铃指示5 5信号地信号地(SG)(SG)9 9芯串行接口引脚含义表芯串行接口引脚含义表5.1.3 TTL5.1.3 TTL电平到电平到RS-232RS-232电平转换电路电平转换电路 具有具有SCISCI接口的接口的MCUMCU,一般具有发送引脚,一般具有发送引脚( (TxDTxD) )与接收引脚与接收引脚( (RxDRxD) ),不同公司或不同系列的,不同公司或不同系列的MCUMCU,使用的引脚缩写名可能不,使用的引脚缩写名可能不一致,但含义相同。一

11、致,但含义相同。SCISCI的外围硬件电路,主要目的是将的外围硬件电路,主要目的是将MCUMCU的的发送引脚发送引脚TxDTxD与接收引脚与接收引脚RxDRxD的的TTLTTL电平,通过电平,通过RS-232RS-232电平转换电平转换芯片转换为芯片转换为RS-232RS-232电平。下图给出一个基本电平。下图给出一个基本SCISCI电平转换电路电平转换电路及芯片及芯片MAX232MAX232引脚图引脚图MAX232MAX232引脚引脚 串行通信接口电平转换电路串行通信接口电平转换电路uMAX232MAX232芯片进行电平转换基本原理是:芯片进行电平转换基本原理是:l发送过程:发送过程:MCU

12、MCU的的TXDTXD(TTLTTL电平)经过电平)经过MAX232MAX232的的1111脚脚(T1IN)(T1IN)送到送到MAX232MAX232内部,在内部内部,在内部TTLTTL电平被电平被“提升提升”为为232232电平,通过电平,通过1414脚脚(T1OUT)(T1OUT)发送出去发送出去l接收过程:外部接收过程:外部232232电平经过电平经过MAX232MAX232的的1313脚(脚(R1INR1IN)进入)进入到到MAX232MAX232的内部,在内部的内部,在内部232232电平被电平被“降低降低”为为TTLTTL电平,电平,经过经过1212脚(脚(R1OUTR1OUT)

13、送到)送到MCUMCU的的RXDRXD,进入,进入MCUMCU内内组别组别TTLTTL电平引脚电平引脚方向方向典型接口典型接口232232电平引脚电平引脚方向方向典型接口典型接口1 11111(T1INT1IN)1212(R1OUTR1OUT)输入输入输出输出接接MCUMCU的的TXDTXD接接MCUMCU的的RXDRXD13131414输入输入输出输出接到接到9 9芯接口的芯接口的2 2脚脚RXDRXD接到接到9 9芯接口的芯接口的3 3脚脚TXDTXD2 21010(T2INT2IN)9 9(R2OUTR2OUT)输入输入输出输出接接MCUMCU的的TXDTXD接接MCUMCU的的RXDR

14、XD8 87 7输入输入输出输出接到接到9 9芯接口的芯接口的2 2脚脚RXDRXD接到接到9 9芯接口的芯接口的3 3脚脚TXDTXDMAX232MAX232芯片输入输出引脚分类与基本接法芯片输入输出引脚分类与基本接法5.1.4 5.1.4 串行通信编程模型串行通信编程模型 从基本原理角度看,串行通信接口从基本原理角度看,串行通信接口SCISCI的主要功能是:接收的主要功能是:接收时,把外部的单线输入的数据变成一个字节的并行数据送入时,把外部的单线输入的数据变成一个字节的并行数据送入MCUMCU内部;发送时,把需要发送的一个字节的并行数据转换为单线内部;发送时,把需要发送的一个字节的并行数据

15、转换为单线输出输出接受引脚接受引脚RxD 发送引脚发送引脚TxD发送移位寄存发送移位寄存器器接受移位寄存器接受移位寄存器SCISCI数据寄存器数据寄存器MCUMCU内部总线内部总线SCI控制寄控制寄存器存器SCISCI状态状态寄存器寄存器SCI波特率波特率寄存器寄存器Slide 11概况 MC9S08AW60系列包含两个独立的串行通信接口(SCI,Serial Communication Interface)模块,分别和端口E、端口C的管脚复用。每个SCI模块特性 具有的独立的可编程波特率生成器 支持低于115.2kbaud的多种标准波特率 采用双缓冲结构 接收器和发送器还具有硬件奇偶校验、接

16、收唤醒和双缓冲。 可编程的8位或9位字符长度。可选的13位暂停符。支持多种中断驱动或轮询操作 SCI还具有多种工作模式:8位和9位数据模式、Stop模式、回路模式和单线模式等5.2 5.2 AW60AW60的的SCISCI模块的编程结构模块的编程结构v内部结构内部结构波特率生成器Slide 12SCI波特率=BUSCLK/(SBR12:0 x16)其中,SBR12:0由SCI波特率寄存器SCIxBDH/L设定5.2 5.2 AW60AW60的的SCISCI模块的编程结构模块的编程结构v内部结构 发送器Slide 13通过设置SCIxC2中的TE位为1来允许发送器; 通过写SCI数据寄存器SCI

17、xD可以把数据存储到发送数据缓冲器中。5.2 5.2 AW60AW60的的SCISCI模块的编程结构模块的编程结构v内部结构内部结构接收器Slide 14通过设置SCIxC2中的RE位为1来允许接收器; RDRF接收数据满标志。5.2 5.2 AW60AW60的的SCISCI模块的编程结构模块的编程结构5.2 AW60AW60的的SCISCI模块的编程结构模块的编程结构 从程序员角度看,涉及从程序员角度看,涉及SCISCI的有的有8 8个个8 8位寄存器,其中位寄存器,其中2 2个波特个波特率寄存器,率寄存器,1 1个数据寄存器,个数据寄存器,3 3个控制寄存器,个控制寄存器,2 2个状态寄存

18、器,个状态寄存器,只要理解和掌握这只要理解和掌握这8 8个寄存器的用法,就可以进行个寄存器的用法,就可以进行SCISCI编程编程寄存器寄存器名称名称缩写缩写地址地址访问访问权限权限基本功基本功能能波特率寄存器SCI1BDH(SCI2BDH)0 x0038(0 x0040)读/写设置波特率SCI1BDL(SCI2BDL)0 x0039(0 x0041)数据寄存器SCI1D(SCI2D)0 x003F(0 x0047)收发数据控制寄存器SCI1C1(SCI2C1)0 x003A(0 x0042)读/写设置传输格式,中断使能SCI1C2(SCI2C2)0 x003B(0 x0043)SCI1C3(S

19、CI2C3)0 x003E(0 x0046)读/写状态寄存器SCI1S1(SCI2S1)0 x003C(0 x0044) 只读中断标志,发送与接收状态SCI1S2(SCI2S2)0 x003D(0 x0045)AW60AW60的的SCISCI模块寄存器简况模块寄存器简况 SCISCI波特率计算公式与波特率计算公式与SCISCI波特率寄存器波特率寄存器l SCISCI波特率波特率= f= fBUSCLKBUSCLK/(16/(16BR)BR),其中,其中f fBUSCLKBUSCLK为内部总线频率为内部总线频率 SCISCI数据寄存器数据寄存器 SCISCI控制寄存器控制寄存器l SCI SCI

20、 控制寄存器控制寄存器1 1(SCIxC1SCIxC1)l SCI SCI 控制寄存器控制寄存器2 2(SCIxC2SCIxC2)l SCI SCI 控制寄存器控制寄存器3 3(SCIxC3SCIxC3) SCISCI状态寄存器状态寄存器l SCISCI状态寄存器状态寄存器1 1(SCIxS1SCIxS1)l SCISCI状态寄存器状态寄存器2 2(SCIxS2SCIxS2)SCI波特率寄存器(SCIxBDH,SCIxBDL) Slide 179.3 9.3 内部寄存器内部寄存器SCI控制寄存器1(SCIxC1) Slide 189.3 9.3 内部寄存器内部寄存器SCI控制寄存器1(SCIx

21、C1) Slide 199.3 9.3 内部寄存器内部寄存器SCI控制寄存器2(SCIxC2) Slide 209.3 9.3 内部寄存器内部寄存器SCI控制寄存器2(SCIxC2) Slide 219.3 9.3 内部寄存器内部寄存器SCI控制寄存器3(SCIxC3) Slide 229.3 9.3 内部寄存器内部寄存器SCI控制寄存器3(SCIxC3) Slide 239.3 9.3 内部寄存器内部寄存器SCI状态寄存器1(SCIxS1) Slide 249.3 9.3 内部寄存器内部寄存器SCI状态寄存器1(SCIxS1) Slide 259.3 9.3 内部寄存器内部寄存器SCI状态寄

22、存器2(SCIxS2) Slide 269.3 9.3 内部寄存器内部寄存器SCI数据寄存器(SCIxD)此寄存器实际上是两个独立的寄存器:SCI接收数据寄存器和SCI发送数据寄存器。读操作返回只读型接收缓冲器中的内容,而写操作把数据写入只写型发送数据缓冲器中。对此寄存器的读写操作还和SCI状态标志位的自动清零机制相关联。 Slide 279.3 9.3 内部寄存器内部寄存器9.4 SCI9.4 SCI应用举例应用举例vSCISCI使用设置使用设置 根据通信双方的波特率,设定SCI波特率寄存器SCIxBD中分频因子。需要先写SCIxBDH,再写SCIxBDL。 更新SCI控制寄存器1(SCIx

23、C1),设定环路模式、8位还是9位数据位、是否允许硬件奇偶校验等,如无特别需求,可取其缺省值而不做设定。 更新SCI控制寄存器2(SCIxC2)来允许发送、接收,以及是否允许发送中断和接收中断等。 如需要,更新SCI控制寄存器3(SCIxC3),再对发送数据是否取反、是否允许错误中断等进行设定。Slide 289.4 SCI9.4 SCI应用举例应用举例vSCISCI使用设置使用设置 允许SCI发送之后,通过读SCI状态寄存器1(SCIxS1)判断其中的TDRE位是否为1来判断发送数据寄存器是否为空,当发送数据寄存器为空时,可以写发送数据到发送数据寄存器SCIxD。 写发送数据到SCIxD之后

24、,通过查询或中断方式判断SCIxS1中的发送完成标志位TC是否为1来判断当前数据是否发送完成,当前字符发送完成后,可以回到上一步继续下一个数据的发送。 允许SCI接收之后,通过查询或中断方式判断SCIxS1中的接收数据寄存器满标志位RDRF是否为1来判断是否接收到了新数据,当接收到新数据时,读寄存器SCIxD来保存新数据,之后还要通过清零RDRF的操作清零RDRF标志位。Slide 295.3 AW60AW60的的SCISCI构件设计与测试构件设计与测试5.3.1 SCI5.3.1 SCI构件设计概述构件设计概述 以以SCISCI的初始化、接收和发送三种基本操作为例,来说明实现构件的初始化、接

25、收和发送三种基本操作为例,来说明实现构件化的全过程化的全过程 实现构件化编程的实现构件化编程的SCISCI软件模块应当具有以下几个特点:软件模块应当具有以下几个特点:lSCISCI模块是最底层的构件,它主要向上提供三种服务,分模块是最底层的构件,它主要向上提供三种服务,分别是别是SCISCI模块的初始化、接收单个字节和发送单个字节,模块的初始化、接收单个字节和发送单个字节,向下则直接访问模块寄存器,实现对硬件的直接操作。另向下则直接访问模块寄存器,实现对硬件的直接操作。另外,从现实使用角度出发,它还需要封装接收外,从现实使用角度出发,它还需要封装接收N N个字节和个字节和发送发送N N个字节的

26、子功能函数个字节的子功能函数lSCISCI模块在软件上对应模块在软件上对应1 1个个SCI.cSCI.c程序源代码文件和程序源代码文件和1 1个个SCI.hSCI.h头文件,当需要对它进行移植时,大多数情况下只头文件,当需要对它进行移植时,大多数情况下只需简单拷贝这两个文件即可,无需对源代码文件和头文件需简单拷贝这两个文件即可,无需对源代码文件和头文件进行修改,只有当实施不同芯片之间的移植时,才需要修进行修改,只有当实施不同芯片之间的移植时,才需要修改头文件中与硬件相关的宏定义改头文件中与硬件相关的宏定义l上层构件或软件在使用该构件时,严格禁止通过全局变量上层构件或软件在使用该构件时,严格禁止

27、通过全局变量来传递参数,所有的数据传递都直接通过函数的形式参数来传递参数,所有的数据传递都直接通过函数的形式参数来接收来接收 SCISCI初始化:初始化:lvoid SCIInit(uint8 SCINo, uint8 sysclk, uint16 baud) 通过其中一个串口发送一个字节:通过其中一个串口发送一个字节:lvoid SCISend1(uint8 SCINo, uint8 ch) 通过其中一个串口接收单个字节:通过其中一个串口接收单个字节:luint8 SCIRe1(uint8 SCINo, uint8 *p) 通过其中一个串口发送通过其中一个串口发送N N个字节:个字节:lvo

28、id SCISendN(uint8 SCINo, uint8 n, uint8 ch) 通过其中一个串口接收通过其中一个串口接收N N个字节:个字节:luint8 SCIReN(uint8 SCINo, uint8 n, uint8 ch)5.3.2 SCI5.3.2 SCI构件的头文件构件的头文件SCI.hSCI.h头文件头文件SCI.hSCI.h中的内容可分为两个主要的部分,中的内容可分为两个主要的部分,它们分别是它们分别是5 5个函数原型的声明和外设模块寄存器相个函数原型的声明和外设模块寄存器相关信息的定义。前者给出了本关信息的定义。前者给出了本SCISCI构件对上层构件或构件对上层构件

29、或软件所提供的接口函数,而后者则指明了本软件所提供的接口函数,而后者则指明了本“元构元构件件”与具体硬件相关的信息与具体硬件相关的信息5.3.3 SCI5.3.3 SCI构件的构件的C C语言源程序文件语言源程序文件SCI.cSCI.cSCISCI构件的初始化功能函数:构件的初始化功能函数:SCIInitSCIInitSCISCI构件单字节发送功能函数:构件单字节发送功能函数:SCISend1SCISend1SCISCI构件的单字节接收功能函数:构件的单字节接收功能函数:SCIRe1SCIRe1SCISCI构件的多字节发送功能函数:构件的多字节发送功能函数:SCISendNSCISendNSC

30、ISCI构件的多字节接收功能函数:构件的多字节接收功能函数:SCIReNSCIReNSCISCI构件的字符串接收功能函数:构件的字符串接收功能函数:SCISendStringSCISendString5.3.4 SCI5.3.4 SCI构件的测试工程构件的测试工程 SCI1SCI1模块首先向模块首先向PCPC机发送字符串,然后等待接收机发送字符串,然后等待接收PCPC机从串机从串口发送来的数据,若成功接收到口发送来的数据,若成功接收到1 1个数据,则立即将该数据个数据,则立即将该数据回发给回发给PCPC机,随后继续等待接收机,随后继续等待接收1 1个数据并回发,如此循环个数据并回发,如此循环串

31、口调试工具软件界面串口调试工具软件界面串行通信收发测试软件界面串行通信收发测试软件界面5.4 AW605.4 AW60的中断源与第一个带有中断的编程实例的中断源与第一个带有中断的编程实例5.4.1 5.4.1 中断处理的相关基本概念中断处理的相关基本概念 中断与异常的含义中断与异常的含义 异常是异常是CPUCPU强行从正常的程序执行切换到由强行从正常的程序执行切换到由某些内部或外部条某些内部或外部条 件所要求的处理任务件所要求的处理任务上,这些任务是上,这些任务是优于优于CPUCPU正在执行任务正在执行任务的。的。 外部条件:外设、硬件断点请求、访问错误和复位等;外部条件:外设、硬件断点请求、

32、访问错误和复位等; 内部条件:指令不对界错误、违反特权级和跟踪内部条件:指令不对界错误、违反特权级和跟踪 通常将硬件复位视作一种具有最高优先级的异常;通常将硬件复位视作一种具有最高优先级的异常; 来自来自CPUCPU外围设备的强行任务切换请求外围设备的强行任务切换请求谓之谓之中断中断 中断服务例程中断服务例程ISRISR ISR(InterruptISR(Interrupt Service Routine): Service Routine):即中断服务子程序即中断服务子程序5.4 AW605.4 AW60的中断源与第一个带有中断的编程实例的中断源与第一个带有中断的编程实例5.4.1 5.4.

33、1 中断处理的相关基本概念中断处理的相关基本概念 中断源与中断向量表中断源与中断向量表 中断源:引起中断源:引起CPUCPU产生中断的外部器件;产生中断的外部器件; 中断向量表:通常中断向量表:通常CPUCPU有多个中断源,每个中断源对应有多个中断源,每个中断源对应 一个一个ISR,ISR,将这些将这些ISRISR的开始地址的开始地址( (中断向量地址中断向量地址) )放在放在 一段连续的存储区域内,此存储区称之中断向量表一段连续的存储区域内,此存储区称之中断向量表 中断向量表实际是一个指针数组,内容是中断向量表实际是一个指针数组,内容是ISRISR的地址的地址 中断优先级中断优先级5.4 A

34、W605.4 AW60的中断源与第一个带有中断的编程实例的中断源与第一个带有中断的编程实例5.4.1 5.4.1 中断处理的相关基本概念中断处理的相关基本概念 可屏蔽中断与不可屏蔽中断可屏蔽中断与不可屏蔽中断 根据中断是否可以通过程序设置为响应与否。根据中断是否可以通过程序设置为响应与否。 中断处理的一般过程中断处理的一般过程 1 1、保存现场、保存现场:CPU:CPU内部寄存器的内容保存堆栈中;内部寄存器的内容保存堆栈中; 2 2、获取向量号并获得中断向量地址;、获取向量号并获得中断向量地址; 3 3、根据中断向量地址访问向量表,从向量表中取得、根据中断向量地址访问向量表,从向量表中取得IS

35、RISR的首地的首地 址,装入址,装入PC;PC; 4 4、执行、执行ISRISR; 5 5、中断返回:从堆栈中恢复、中断返回:从堆栈中恢复CPUCPU内部寄存器的内容。内部寄存器的内容。5.4.2 S08CPU5.4.2 S08CPU的中断实现过程的中断实现过程 堆栈的使用堆栈的使用 响应中断时响应中断时CPUCPU自动保存自动保存PCPC、 X X、A A、CCRCCR至堆栈中至堆栈中 S08CPUS08CPU的中断过程的详细说明的中断过程的详细说明 中断的关闭与开启方法中断的关闭与开启方法 中断的处理过程一般为:中断的处理过程一般为: 关中断、保护现场、关中断、保护现场、 执行中断服务程

36、序、执行中断服务程序、 恢复现场、开中断等恢复现场、开中断等中断过程中断过程CPUCPU中寄存器进出栈情况中寄存器进出栈情况5.4.2 S08CPU5.4.2 S08CPU的中断实现过程的中断实现过程 S08CPUS08CPU的中断过程的详细说明的中断过程的详细说明当CPU接收到一个有效的中断请求之后,先执行完当前正在执行的指令,然后按照下面顺序自动响应中断: 保存CPU寄存器到堆栈中,注意对H寄存器的保护; 设置CCR中的I位为1,屏蔽将来的中断; 读取正在请求中的优先级最高的中断源的中断向量,从相应的中断向量地址取出中断向量送到PC; 执行ISR,直至执行RTI返回,依次从堆栈中恢复CPU

37、寄存器的内容,返回原来的断点处继续执行 若允许中断嵌套,则在ISR中可用CLI指令开中 5.4.3 AW605.4.3 AW60的中断源与中断向量表的中断源与中断向量表 AW60 AW60有有2626个中断源,按优先级从高到低的顺序分别是:个中断源,按优先级从高到低的顺序分别是:复位中断(复位中断(1 1个)、个)、SWISWI指令中断(指令中断(1 1个)、个)、 引脚中断(引脚中断(1 1个)、个)、低电压检测中断(低电压检测中断(1 1个)、个)、ICGICG中断(中断(1 1个)、定时器中断(个)、定时器中断(1010个)、个)、SPISPI中断(中断(1 1个)、个)、SCISCI中

38、断(中断(6 6个)、键盘输入中断(个)、键盘输入中断(1 1个)、个)、ADCADC转换完成中断(转换完成中断(1 1个)、个)、I2CI2C中断(中断(1 1个)和实时中个)和实时中断(断(1 1个)。个)。2626个中断源只有个中断源只有1818个中断向量,有的是几个中断个中断向量,有的是几个中断源使用同一个中断向量源使用同一个中断向量Slide 415.4.3 AW605.4.3 AW60的中断源与中断向量表的中断源与中断向量表5.4.4 AW605.4.4 AW60的中断编程方法的中断编程方法 CWCW环境下使用环境下使用AW60AW60芯片中断的步骤是:芯片中断的步骤是:l 在在m

39、ain.cmain.c中,依照中,依照“关总中断关总中断开模块中断开模块中断开总中断开总中断”的顺的顺序打开模块中断;序打开模块中断;l 在在isr.cisr.c文件中,编写中断服务程序,修改中断向量表文件中,编写中断服务程序,修改中断向量表 为了方便代码移植,在为了方便代码移植,在Includes.hIncludes.h文件中做了如下定义:文件中做了如下定义:l #define #define EnableInterruptsEnableInterrupts() () asm(CLIasm(CLI) /) /开放总中断开放总中断l #define #define DisableInterru

40、ptsDisableInterrupts() () asm(SEIasm(SEI) /) /禁止总中断禁止总中断 AW60AW60的中断编程的可概括为下述的中断编程的可概括为下述3 3个步骤:个步骤:l 新建(或者复制)一个新建(或者复制)一个isr.cisr.c文件,并加入工程中文件,并加入工程中l 定义中断向量表(复制定义中断向量表(复制isr.cisr.c的应修改中断向量表)的应修改中断向量表)l 定义定义ISRISR并在中断向量表中填入相应并在中断向量表中填入相应ISRISR的名称的名称5.4.5 AW605.4.5 AW60的中断编程示例的中断编程示例 以以SCI1SCI1接收中断为

41、例,实现以下功能:主程序每隔接收中断为例,实现以下功能:主程序每隔1 1秒秒让让SCI1SCI1模块向模块向PCPC机发送用于握手的字符串机发送用于握手的字符串“Hello! “Hello! World!”World!”;同时,串口等待接收从;同时,串口等待接收从PCPC机发来的数据,一旦接机发来的数据,一旦接到数据,马上将该数据回发给到数据,马上将该数据回发给PCPC机。串口接收程序使用中断机。串口接收程序使用中断来实现,中断处理程序执行完毕后,又回到主程序,继续每来实现,中断处理程序执行完毕后,又回到主程序,继续每隔隔1 1秒钟向秒钟向PCPC机发送一遍机发送一遍“Hello! World

42、!”“Hello! World!”4.4 4.4 外部引脚中断外部引脚中断( (IRQIRQ) )v中断优先中断优先4.4 4.4 外部引脚中断外部引脚中断( (IRQIRQ) )vIRQIRQ外部引脚中断外部引脚中断 出现正/负脉冲 发生IRQ中断vIRQIRQ内部结构内部结构 IRQ中断由外部中断状态和控制寄存器IRQSC管理: IRQPE位允许/禁止IRQ管脚功能:1=允许;0禁止 IRQEDG位选定边沿极性 0下降沿或下降沿和低电平触发 1上降沿或上升沿和高电平触发Slide 463.6 3.6 外部管脚中断外部管脚中断(IRQ)(IRQ)vIRQIRQ内部结构内部结构 IRQ中断由外

43、部中断状态和控制寄存器IRQSC管理: IRQMOD设定检测模式 0仅仅在下降沿或上升沿产生IRQ事件 1在下降沿和低点平或者在上升沿和高电平产生IRQ事件 IRQIE允许/禁止IRQ中断:1=允许;0禁止Slide 473.6 3.6 外部管脚中断外部管脚中断(IRQ)(IRQ)vIRQIRQ内部结构内部结构 IRQ中断由外部中断状态和控制寄存器IRQSC管理: IRQF 只读标志位,指示是否有IRQ事件发生:0无;1有 IRQACK 只写位,向IRQACK位写1以清IRQF位为0,写0既无意义也无效果,读总返回0。Slide 483.6 3.6 外部管脚中断外部管脚中断(IRQ)(IRQ)

44、vIRQIRQ寄存器寄存器 Slide 493.6 3.6 外部管脚中断外部管脚中断(IRQ)(IRQ)4.4 4.4 外部引脚中断外部引脚中断( (IRQIRQ) )vIRQIRQ内部结构内部结构允许允许/禁止禁止IRQ引脚功能引脚功能1允许,允许,0禁止禁止选定边缘极性选定边缘极性1上升沿或高电平,上升沿或高电平,0下降沿或低电平下降沿或低电平设定检测模式设定检测模式1下降沿和低或上升沿和高下降沿和低或上升沿和高0仅在下降沿或上升沿仅在下降沿或上升沿允许允许/禁止禁止IRQ1允许,允许,0禁止禁止只写位,写只写位,写1清清IRQF为为0,写,写0无意义无意义只读标志,指示是否只读标志,指示

45、是否IRQ事件发生事件发生4.4 4.4 外部引脚中断外部引脚中断( (IRQIRQ) )v应用举例一应用举例一 当触发IRQ引脚时,点亮或熄灭一个LED并使BEEPER关闭或/发出声音 采用下降沿触发代码分析代码分析#include /* for EnableInterrupts macro */#include derivative.h /* include peripheral declarations */触发引脚触发引脚IRQ,点亮或熄灭,点亮或熄灭D5/=/函数名函数名:Init_IRQ /功能功能:初始化外部中断引脚初始化外部中断引脚 /=void Init_IRQ(void)I

46、RQSC_IRQMOD=0; /0:边沿方式边沿方式;1:电平方式电平方式IRQSC_IRQIE=1; /0:中断使能;:中断使能;1:禁止中断:禁止中断IRQSC_IRQPE=1; /1:中断引脚使能;:中断引脚使能;0:普通:普通IOIRQSC_IRQEDG=0; /下降沿或低电平信号有效下降沿或低电平信号有效void main(void)Init_IRQ(); EnableInterrupts; /* enable interrupts */ /* include your code here */ PTDDD_PTDDD5=1; PTBDD=0 xFF; for(;) _RESET_W

47、ATCHDOG(); /* feeds the dog */ /* loop forever */ /* please make sure that you never leave main */Interrupt 2 void IRQ_ISR(void) if(IRQSC & 0 x08)=0 x08) IRQSC_IRQACK=1;/清除外部中断标志位清除外部中断标志位PTDD_PTDD5=PTDD_PTDD5;/点亮或熄灭点亮或熄灭D5 PTBD_PTBD6= PTBD_PTBD6 4.4 4.4 外部引脚中断外部引脚中断( (IRQIRQ) )v应用举例二应用举例二 主程序为流水灯 当

48、触发IRQ引脚时,使BEEPER发出3m时间的声音 采用下降沿触发#include /* for EnableInterrupts macro */#include derivative.h /* include peripheral declarations */void DelayMS(uint x)uint t;while(x-) for(t=0;t300;t+);void Init_IRQ(void)IRQSC_IRQMOD=0;/0:边沿方式边沿方式;1:电平方式电平方式IRQSC_IRQIE=1;/0:中断使能;:中断使能;1:禁止中断:禁止中断IRQSC_IRQPE=1;/1:中断引脚使能;:中断引脚使能;0:普通:普通IOIRQSC_IRQEDG=0;/下降沿或低电平信号有效下降

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论