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

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中断入门

//0010 0000
//P0组中断使能,IEN1第5位
IEN2 |= 0x02;
//0000 0001
//P2口中断使能,IEN2 第1位
P0IEN |=0x02;
//0000 0010
//P0相应中断位打开,开关S1在P0_1
P2IEN |=0x01;
//0000 0001
//P2相应中断位打开,开关S2在P2_0
PICTL |= (0x01 | 0x08);
//P0和P2为下降沿触发中断
//配置上升沿还是下降沿产生中断,PICTL。 1:下降沿
Led1=!Led1;
}
P0IFG =0;
P0IF=0;
}
#pragma vector = P2INT_VECTOR
__interrupt void S2_Led2()
{
//P2口中断,S2在P2_0:0000 0001
//程序目标:产生一个下降沿触发的中断
//S1开关控制Led1,S2开关控制Led2
void Intrpt_Init()
{
/*
初始化中断
一个端口(P0,P1,P2)的某一引脚产生中断,
需要配置的配置条件:
1、总中断打开:
EA=1;
2、该中断所在的组开关打开:
就需要把P0INE的第1位在程序中设为1
P0IEN |=0x02;
要把P2_0这个脚的开关打开,
就需要把P2INE的第0位在程序中设为1
P2IEN |=0x01;
4、配置到底是上升沿还是下降沿产生中断,PICTL。 1:下降沿
4第5章 CC2530 简介4

存储器
CODE: 一个只读的存储空间,用于程序存储。这一存储空间 地址是64KB。 DATA:一个读/写的数据存储空间,可以直接或间接被一个 单周期CPU 指令访问。这一存储空间地址是256字节。DATA 存储空间较低的128 字节可以直接或间接寻址,较高的128 字节只能间接寻址。 XDATA:一个读/写的数据存储空间,通常需要4-5 个CPU 指 令周期来访问。这一存储空间地址是64KB。而且访问XDATA 存储器慢于访问DATA,因为CODE 和XDATA 存储空间共享 CPU 内核上的一个通用总线,因此来自CODE 的指令预取可 以不必和XDATA 访问并行执行。
存储器
SFR:一个读/写的寄存器存储空间,可以直接被一个CPU 指令访问。这一存储空间含有128 字节。对于地址是被8 整 除的SFR 寄存器,每一位还可以单独寻址。 这四个存储空间在8051 结构中是分开的,但是在设备中有部 分是重叠的,以减轻DMA 传输和硬件调试操作的负担。
储存器映射
存储器映射在两个重要方面不同于标准的8051内存映射。 首先,为了使得DMA 控制器访问全部物理存储空间,并由此 使得DMA 在不同8051 存储空间之间进行传输,CODE 和 SFR 部分存储空间映射到XDATA 存储空间。 第二,CODE 存储器空间映射可以使用两个备用机制。 第一个机制是,只有程序存储器(即闪存存储器)映射到 CODE 存标准的8051 映射储空间。这一映射设备复位后默认 使用的。第二个机制用于执行来自SRAM 的代码。在这种模 式下,SRAM 映射到0x8000 到(0x8000 + SRAM_SIZE –1)的 区域。这一映射如图2-2 所示。执行来自SRAM 的代码提高了 性能,并减少了功率消耗。
执行的。因此现有的软件必须适用使用MPAGE而不是P2。
cc2530外部中断课程设计

cc2530外部中断课程设计一、教学目标本课程的教学目标是让学生掌握CC2530外部中断的基本原理和应用方法。
具体来说,知识目标包括了解CC2530外部中断的硬件结构和中断处理流程,掌握中断触发条件和中断服务程序的编写方法。
技能目标则要求学生能够运用CC2530外部中断实现简单的输入输出控制,并能够分析中断异常情况。
情感态度价值观目标则是培养学生对嵌入式系统开发的兴趣,提高他们解决实际问题的能力。
二、教学内容本课程的教学内容主要包括CC2530外部中断的硬件原理、中断触发条件、中断服务程序的编写以及中断的应用实例。
具体安排如下:1.第1课时:介绍CC2530外部中断的硬件原理,包括中断控制器的工作原理和中断触发源。
2.第2课时:讲解中断触发条件,包括中断优先级和中断屏蔽。
3.第3课时:教授中断服务程序的编写方法,以及如何利用中断实现输入输出控制。
4.第4课时:通过实例分析,让学生了解中断在实际应用中的优势和注意事项。
三、教学方法为了提高学生的学习兴趣和主动性,本课程将采用多种教学方法。
主要包括:1.讲授法:用于讲解CC2530外部中断的硬件原理、中断触发条件和中断服务程序的编写方法。
2.讨论法:在讲解实例时,引导学生进行小组讨论,共同分析中断在实际应用中的优势和注意事项。
3.实验法:安排课后实验,让学生动手实践,巩固所学知识。
四、教学资源为了支持教学内容和教学方法的实施,丰富学生的学习体验,我们将准备以下教学资源:1.教材:《CC2530嵌入式系统教程》2.参考书:《CC2530中断系统应用手册》3.多媒体资料:PPT课件、教学视频4.实验设备:CC2530开发板、编程器、实验器材五、教学评估本课程的教学评估将采用多元化的评价方式,以全面客观地评价学生的学习成果。
评估方式包括:1.平时表现:通过课堂参与、提问、小组讨论等环节,评价学生的学习态度和课堂表现。
2.作业:布置相关的编程练习和实验报告,评估学生对CC2530外部中断知识的掌握程度。
CC2530外部中断实现按键控制LED闪烁

CC2530外部中断实现按键控制LED闪烁中断任务:1.系统初始化D1(P1.0)、D2(P1.1)闪⼀次灭掉。
2.按⼀次KEY1(P0.1),D1、D2同时闪烁;再按⼀次KEY1,D1、D2灭掉。
3.按⼀次KEY2(P0.1),D1、D2交替闪烁;再按⼀次KEY2,D1、D2灭掉。
#include <ioCC2530.h>#define D1 P1_0 //定义P1.0⼝为D1控制端#define D2 P1_1 //定义P1.1⼝为D2控制端#define KEY1 P0_1 //定义P0.1⼝为S1控制端#define KEY2 P1_2#define ON 1 //⾼电平点亮#define OFF 0//低电平熄灭typedef unsigned char uchar;typedef unsigned int uint;uchar KeyValue0=0;uchar KeyValue1=0;void Delay(uint time)//延时函数{uint i,j;for (i=0; i<time; i++)for (j=0; j<530; j++);}void InitLed(void)//初始化LED{P1SEL &= ~0x03;P1DIR |= 0x03;Delay(1000);//默认点亮LED,因此直接利⽤延时函数即可,⽆需重复操作D1=D2=OFF;}void InitKey()//初始化外部中断{P0IEN |= 0x2; // P0.1 设置为中断⽅式 1:中断使能P1IEN |= 0x4;PICTL |= 0x3; //下降沿触发IEN1 |= 0x20; //允许P0⼝中断;IEN2 |= 0x10; //允许P1⼝中断;EA = 1; //打开中断}void Key_5(){if(KeyValue0 == 1){D2 = D1 = ON;}else if(KeyValue0 == 2){D2 = D1 = OFF;KeyValue0 = 0; //产⽣中断保存中断状态}}void Key_4(){while(KeyValue1 == 1){D1 = ON;Delay(100);D2 = ON;D1 = OFF;Delay(100);D2 = OFF;}while(KeyValue1 == 2){D1 = D2 = OFF;KeyValue1 = OFF; //产⽣中断保存中断状态}}#pragma vector = P0INT_VECTOR__interrupt void P0_ISR(void){if(P0IFG &= 0x02) //按键中断{Delay(10); //延时去抖if(KeyValue0==0) //按键中断{KeyValue0 = 1; //产⽣中断保存中断状态}else if(KeyValue0==1){KeyValue0 = 2; //产⽣中断保存中断状态}}P0IFG = 0; //清中断标志P0IF = 0; //清端⼝0中断标志}#pragma vector = P1INT_VECTOR__interrupt void P1_ISR(void){if(P1IFG &= 0x04) //按键中断{Delay(10);if(KeyValue1==0) //按键中断{KeyValue1 = 1; //产⽣中断保存中断状态1}else if(KeyValue1==1){KeyValue1 = 2; //产⽣中断保存中断状态2}}P1IFG = 0; //清中断标志P1IF = 0; //清端⼝1中断标志}/**************************************************************************** * 程序⼊⼝函数****************************************************************************/ void main(void){InitLed(); //设置LED灯相应的IO⼝InitKey(); //设置KEY相应的IO⼝外部中断while(1){Key_4();Key_5();}}。
CC2530外部中断

CC2530外部中断⼀、中断基础概念内核与外设之间的主要交互⽅式有两种:轮询和中断。
中断系统使得内核具备了应对突发事件的能⼒。
在执⾏CPU当前程序时,由于系统中出现了某种急需处理的情况,CPU暂停正在执⾏的程序,转⽽去执⾏另外⼀段特殊程序来处理出现的紧急事务,处理结束后,CPU⾃动返回到原来暂停的程序中去继续执⾏。
这种程序在执⾏过程中由于外界的原因⽽被中间打断的情况,称为中断。
采⽤中断技术后,可以为计算机系统带来以下好处:1)实现分时操作速度较快的CPU和速度较慢的外设可以各做各的事情,外设可以在完成⼯作后再与CPU进⾏交互,⽽不需要CPU去等待外设完成⼯作,能够有效提⾼CPU的⼯作效率。
2)实现实时处理在控制过程中,CPU能够根据当时情况及时做出反应,实现实时控制的要求。
3)实现异常处理系统在运⾏过程中往往会出现⼀些异常情况,中断系统能够保证CPU及时知道出现的异常,以便CPU去解决这些异常,避免整个系统出现⼤的问题。
两个重要的概念:<1> 中断服务函数:内核响应中断后执⾏的相应处理程序。
例如ADC转换完成中断被响应后,CPU执⾏相应的中断服务函数,该函数实现的功能⼀般是从ADC结果寄存器中取⾛并使⽤转换好的数据。
<2> 中断向量:中断服务程序的⼊⼝地址,当CPU响应中断请求时,会跳转到该地址去执⾏代码。
⼆、 CC2530中断CC2530具有18个中断源,每个中断源都有它⾃⼰的位于⼀系列SFR 寄存器中的中断请求标志。
相应标志位请求的每个中断可以分别使能或禁⽤。
Tip:(1)当调⽤中断服务例程时清除硬件。
(2)另外的 IRQ 掩码和 IRQ 标志位存在。
三、CC2530中断处理函数格式书写中断服务函数与⼀般⾃定义函数不同,有特定的书写格式:#pragma vector = 中断向量__interrupt void 函数名称(void){/*此处编写中断处理函数的具体程序*/PxIFG = 0; //先清除Px引脚的中断状态标志位PxIF = 0; //再清除Px端⼝组的中断状态标志位}<1> 在每⼀个中断服务函数之前,都要加上⼀句起始语句:#pragma vector = <中断向量><中断向量>表⽰接下来要写的中断服务函数是为那个中断源服务的,该语句有两种写法:#pragma vector = 0x7B或者#pragma vector = P1INT_VECTOR前者是中断向量的⼊⼝地址,后者是头⽂件“ioCC2530.h”中的宏定义。
cc2530协议栈定时器中断的工作原理

