第3课  CC2530的中断系统及外部中断应用

广东职业技术学院  欧浩源

一、中断相关的基础概念

 内核外设之间的主要交互方式有两种:轮询中断。 轮询的方式貌似公平,但实际工作效率很低,且不能及时响应紧急事件;中断系统使得内核具备了应对突发事件的能力。

在执行CPU当前程序时,由于系统中出现了某种急需处理的情况,CPU暂停正在执行的程序,转而去执行另外一段特殊程序来处理出现的紧急事务,处理结束后,CPU自动返回到原来暂停的程序中去继续执行。 这种程序在执行过程中由于外界的原因而被中间打断的情况,称为中断

两个重要的概念:

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

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

二、CC2530的中断系统

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

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

中断服务函数与一般自定义函数不同,有特定的书写格式

<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、P1IFP2IF作为中断标志位,任何一个端口组上的引脚产生外部中断时,都会将对应端口组的中断标志自动置位。注意,外部中断标志必须在中断服务函数中手工清除,否则CPU会反复进入中断。 端口状态标志寄存器P0IFGP1IGFP2IFG,分别对应3个端口中各引脚的中断触发状态,当某引脚发生外部中断触发时,对应的标志位会自动置位,这个标志同样需要手工清除。

五、实训案例:外部中断输入控制LED灯

【1】设计外部中断初始化函数Init_INTP()

外部中断初始化函数,主要是完成跟中断相关的特殊功能寄存器配置工作:

<1> 配置IENx寄存器,使能端口组的中断功能。

<2> 配置PxIEN寄存器,使能具体的外部中断引脚。

<3> 配置PICTL寄存器,设置中断触发方式。

【2】设计外部中断服务函数Int1_Sevice()

在编写中断服务函数的时候,书写格式要正确,中断向量不能搞错。特别要注意:在函数里面把端口组和引脚的标志位清除,否则CPU将会反复进入中断,必须先清除引脚标志位PxIFG,再清除端口组标志位PxIF。

【3】实训项目源代码及注释

 #include "ioCC2530.h"

 #define  LED6   P1_4
#define LED3 P1_0
#define LED4 P1_1
/*===================延时函数=========================*/
void Delay(unsigned int t)
{
while(t--);
}
/*==================端口初始化函数=====================*/
void Init_Port()
{
//将P1_0、P1_1和P1_4设置为通用I/O端口功能
P1SEL &= ~0x13;
//将P1_0、P1_1和P1_4的端口传输方式设置为输出
P1DIR |= 0x13;
LED6 = ;
LED3 = ;
LED4 = ;
}
/*==================跑马灯子函数=====================*/
void LED_Running()
{
LED3 = ;
Delay();
LED4 = ;
Delay();
LED3 = ;
Delay();
LED4 = ;
Delay();
}
/*===============外部中断初始化函数==================*/
void Init_INTP()
{
IEN2 |= 0x10; //端口1中断使能
P1IEN |= 0x04; //端口P1_2外部中断使能
PICTL |= 0x02; //端口P1_0到P1_3下降沿触发
EA = ; //使能总中断
}
/*================外部中断1服务函数====================*/
#pragma vector = P1INT_VECTOR //外部中断1的向量入口
__interrupt void Int1_Sevice()
{
LED6 = ~LED6;
/*先清除引脚标志位,再清除端口标志位,否则会不断进入中断*/
P1IFG &= ~ 0x04; //软件清除P1_2引脚的标志位
P1IF = ; //软件清除P1端口组的标志位
}
/*====================主函数==========================*/
void main()
{
Init_Port(); //初始化通用I/O端口
Init_INTP(); //初始化外部中断
while()
{
LED_Running(); //跑马灯
}
}

