关于CC2530入门新手需要知道的知识(二)中断

中断

中断的概念

在内核与外设之间存在着两种交流的方式,一种叫轮询,另一种叫中断,轮询的方式工作效率是极低的,且不能及时响应紧急事件;终端系统使内核具备了应对突发事件的能力。

在CPU执行某个具体的命令时,如果在这个时候系统出现了某种急需处理的情况,CPU暂停正在执行的任务,转而去执行另外一项任务。处理结束后,CPU自动返回到原来暂停的程序去继续执行。储蓄在执行过程中被外部打断的情况称为中断。

1)中断服务函数: 内核响应中断后执行的相应处理程序。

2)中断向量: 中断服务程序的入口地址。每个中断源都对应一个固定的入口地址。当内核响应中断请求时,就会暂停当前的程序执行,然后跳转到该入口地址执行代码。

CC2530的中断系统

CC2530中有18个中断源,每个中断源都由一系列的特殊功能寄存器来进行控制。可以编程设置相关的特殊功能寄存器,设置18个中断源的优先级以及使能中断申请响应等。

在这里插入图片描述

CC2530的中断处理函数编写方法

中断服务函数与普通的程序函数不同,有特定的书写格式:

#pragma vector = <中断向量>
_ _interrupt void <函数名称>(void)
{
//在这里编写具体的中断处理函数
}

注解:

1)在每个中断服务函数之前都要加上一句起始语句:

#pragma vector = <中断向量>

中断向量表示的意思是,接下来要写的中断服务函数是为哪一个中断源服务的,该语句有两种具体写法:

#pragma vector = 0x7B

表示的是中断向量的入口地址。

#pragma vector = P1INT_VECTOR

头文件“ioCC2530.h"中的宏定义。

2)_ _interrupt关键字表示该函数是一个中断服务函数,<函数名称>可以自定义,函数体不能带有参数,也不能带有返回值。

CC2530的外部中断

CC2530的P0、P1、P2端口中的每个引脚都具有外部中断输入功能,要使某些引脚具有外部中断功能,需要对IENx寄存器、PxIEN寄存器和PICTL寄存器进行适当的配置。除了各个中断源都有自己的中断使能开关之外,中断系统还有一个总开关,可以同EA=1;来打开总中断。

P0、P1、P2的端口分别使用P0IF、P1IF、P2IF作为中断标志位,任何一个端口组上的引脚产生外部中断时,都会将对应端口组的中断标志位自动置位。这里需要注意的一点是:外部中断标志必须在中断服务函数中手工清除,否则cpu会反复进入中断状态。端口状态标志寄存器P0IFG、P1IFG和P2IFG,分别对应3个端口中各引脚的中断触发状态,当某个引脚发生外部中断触发时,对应的标志位会自动置位,这个标志同样需要手工清除。

外部中断控制LED灯

我们以这个实验为例,进行一下有关CC2530中断方面的工程源代码讲解。

IO口方面的控制:

P1SEL &= ~0x01;//设置P1_0为通用IO口
P1DIR |= 0x01;//P10定义为输出

按键key1的配置:

P0IEN |= 0x02;//设置P0.1为中断方式
PICTL |= 0X01;//下降沿触发
IEN1 |= 0x20;//允许P0口中断
P0IFG = 0x00;//初始化中断标志位
EA=1; //打开总中断

中断处理函数:

#pragma vector = P0INT_VECTOR //格式:#pragma vector = 中断向量,紧接着是中断处理 程序
__interrupt void P0_ISR(void) {
if((P0IFG&0x02)==0x02) 
{ 
P0IFG = 0; //清中断标志 
Delayms(10); //去除抖动
LED1=~LED1; //改变 LED1 状态 
}
P0IFG = 0; //清中断标志 
P0IF = 0; //清中断标志
}

大概关于中断方面的知识讲到这里也就结束了。
最近在读傅雷家书,看到了一段很有哲理的话,送给大家:
得失成败尽量置身事外,但求竭其所能,无愧于心。
希望大家每个人都能成为命运的主人,做一位成功者

  • 9
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值