第九周 CC2530中断控制器原理(大课)_第1页
第九周 CC2530中断控制器原理(大课)_第2页
第九周 CC2530中断控制器原理(大课)_第3页
第九周 CC2530中断控制器原理(大课)_第4页
第九周 CC2530中断控制器原理(大课)_第5页
已阅读5页,还剩31页未读 继续免费阅读

下载本文档

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

文档简介

1、单片机原理与应用单片机原理与应用2高速时钟的设置:高速时钟的设置:如设置成如设置成32M时钟步骤:时钟步骤:1.选择外部32MHz晶振作为主时钟源;2.等待32MHz晶振稳定 3.当前系统时钟不分频如设置成如设置成8M时钟步骤:时钟步骤:将上述第3步中修改成:当前系统时钟4分频串口控制器初始化编程:串口控制器初始化编程:1.设置为设置为32M时钟;时钟;2.选择串口外设备用位置(位置选择串口外设备用位置(位置1或者位置或者位置2););3.初始化初始化I/O口为外部设备;口为外部设备;4.设置中断优先级;设置中断优先级;5.选择同步异步通信方式:选择同步异步通信方式:UART方式方式6.设置波

2、特率(查表)设置波特率(查表) 串口发送:串口发送:查询状态位;或者通过中断标志位查询状态位;或者通过中断标志位 串口接收:串口接收:查询状态位;或者通过中断标志位查询状态位;或者通过中断标志位3本周教学主要内容本周教学主要内容 中断概述 CC2530中断原理(难点) CC2530中断编程(重点)4教学目标教学目标 理解中断的概念、一般处理步骤;理解中断的概念、一般处理步骤; 掌握掌握CC2530CC2530中断原理中断原理; ; 掌握掌握CC2530CC2530中断编程步骤。中断编程步骤。5CPU与外部设备之间数据传送方式主要有以下几种:(1)无条件传送(适用设备类型有限):适用于总是准备好

3、的外设)无条件传送(适用设备类型有限):适用于总是准备好的外设,如我如我们已经们已经通过实验使用了无条件传送方式点亮发光二极管通过实验使用了无条件传送方式点亮发光二极管;(2)查询方式(浪费)查询方式(浪费cpu资源):传送数据之前需要先查询设备的状态资源):传送数据之前需要先查询设备的状态,状态满足要求则传送,否则等待,如我们用查询方式使用串口;,状态满足要求则传送,否则等待,如我们用查询方式使用串口;(3)中断方式:当外设满足传送数据状态时(如串口控制器的发送缓冲)中断方式:当外设满足传送数据状态时(如串口控制器的发送缓冲区空或接收缓冲区慢)会向区空或接收缓冲区慢)会向cpu发出请求信号,

4、强迫发出请求信号,强迫cpu暂停暂停“手头的工作手头的工作”,转去处理该外设,完毕后再继续原来的,转去处理该外设,完毕后再继续原来的“工作工作”;(4)直接存储器()直接存储器(DMA)存取(有兴趣的可以自己可查阅相关资料)存取(有兴趣的可以自己可查阅相关资料)已经实现已经实现已经实现已经实现6 CPU在硬件上对中断的支持:在硬件上对中断的支持:(1)具有中断请求输入信号管脚;)具有中断请求输入信号管脚;(2)每执行完一条指令都会检测是否有中断请求信号;)每执行完一条指令都会检测是否有中断请求信号;主主程程序序断点断点继继续续执执行行主主程程序序响应中断请求响应中断请求返回主程序返回主程序中中

5、断断服服务务程程序序(1 1)中断服务程序:中断服务程序:CPUCPU响应中断后,转去执行相应响应中断后,转去执行相应的处理程序,该处理程序通常称之为中断服务程序。的处理程序,该处理程序通常称之为中断服务程序。(2 2)主程序:主程序:原来正常运行的程序称为主程序。原来正常运行的程序称为主程序。(3 3)断点:断点:主程序被断开的位置(或地址)称为断点。主程序被断开的位置(或地址)称为断点。(4 4)中断源:中断源:引起中断的原因,或能发出中断申请的引起中断的原因,或能发出中断申请的来源,称为中断源。来源,称为中断源。(5 5)中断请求:中断请求:中断源要求服务的请求称为中断请求中断源要求服务