【CC2530入门教程-03】CC2530的中断系统及外部中断应用的更多相关文章

  1. STM8的中断系统以及外部中断详解

    STM8具有最多32的中断系统,在中断的处理上类似于cortexm系列的芯片,首先是每个中断的向量都是固化在系统内部的,用户需要向相应的中断向量flash位置写入中断处理函数,其二,每个中断向量都具有 ...

  2. 【CC2530入门教程-增强版】基础技能综合实训案例(基础版)-上位机源码

    [CC2530入门教程-增强版]基础技能综合实训案例(基础版)-上位机源码 广东职业技术学院  欧浩源 一.需求分析 按照指定参数打开串口,与测控终端建立数据传输通道,并根据应用要求实现程序逻辑,具体 ...

  3. 【CC2530入门教程-01】IAR集成开发环境的建立与项目开发流程

    [引言] 本系列教程就有关CC2530单片机应用入门基础的实训案例进行分析,主要包括以下6部分的内容:1.CC2530单片机开发入门.2.通用I/O端口的输入和输出.3.外部中断初步应用.4.定时/计 ...

  4. 【CC2530入门教程-06】CC2530的ADC工作原理与应用

    第6课  CC2530的ADC工作原理与应用 广东职业技术学院  欧浩源 一.A/D转换的基本工作原理 将时间上连续变化的模拟量转化为脉冲有无的数字量,这一过程就叫做数字化,实现数字化的关键设备是AD ...

  5. 【CC2530入门教程-01】CC2530微控制器开发入门基础

    [引言] 本系列教程就有关CC2530单片机应用入门基础的实训案例进行分析,主要包括以下6部分的内容:[1]CC2530微控制器开发入门基础.[2]通用I/O端口的输入和输出.[3]外部中断初步应用. ...

  6. 【CC2530入门教程-04】CC2530的定时/计数器原理与应用

    第4课  CC2530的定时/计数器原理与应用 广东职业技术学院  欧浩源 一.定时/技术器的基本原理 定时/计数器,是一种能够对内部时钟信号或外部输入信号进行计数,当计数值达到设定要求时,向CPU提 ...

  7. 【CC2530入门教程-05】CC2530的串行接口原理与应用

    第5课  CC2530的串行接口原理与应用 广东职业技术学院  欧浩源 一.并行通信与串行通信 微控制器与外设之间的数据通信,根据连线结构和传送方式的不同,可以分为两种:并行通信和串行通信. 并行通信 ...

  8. CC2530入门教程-02】CC2530的通用I/O端口输入和输出控制

    第2课  CC2530的通用I/O端口输入和输出控制 广东职业技术学院  欧浩源 一.CC2530的引脚概述 CC2530微控制器采用QFN40封装,有40 个引脚.其中,有21个数字I/O端口,其中 ...

  9. 【CC2530入门教程-02】CC2530的通用I/O端口输入和输出控制

    第2课  CC2530的通用I/O端口输入和输出控制 小蜜蜂科教 / 广东职业技术学院  欧浩源 [通用I/O端口视频教程:https://v.qq.com/x/page/x0793aol7us.ht ...

随机推荐

  1. 最新的chart 聊天功能( webpack2 + react + router + redux + scss + nodejs + express + mysql + es6/7)

    请表明转载链接: 我是一个喜欢捣腾的人,没事总喜欢学点新东西,可能现在用不到,但是不保证下一刻用不到. 我一直从事的是依赖angular.js 的web开发,但是我怎么能一直用它呢?看看最近火的一塌糊 ...

  2. JAVA的Executor框架

    Executor框架分离了任务的创建和执行.JAVA SE5的java.util.concurrent包中的执行器(Executor)管理Thread对象,从而简化了并发编程.Executor引入了一 ...

  3. Linux设备中的并发控制

    一.自旋锁1.定义自旋锁:spinlock_t lock2.初始化自旋锁:spin_lock_init(lock)3.获得自旋锁:spin_lock(lock)4.释放自旋锁:spin_unlock( ...

  4. Android studio 打开别人的工程

    Android Studio正确打开项目只需要两步,或者说找到两个文件进行简单的修改就好,最好在打开之前进行修改 (1)gradle-wrapper.properities,在项目下按照如下路径可以找 ...

  5. MyBatis源码解读(1)——SqlSessionFactory

    在前面对MyBatis稍微有点了解过后,现在来对MyBatis的源码试着解读一下,并不是解析,暂时定为解读.所有对MyBatis解读均是基于MyBatis-3.4.1,官网中文文档:http://ww ...

  6. Natas Wargame Level 13 Writeup(文件上传漏洞,篡改file signature,Exif)

    aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAqMAAADDCAYAAAC29BgbAAAABHNCSVQICAgIfAhkiAAAIABJREFUeF

  7. 机器学习:Python实现聚类算法(一)之K-Means

    1.简介 K-means算法是最为经典的基于划分的聚类方法,是十大经典数据挖掘算法之一.K-means算法的基本思想是:以空间中k个点为中心进行聚类,对最靠近他们的对象归类.通过迭代的方法,逐次更新各 ...

  8. 前端小课堂 js:函数的创建方式及区别

    js 函数的创建大体有这几种方式: -1-函数表达式(函数字面量): 说白了就是把一个函数赋值给了一个变量. var fun1 = function(index){ alert(index); } f ...

  9. 你会python不?当你听到这个问题要谨慎回答!!!

    问:你会python不? 答:python啊,略微有点小研究,虽然不精通,但是写写网络小爬虫,搜集搜集网络资源,学习视频什么的,还是手到擒来的...(for循环一小时中) 旁白:然而你没有明白人家的真 ...

  10. Vulkan Tutorial 05 逻辑设备与队列

    操作系统:Windows8.1 显卡:Nivida GTX965M 开发工具:Visual Studio 2017 Introduction 在选择要使用的物理设备之后,我们需要设置一个逻辑设备用于交 ...