cc2530协议栈定时器中断的工作原理1.引言在无线通信领域中,C C2530芯片是一款非常常见的单片机芯片,广泛应用于物联网、智能家居等场景中。
其内部集成了协议栈以实现无线通信功能。
本文将着重介绍c c2530协议栈定时器中断的工作原理。
2.定时器的作用在嵌入式系统中,定时器是一种重要的设备,用于定时操作和任务调度。
在c c2530芯片中,定时器被广泛应用于协议栈的各个模块,实现对通信和维护任务的精准控制。
3. cc2530协议栈定时器的特点c c2530芯片的协议栈中包含多个定时器,其中最重要的是MA C层定时器和P HY层定时器。
这些定时器具有以下特点:-高精度:定时器采用高精度的时钟源,并通过时钟分频技术实现微秒级的时间精度。
-可编程性:用户可以根据自己的需要对定时器进行配置和设置。
-中断触发:定时器可以在达到设定的定时时间时产生中断信号。
4. cc2530协议栈定时器中断的处理流程c c2530协议栈定时器中断的处理流程如下:-初始化定时器:在使用定时器前,需要对其进行初始化设置,包括选择时钟源、设置定时时间等。
-启动定时器:一旦定时器被启动,它便开始计时,并在达到设定的定时时间时触发中断信号。
-中断处理:当定时器中断信号触发时,C P U会进入中断处理程序,并执行相应的中断服务例程。
-中断服务例程:中断服务例程是用来处理定时器中断的代码段,其中包括对定时器的停止、重置等操作,以及其他需要执行的任务。
5.示例代码下面是一个简单的示例代码,演示了如何使用cc2530协议栈定时器中断:#i nc lu de<c c2530.h>//定时器中断服务例程#p ra gm av ec to r=TIM E R1_O VF_V EC TO R__in te rr up tv oi dTi m er1O ve rf lo w(voi d){//中断处理代码//...//定时器重置T1CT L|=0x01;}v o id ma in(v oi d){//初始化定时器T1CT L=0x02;//设置定时时间T1CC0L=0x50;T1CC0H=0x00;//启动定时器T1CT L|=0x04;//启用定时器中断I E N0|=0x80;//全局使能中断E A=1;w h il e(1){//主循环}}6.总结本文介绍了c c2530协议栈定时器中断的工作原理。
3.2 任务3.2 按键控制LED亮灭--中断方式

