第九周 CC2530中断控制器原理(大课)

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

RF TX RFIO下溢或RX FIFO溢出 RFERR 03H IEN0.RFERRIE TCON.RFERRIF(1) ADC转换结束 ADC TCON.ADCIF(1) 0BH IEN0.ADCIE USART0 RX完成 URX0 TCON.URX0IF(1) 13H IEN0.URX0IE USART1 RX完成 URX1 TCON.URX1IF(1) 1BH IEN0.URX1IE AES加密/解密完成 ENC S0CON.ENCIF 23H IEN0.ENCIE 睡眠计时器比较 ST IRCON.STIF 2BH IEN0.STIE 端口2输入/USB P2INT IRCON2.P2IF(2) 33H IEN2.P2IE USART0 TX完成 UTX0 IRCON2.UTX0IF 3BH IEN2.UTX0IE DMA传送完成 DMA IRCON.DMAIF 43H IEN1.DMAIE (1)当调用中断处理程序时会由硬件清除中断; 定时器1(16位)捕获/比较/溢出 T1 IRCON.T1IF(1)(2) 4BH IEN1.T1IE (2)表示还存在子级中断 定时器2 T2 IRCON.T2IF(1)(2) 53H IEN1.T2IE 定时器3(8位)捕获/比较/溢出 定时器4(8位)捕获/比较/溢出 T3 T4
(3)中断方式:当外设满足传送数据状态时(如串口控制器的发送缓冲 区空或接收缓冲区慢)会向cpu发出请求信号,强迫cpu暂停“手头的工作” ,转去处理该外设,完毕后再继续原来的“工作”; (4)直接存储器(DMA)存取(有兴趣的可以自己可查阅相关资料) 5
一、中断概述
(1)中断服务程序:CPU响应中断后,转去执行相应 的处理程序,该处理程序通常称之为中断服务程序。 (2)主程序:原来正常运行的程序称为主程序。 (3)断点:主程序被断开的位置(或地址)称为断点。 (4)中断源:引起中断的原因,或能发出中断申请的 来源,称为中断源。 (5)中断请求:中断源要求服务的请求称为中断请求 (或中断申请)。
以CC2530的外部中断为例:
P0IFG = 0x00;//P0中断标志清0 P0INP &= ~0X30; //P0.4有上拉、下拉能力 P0IEN |= 0x30; //P0.4和P0.5中断使能
PICTL|= 0X01; //P0.4和P0.5,下降沿触发
EA = 1; //开中断 IEN1 |= 0X20; //端口0中断使能
4.设置中断优先级;
5.选择同步异步通信方式:UART方式 6.设置波特率(查表)
串口发送:查询状态位;或者通过中断标志位 串口接收:查询状态位;或者通过中断标志位
2
本周教学主要内容
• 中断概述 • CC2530中断原理(难点) • CC2530中断编程(重点)
3
教学目标
• 理解中断的概念、一般处理步骤; • 掌握CC2530中断原理;
中断返回:中断服务程序执行完毕后,CPU执行中断返回指令,把
堆栈中保存的数据从堆栈弹出,返回原来程序 17
4.中断编程
中断编程的一般过程如下 :
中断设置:根据外设的不同,具体的设置是不同的,一般 至少包含启用中断 中断函数编写;这是中断编程的主要工作,需要注意的是, 中断函数尽可能的减少耗时或不进行耗时操作
13 - 13
三、中断的使用
2.中断优先级
中断优先组的优先级设定由寄存器IP0和IP1来设置。CC2530的优 先级有4级,即0~3级,其中0级的优先级最低,3级的优先级最高。
IP1_X 0 IP0_X 0 优先级 0 (优先级别最低)
0
1 1
1
0 1
1
2 3(优先级别最高)
其中X为六个中断优先组IPG0~IPG5中的任何一个 。 设置IPG0优先级最高 IP1_IPG0 = 1; IP0_IPG0 = 1;
打开对应的中断
20
四、IO中断
在设置I/O口的中断时必须要将其设置为输入状态,通过外部信号的上升或下降 沿触发中断。通用I/O的所有的外部中断共用一个中断向量,根据中断标志位来
判断是哪个引脚发生中断
14
三、中断的使用
2.中断优先级 如果同时收到相同优先级或同一优先级组中的中 断请求时,将采用轮流检测顺序来判断中断优先 级别的响应
15 - 15
2.中断优先级
中断向量编号 0 16 8 1 9 中断名称 RFERR RF DMA ADC T1 优先级排序
轮流探测顺序 为自上向下优 先级依次降低
• 掌握CC2530中断编程步骤。
4
一、中断概述
CPU与外部设备之间数据传送方式主要有以下几种:
(1)无条件传送(适用设备类型有限):适用于总是准备好的外设,如我 们已经通过实验使用了无条件传送方式点亮发光二极管; 已经实现 (2)查询方式(浪费cpu资源):传送数据之前需要先查询设备的状态
,状态满足要求则传送,否则等待,如我们用查询方式使用串口; 已经实现
5BH 63H
IEN1.T3IE IEN1.T4IE
IRCON.T3IF(1)(2) IRCON.T4IF(1)(2)
13 14 15 16 17
端口0输入 USART 1 TX完成 端口1输入 RF通用中断 看门狗定时器溢出
P0INT UTX1 P1INT RF WDT
6BH
73H 7BH 83H 8BH
(2)中断响应
CPU在每条指令执行的最后一个时钟周期监测中断请求输入管 脚有无请求发生, 而后决定是否对它做出响应。
(3)断点保护
为了中断处理完毕后为了能接着处理被中断的事情,CPU硬件 需要对硬件现场进行保护。 7
一、中断概述
(4)中断源识别
当有多个中断源时,一旦中断请求发生,cpu须判断是 哪一个中断源提出请求。一般有两种确定中断源的方法: a:软件查询; b:中断向量法;(大多数如此) 利用不同的中断向量,从而确定是来自不同的中断源。
18
4.中断编程 中断编程的一般过程如下 :
CC2530所使用的编译器为IAR,在IAR编译器中用关键字
__interrupt来定义一个中断函数。使用#progma vector来提供 中断函数的入口地址,并且中断函数没有返回值,没有函数参数
#pragma vector = P0INT_VECTOR
单片机原理与应用
高速时钟的设置:
教学回顾
如设置成32M时钟步骤: 1.选择外部32MHz晶振作为主时钟源; 2.等待32MHz晶振稳定 3.当前系统时钟不分频 如设置成8M时钟步骤: 将上述第3步中修改成:当前系统时钟4分频
串口控制器初始化编程:
1.设置为32M时钟; 2.选择串口外设备用位置(位置1或者位置2); 3.初始化I/O口为外部设备;
IEN1.P0IE
IEN2.UTXIE IEN2.P1IE IEN2.RFIE IEN2.WDTIE
IRCON.P0IF(2) IRCON2.UTX1IF IRCON2.P1IF(2) S1CON.RFIF(2) IRCON.WDTIF
10
二、 CC2530 的中断原理 18路中断总开关 带阴影的标志位
中断源与中断向量
CC2530片内具有一个中断控制器,能够同时对18路中断源 进行管理,每个中断源都可以产生中断请求,中断请求可以 通过设置中断使能SFR寄存器的中断使能位IEN0、IEN1或
IEN2使能或禁止中断。
9
中断 号码
描述
中断 名称
中断 向量
中断屏蔽
中断标志
0 1 2 3 4 5 6 7 8 9 10 11 12
18路中断分开关 会有硬件清除 我们已经大致指导如何编写中断处理程序了,但要保证让中断处理程序真正得到调 用前,我们还得对中断控制器进行初始化,如何初始化?还得理解中断信号从源头 如何一步步传到CPU的。 优先级排队, 得到第一名的将 会得到响应,多 个第一名则按顺 序轮询
11
三、中断的使用
1.中断源与中断向量
12 - 12
三、中断的使用
2.中断优先级
中断优先级将决定中断响应的先后顺序,在CC2530中分为六 个中断优先组,即IPG0~IPG5,每一组中断优先组中有三个 中断源
组 IPG0 IPG1 IPG2 IPG3 IPG4 IPG5 RFERR ADC URX0 URX1 ENC ST 中断 RF T1 T2 T3 T4 P0INT DMA P2INT UTX0 UTX1 P1INT WDT
(5)中断服务
程序员所编写的中断处理程序统称中断服务程序,这也是 中断处理需要程序员所做的主要工作;
(6)断点恢复 (7)中断返回
8
二、CC2530的中断原理
• 中断由中断源引起,中断源由相应的寄存器来控制。 当需要使用中断时,需配置相应的中断寄存器来开启 中断,当中断发生时将跳入中断服务函数中执行此中 断所需要处理的事件 。
__interrupt void P0_ISR ( void) { //中断程序代码 }
19 - 19
4.中断编程
在中断函数编写中,当程序进入中断服务程序之后,需要执行
以下几个步骤 :
__interrupt void P0_ISR(void)//定义一个中断函数 { 如果需要判断具体的中断源,则根据中断标志位进行判断(例如所有I/O中 P0IEN &= ~0x30;//关端口P0.4、P0.5中断 if(P0IFG>0)//判断中断发生 断共用1个中断向量,需要通过中断标志区分是哪个引脚引起的中断)
16
3.中断处理过程
中断发生时,CC2530硬件自动完成以下处理:
中断申请:中断源向CPU发出中断请求信号(中断申请一般需要在 程序初始化中配置相应的中断寄存器开启中断) 中断响应:CPU检测中断申请,把主程序中断的地址保存到堆栈, 转入中断向量入口地址 中断处理:按照中断向量中设定好的地址,转入相应的中断服务程序
继 续 执 行 主 程 序 主 程 序
响应中断请求
中 断 服 务 程 序
断点
返回主程序
• CPU在硬件上对中断的支持:
(1)具有中断请求输入信号管脚; (2)每执行完一条指令都会检测是否有中断请求信号;
6
一、中断概述
中断响应的一般过程 (1)中断请求
当外部设备就绪时会产生一个中断请求信号加到CPU的中断请求输入端 ,即对CPU提出中断请求。对于中断请求信号,需注意两个问题: a) 有效的中断请求电平保持到被cpu发现; b) 当cpu响应请求后应当有效的请求电平去掉; 在使用中断控制器时(大多数如此),cpu的中断响应信号就能做到这 一点,若自己构成中断请求硬件时,需要注意以上两个问题;
2
10 3 11 4 12 5 13 6
URX0
T2 URX1 T3 ENC T4 ST P0INT P2INT
7
14 15 17
UTX0
UTX1 P1INT WDT
例如:在中断优先级组 IPG0中的中断RFERR、RF 和DMA的中断优先级是相 同的,如果同时使用这三个 中断,就需要使用轮流探测 顺序来判断哪一优先级最高。 由轮流探测顺序表查得 RFERR中断优先级最高, RF中断次之,DMA中断与 其他两个中断相比中断优先 级最低
当相应的中断源使能并发生时,中断标志位将自动置1,
然后程序跳往中断服务程序的入口地址执行中断服务程序。 待中断服务程序处理完毕后,由硬件清除中断标志位 中断服务程序的入口地址即中断向量,CC2530的18个中 断源对应了18个中断向量,中断向量定义在头文件 “ioCC2530.h”中
我们可以这样认为,向量, 也就是说,cpu将会执行对应的中断向量处的指令。
#pragma vector = P0INT_VECTOR//中断函数入口地址 将对应的中断关掉(不是必须的,需要根据具体情况来处理);
{ P0IFG = 0;//清中断标志 清中断标志(不是必须的,CC2530 中中断发生后由硬件自动清中断标志
/**中断事件的处理**/ 位) ... ... ... ... ... ... ... ... ... 处理中断事件,此过程要尽可能的少耗时 } P0IEN |= 0x30; //开中断 最后如果在第一步中关闭了相应的中断源,需要在退出中断服务程序之前 }
相关文档
最新文档