6、的请求称为中断请求(或中断申请)。(或中断申请)。 7中断响应的一般过程中断响应的一般过程(1)中断请求)中断请求 当外部设备就绪时会产生一个中断请求信号加到当外部设备就绪时会产生一个中断请求信号加到CPU的中断请求输入端的中断请求输入端,即对,即对CPU提出中断请求。对于中断请求信号,需注意两个问题:提出中断请求。对于中断请求信号,需注意两个问题:有效的中断请求电平保持到被有效的中断请求电平保持到被cpu发现;发现;当当cpu响应请求后应当有效的请求电平去掉;响应请求后应当有效的请求电平去掉;在使用中断控制器时(大多数如此),在使用中断控制器时(大多数如此),cpu的中断响应信号就能做到这的

7、中断响应信号就能做到这一点,若自己构成中断请求硬件时,需要注意以上两个问题;一点,若自己构成中断请求硬件时,需要注意以上两个问题;(2)中断响应)中断响应CPU在每条指令执行的最后一个时钟周期监测中断请求输入管在每条指令执行的最后一个时钟周期监测中断请求输入管脚有无请求发生,脚有无请求发生, 而后决定是否对它做出响应。而后决定是否对它做出响应。(3)断点保护)断点保护为了中断处理完毕后为了能接着处理被中断的事情,为了中断处理完毕后为了能接着处理被中断的事情,CPU硬件硬件需要对硬件现场进行保护。需要对硬件现场进行保护。8(4)中断源识别)中断源识别 当有多个中断源时,一旦中断请求发生,当有多个

8、中断源时,一旦中断请求发生,cpu须判断是哪须判断是哪一个中断源提出请求。一般有两种确定中断源的方法:一个中断源提出请求。一般有两种确定中断源的方法:a:软件查询;软件查询;b:中断向量法;中断向量法;(大多数如此)(大多数如此) 利用不同的中断向量,从而确定是来自不同的中断源。利用不同的中断向量,从而确定是来自不同的中断源。(5)中断服务)中断服务 程序员所编写的中断处理程序统称中断服务程序,这也是程序员所编写的中断处理程序统称中断服务程序,这也是中断处理需要程序员所做的主要工作;中断处理需要程序员所做的主要工作;(6)断点恢复)断点恢复(7)中断返回)中断返回9 中断由中断源引起,中断源由

9、相应的寄存器来控制。中断由中断源引起,中断源由相应的寄存器来控制。当需要使用中断时,需配置相应的中断寄存器来开启当需要使用中断时,需配置相应的中断寄存器来开启中断,当中断发生时将跳入中断服务函数中执行此中中断,当中断发生时将跳入中断服务函数中执行此中断所需要处理的事件断所需要处理的事件 。中断源与中断向量中断源与中断向量 l CC2530片内具有一个中断控制器,能够同时对片内具有一个中断控制器,能够同时对1818路中断源路中断源进行管理进行管理,每个中断源都可以产生中断请求,中断请求可以,每个中断源都可以产生中断请求,中断请求可以通过设置中断使能通过设置中断使能SFR寄存器的中断使能位寄存器的

10、中断使能位IEN0、IEN1或或IEN2使能或禁止中断。使能或禁止中断。10(1 1)当调用中断处理程序时会由硬件清除中断;)当调用中断处理程序时会由硬件清除中断;(2 2)表示还存在子级中断)表示还存在子级中断11我们已经大致指导如何编写中断处理程序了,但要保证让中断处理程序真正得到调我们已经大致指导如何编写中断处理程序了,但要保证让中断处理程序真正得到调用前,我们还得对中断控制器进行初始化,如何初始化?还得理解中断信号从源头用前,我们还得对中断控制器进行初始化,如何初始化?还得理解中断信号从源头如何一步步传到如何一步步传到CPUCPU的。的。1818路中断总开关路中断总开关 优先级排队,优

11、先级排队,得到第一名的将得到第一名的将会得到响应,多会得到响应,多个第一名则按顺个第一名则按顺序轮询序轮询 18 18路中断分开关路中断分开关带阴影的标志位带阴影的标志位会有硬件清除会有硬件清除12我们可以这样认为,当发生了某个中断:我们可以这样认为,当发生了某个中断:PC(PC(指令计数器指令计数器) )对应的断向量,对应的断向量,也就是说,也就是说,cpucpu将会执行对应的中断向量处的指令。将会执行对应的中断向量处的指令。- - 1212 - -1.中断源与中断向量中断源与中断向量 l 当相应的中断源使能并发生时,中断标志位将自动置当相应的中断源使能并发生时,中断标志位将自动置1,然后程

