CC2530中断源

合集下载

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

CC2530中断入门
IEN1 |=0x20;
//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

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外部中断实现简单的输入输出控制,并能够分析中断异常情况。

情感态度价值观目标则是培养学生对嵌入式系统开发的兴趣,提高他们解决实际问题的能力。

二、教学内容本课程的教学内容主要包括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闪烁

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外部中断

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协议栈定时器中断的工作原理

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亮灭--中断方式

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. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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中断轮流检测顺序。

相关文档
最新文档