中断号 9 10 11 12 13 14 15 16 17
名称 T1 T2 T3 T4 P0INT UTX1 P1INT RF WDT
描述 定时器1捕获/比较、溢出
定时器2中断 定时器3捕获/比较、溢出 定时器4捕获/比较、溢出
I/O端口0外部中断 USART1发送完成 I/O端口1外部中断
RF通用中断 看门狗计时溢出
2 IPx_IPG2
1 IPx_IPG1
0 IPx_IPG0
IP0、IP1寄存器
IP1_x 0 0 1 1
IP0_x 0 1 0 1
优先级别 0 最低级别
1 2 3-最高级别
IP1与IP0寄存器相应位,两两组合,形 成两位二进制数字组合,决定对应中断 组的优先级别。
二、相关寄存器
位 位名称
7:6
--
5 IPx_IPG5
4 IPx_IPG4
3 IPx_IPG3
中断服务函数 CPU响应中断后所执行的响应处理程序
中断向量
中断服务程序的入口地址
一、基础概念
中断嵌套
在中断1正在执行过程中,中断2打断中断1,先去执行中断2的过程。
一、基础概念
中断优先级
在中断嵌套过程中,CPU通过中断优先级来确定先执行哪个中断请求。 中断优先级高先处理,低的后处理。
优先级高的中断可以打断优先级低的;反之,则不可;同级别的也 不可打断,处理完当前中断后,方可处理后续中断。
一、基础概念
中断服务函数
#define
CPU处理中断任务时,所要执行的代码。 #define
#define
#pragma vector = 中断向量
#define #define
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1、中断源
CC2530的CPU有18个中断源,每个中断源都有它自己的位于一系列SFR寄存器中的中断请求标志。
每个中断请求都需要中断使能位来使能或禁止,具体定义如下表:表1
(1) Hardware-cleared when interrupt service routine is called(当中断服务例程被调用后,硬件清除标志位)
(2) Additioal IRQ mask and IRQ flag bits exist.(附加中断屏蔽和中断标志位存在)
2、中断屏蔽
每个中断通过IEN0、IEN1、IEN2里的相应中断使能位来禁止或启用,具体如下表。
中断使能寄存器(IEN0,IEN1,IEN2)(0:中断禁止1:中断使能)
表2
注意某些外部设备会因为若干事件产生中断请求。
这些中断请求可以作用在端口0、端口1、端口2、定时器1、定时器2、定时器3、定时器4或者无线上。
这些外部设备在相应的寄存器里都有一个内部中断源的中断屏蔽位。
为了启用中断,需要以下步骤:
(1)清除中断标志位(Clear interrupt flags);
(2)如果有,则设置SFR寄存器中对应的各中断使能位;
(3)设置寄存器IEN0、IEN1和IEN2中对应的中断使能位为1;
(4)设置全局中断位IEN0.EA为1;
(5)在该中断对应的向量地址上,运行该中断的服务程序。
下图给出了所有中断源及其相关的控制和状态寄存器的概述图;当中断服务程序被执行后,阴影框的中断标志位将被硬件自动清除;
3、中断处理
当中断发生时,CPU就指向表1所描述的中断向量地址。
一旦中断服务开始,就只能够被更高优先级的中断打断。
中断服务程序由指令RETI终止,当执行RETI后,CPU将返回到中断发生时的下一条指令。
当中断发生时,不管该中断使能或禁止,CPU都会在中断标志寄存器中设置中断标志位。
当中断使能时,首先设置中断标志,然后在下一个指令周期,由硬件强行产生一个LCALL 到对应的向量地址,运行中断服务程序。
新中断的响应,取决于该中断发生时CPU的状态。
当CPU正在运行的中断服务程序,其优先级大于或等于新的中断时,新的中断暂不运行,直至新的中断的优先级高于正在运行的中断服务程序。
中断响应的时间取决于当前的指令,最快的为7个机器指令周期,其中1个机器指令周期用于检测中断,其余6个用来执行LCALL。
中断标志
4、中断优先级
中断可划分为6个中断优先组,每组的优先级通过设置寄存器IP0和IP1来实现。
为了给中断(也就是它所在的中断优先组)赋值优先级,需要设置IP0和IP1的对应位。
表4-1
表4-2 优先级设置
中断优先级及其赋值的中断源显示在表4-3中,每组赋值为4个中断优先级之一。
当进行中断服务请求时,不允许被同级或较低级别的中断打断。
表4-3 中断优先组
当同时收到几个相同优先级的中断请求时,采用表4-4所列的轮流检测顺序来判定哪个中断优先响应。
表4-4中断轮流检测顺序。