12、序跳往中断服务程序的入口地址执行中断服务程序。然后程序跳往中断服务程序的入口地址执行中断服务程序。待中断服务程序处理完毕后,由硬件清除中断标志位待中断服务程序处理完毕后,由硬件清除中断标志位 l 中断服务程序的入口地址即中断向量,中断服务程序的入口地址即中断向量,CC2530的的18个中个中断源对应了断源对应了18个中断向量,中断向量定义在头文件个中断向量,中断向量定义在头文件“ioCC2530.h”中中 13- - 1313 - -2.中断优先级中断优先级 l 中断优先级将决定中断响应的先后顺序,在中断优先级将决定中断响应的先后顺序,在CC2530中分为六中分为六个中断优先组,即个中断优先组

13、,即IPG0IPG5,每一组中断优先组中有三个,每一组中断优先组中有三个中断源中断源 142.中断优先级中断优先级 中断优先组的优先级设定由寄存器中断优先组的优先级设定由寄存器IP0和和IP1来设置。来设置。CC2530的优的优先级有先级有4级,即级,即03级,其中级,其中0级的优先级最低,级的优先级最低,3级的优先级最高。级的优先级最高。 l 其中其中X为六个中断优先组为六个中断优先组IPG0IPG5中的任何一个中的任何一个 。 设置设置IPG0优先级最高优先级最高IP1_IPG0 = 1;IP0_IPG0 = 1;15- - 1515 - -2.中断优先级中断优先级 l 如果同时收到相同优

14、先级或同一优先级组中的中如果同时收到相同优先级或同一优先级组中的中断请求时,将采用轮流检测顺序来判断中断优先断请求时,将采用轮流检测顺序来判断中断优先级别的响应级别的响应 162.中断优先级中断优先级 例如:在中断优先级组例如:在中断优先级组IPG0中的中断中的中断RFERR、RF和和DMA的中断优先级是相的中断优先级是相同的,如果同时使用这三个同的,如果同时使用这三个中断,就需要使用轮流探测中断,就需要使用轮流探测顺序来判断哪一优先级最高。顺序来判断哪一优先级最高。由轮流探测顺序表查得由轮流探测顺序表查得RFERR中断优先级最高,中断优先级最高,RF中断次之,中断次之,DMA中断与中断与其他

15、两个中断相比中断优先其他两个中断相比中断优先级最低级最低 173.中断处理过程中断处理过程 l 中断发生时,中断发生时,CC2530硬件自动完成以下处理:硬件自动完成以下处理: u 中断申请:中断源向中断申请:中断源向CPU发出中断请求信号(中断申请一般需要在程发出中断请求信号(中断申请一般需要在程序初始化中配置相应的中断寄存器开启中断)序初始化中配置相应的中断寄存器开启中断) u 中断响应:中断响应:CPU检测中断申请,把主程序中断的地址保存到堆栈,转检测中断申请,把主程序中断的地址保存到堆栈,转入中断向量入口地址入中断向量入口地址 u 中断处理:按照中断向量中设定好的地址,转入相应的中断服

16、务程序中断处理:按照中断向量中设定好的地址,转入相应的中断服务程序 u 中断返回:中断服务程序执行完毕后,中断返回:中断服务程序执行完毕后,CPU执行中断返回指令,把堆执行中断返回指令,把堆栈中保存的数据从堆栈弹出,返回原来程序栈中保存的数据从堆栈弹出,返回原来程序 184.中断编程中断编程 l 中断编程的一般过程如下中断编程的一般过程如下 :l 中断设置:根据外设的不同,具体的设置是不同的,一般中断设置:根据外设的不同,具体的设置是不同的,一般至少包含启用中断至少包含启用中断 l 中断函数编写;这是中断编程的主要工作,需要注意的是,中断函数编写;这是中断编程的主要工作,需要注意的是,中断函数

17、尽可能的减少耗时或不进行耗时操作中断函数尽可能的减少耗时或不进行耗时操作 以以CC2530的外部中断为例:的外部中断为例: P0IFG = 0 x00;/P0中断标志清中断标志清0 P0INP &= 0X30; /P0.4有上拉、下拉能力有上拉、下拉能力 P0IEN |= 0 x30; /P0.4和和P0.5中断使能中断使能 PICTL|= 0X01; /P0.4和和P0.5,下降沿触发,下降沿触发 EA = 1; /开中断开中断 IEN1 |= 0X20; /端口端口0中断使能中断使能19- - 1919 - -4.中断编程中断编程 l 中断编程的一般过程如下中断编程的一般过程如下 :l C

18、C2530所使用的编译器为所使用的编译器为IAR,在,在IAR编译器中用关键字编译器中用关键字_interrupt来定义一个中断函数。使用来定义一个中断函数。使用#progma vector来提供来提供中断函数的入口地址,并且中断函数没有返回值,没有函数参数中断函数的入口地址,并且中断函数没有返回值,没有函数参数 #pragma vector = P0INT_VECTOR_interrupt void P0_ISR ( void) /中断程序代码中断程序代码204.中断编程中断编程 l 在中断函数编写中,当程序进入中断服务程序之后,需要执行在中断函数编写中,当程序进入中断服务程序之后,需要执行

19、以下几个步骤以下几个步骤 :u 将对应的中断关掉(不是必须的,需要根据具体情况来处理);将对应的中断关掉(不是必须的,需要根据具体情况来处理);u 如果需要判断具体的中断源,则根据中断标志位进行判断(例如所有如果需要判断具体的中断源,则根据中断标志位进行判断(例如所有I/O中中断共用断共用1个中断向量,需要通过中断标志区分是哪个引脚引起的中断)个中断向量,需要通过中断标志区分是哪个引脚引起的中断)u 清中断标志(不是必须的,清中断标志(不是必须的,CC2530中中断发生后由硬件自动清中断标志中中断发生后由硬件自动清中断标志位)位)u 处理中断事件,此过程要尽可能的少耗时处理中断事件,此过程要尽

20、可能的少耗时u 最后如果在第一步中关闭了相应的中断源,需要在退出中断服务程序之前最后如果在第一步中关闭了相应的中断源,需要在退出中断服务程序之前打开对应的中断打开对应的中断#pragma vector = P0INT_VECTOR/中断函数入口地址中断函数入口地址 _interrupt void P0_ISR(void)/定义一个中断函数定义一个中断函数 P0IEN &= 0 x30;/关端口关端口P0.4、P0.5中断中断 if(P0IFG0)/判断中断发生判断中断发生 P0IFG = 0;/清中断标志清中断标志 /*中断事件的处理中断事件的处理*/ . . . . . . . . . P0

21、IEN |= 0 x30; /开中断开中断 21在设置在设置I/O口的中断时必须要将其设置为输入状态,通过外部信号的上升或下降口的中断时必须要将其设置为输入状态,通过外部信号的上升或下降沿触发中断。通用沿触发中断。通用I/O的所有的外部中断共用一个中断向量,根据中断标志的所有的外部中断共用一个中断向量,根据中断标志位来判断是哪个引脚发生中断位来判断是哪个引脚发生中断 通用通用I/O中断寄存器有三类:中断使能寄存器、中断状态标志寄存器和中断中断寄存器有三类:中断使能寄存器、中断状态标志寄存器和中断控制寄存器控制寄存器 中断使能寄存器包括中断使能寄存器包括IENx和和PxIEN(其中(其中x代表代

22、表0、1、2),其功能是使),其功能是使I/O口进行中断使能:口进行中断使能: 中断状态标志寄存器包括中断状态标志寄存器包括PxIFG,其功能是当发生中断时,其功能是当发生中断时,I/O口所对应的中断状口所对应的中断状态标志将自动置态标志将自动置1。 中断控制寄存器为中断控制寄存器为PICTL,其功能是控制,其功能是控制I/O口的中断触发方式。口的中断触发方式。221.中断使能寄存器中断使能寄存器IENx(其中(其中x为为0,1,2) IENx寄存器包括三个八位寄存器:寄存器包括三个八位寄存器:IEN0、IEN1和和IEN2。23IEN1寄存器的第寄存器的第5位控制位控制P0口的中断,当设置口

23、的中断,当设置IEN1.P0IE时,将设时,将设置置P0端口所有引脚的中断使能,即端口所有引脚的中断使能,即P0.0P0.7引脚全部中断使能引脚全部中断使能/端口端口0中断使能中断使能IEN1 |= 0 x20;24IEN2寄存器的第寄存器的第4位和第位和第1位分别控制位分别控制P1端口和端口和P2端口的中断,当设置端口的中断,当设置IEN2.P1IE和和IEN2.P2IE时,将设置时,将设置P1端口和端口和P2端口所有引脚的中断使能,即端口所有引脚的中断使能,即P1.0P1.7引脚和引脚和P2.0P2.4引脚全部中断使能引脚全部中断使能 /端口端口1中断使能中断使能IEN2 |= 0 x10

24、;/端口端口0中断使能中断使能IEN2 |= 0 x02;254.4.2 通用通用I/O中断中断中断使能寄存器中断使能寄存器PxIEN(其中(其中x为为0,1,2)PxIEN寄存器是设置端口的某一个引脚中断使能寄存器是设置端口的某一个引脚中断使能 以以P0IEN为例讲解为例讲解:/P0.4、P0.5中断使能中断使能P0IEN |= 0 x30;264.4.2 通用通用I/O中断中断 中断状态标志寄存器中断状态标志寄存器PxIFG (其中(其中x为为0,1,2)PxIFG寄存器是中断状态标志寄存器,由于寄存器是中断状态标志寄存器,由于CC2530的外部中断共用一个的外部中断共用一个中断向量,因此

25、需要判断是哪个引脚发生中断,通过判断中断向量,因此需要判断是哪个引脚发生中断,通过判断PxIFG寄存寄存中的中断状态标志位可以判断哪个引脚发生中断。中的中断状态标志位可以判断哪个引脚发生中断。PxIFG寄存器有三寄存器有三个,分别是个,分别是P0IFG、P1IFG和和P2IFG 以以P0IFG为例讲解为例讲解:/判断端口判断端口0是否有中断标志发生是否有中断标志发生if(P0IFG0) .274.4.2 通用通用I/O中断中断 中断状态标志寄存器中断状态标志寄存器IRCONP0IF=1;/标志位为标志位为1,端口,端口P0有中有中断,具体是断,具体是P0的哪个引脚引起的的哪个引脚引起的还需要通

26、过还需要通过P0IFG来判断来判断284.4.2 通用通用I/O中断中断 中断状态标志寄存器中断状态标志寄存器IRCON2P1IF=1;/标志位为标志位为1,端口,端口P1有中有中断,具体是断,具体是P1的哪个引脚引起的的哪个引脚引起的还需要通过还需要通过P1IFG来判断来判断P2IF=1;/标志位为标志位为1,端口,端口P2有中有中断,具体是断,具体是P2的哪个引脚引起的的哪个引脚引起的还需要通过还需要通过P2IFG来判断来判断294.4.2 通用通用I/O中断中断 中断控制寄存器中断控制寄存器PICTL (其中(其中x为为0,1,2)设置设置中断触发方式:分为输入的上升沿触发和输入的下降沿

27、触发。中断触发方式:分为输入的上升沿触发和输入的下降沿触发。/P0.4和和P0.5为下降沿触发中断为下降沿触发中断PICTL |= 0 x01;30- - 3030 - -4.4.2 通用通用I/O中断中断 中断配置中断配置 为了使能任一中断,应该采取以下步骤:为了使能任一中断,应该采取以下步骤:l设置需要发生中断的设置需要发生中断的I/O口为输入方式。口为输入方式。l清除中断标志,即将需要设置中断的引脚所对应的寄存器清除中断标志,即将需要设置中断的引脚所对应的寄存器PxIFG状态标志位置状态标志位置0。l设置具体的设置具体的I/O引脚中断使能,即设置中断的引脚所对应的寄存器引脚中断使能,即设

28、置中断的引脚所对应的寄存器PxIEN的中断使能位的中断使能位为为1。l设置设置I/O口的中断触发方式。口的中断触发方式。l设置寄存器设置寄存器IEN1和和IEN2中对应引脚的端口的中断使能位为中对应引脚的端口的中断使能位为1。l设置设置IEN0中的中的EA位为位为1使能全局中断。使能全局中断。l编写中断服务程序。编写中断服务程序。31 通过按键触发外部中断的编程。 要求:要求: 当当S1键按下时,点亮键按下时,点亮P1_0上的灯上的灯(1)占用系统硬件资源:)占用系统硬件资源:P0_4; (2) 当当S1断开时断开时P0_4为高电平,接通时为高电平,接通时P0_4为低电平;为低电平; (3) 当当S1键按下,键按下,P0_4管脚上出现一个高电平转变为低电平管脚上出现一个高电平转变为低电平(下降沿)的信号,(

温馨提示

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

评论

0/150

提交评论