cc2530入门教程-03cc2530的中断系统及外部中断应用

一只爱蜜蜂的小学习 一只爱蜜蜂的小学习     2022-09-05     793

关键词:

第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】实训项目源代码及注释

 1 #include "ioCC2530.h"
 2 
 3 #define  LED6   P1_4
 4 #define  LED3   P1_0
 5 #define  LED4   P1_1
 6 /*===================延时函数=========================*/
 7 void Delay(unsigned int t)
 8 {
 9   while(t--);
10 }
11 /*==================端口初始化函数=====================*/
12 void Init_Port()
13 {
14   //将P1_0、P1_1和P1_4设置为通用I/O端口功能
15   P1SEL &= ~0x13;   
16   //将P1_0、P1_1和P1_4的端口传输方式设置为输出
17   P1DIR |= 0x13;   
18   LED6 = 0;
19   LED3 = 0;
20   LED4 = 0;
21 }
22 /*==================跑马灯子函数=====================*/
23 void LED_Running()
24 {
25   LED3 = 1;
26   Delay(50000);
27   LED4 = 1;
28   Delay(50000);
29   LED3 = 0;
30   Delay(50000);
31   LED4 = 0;
32   Delay(50000);
33 }
34 /*===============外部中断初始化函数==================*/
35 void Init_INTP()
36 {
37   IEN2 |= 0x10;         //端口1中断使能
38   P1IEN |= 0x04;        //端口P1_2外部中断使能
39   PICTL |= 0x02;        //端口P1_0到P1_3下降沿触发 
40   EA = 1;               //使能总中断
41 }
42 /*================外部中断1服务函数====================*/
43 #pragma vector = P1INT_VECTOR     //外部中断1的向量入口
44 __interrupt void Int1_Sevice()
45 {
46   LED6 = ~LED6;
47 /*先清除引脚标志位,再清除端口标志位,否则会不断进入中断*/
48   P1IFG &= ~ 0x04;        //软件清除P1_2引脚的标志位
49   P1IF = 0;               //软件清除P1端口组的标志位
50 }
51 /*====================主函数==========================*/
52 void main()
53 {
54   Init_Port();          //初始化通用I/O端口
55   Init_INTP();          //初始化外部中断
56   while(1)
57   {
58     LED_Running();     //跑马灯
59   }
60 }

 

cc2530入门教程-05cc2530的串行接口原理与应用

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

cc2530入门教程-06cc2530的adc工作原理与应用

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

cc2530定时器使用

...明...1协议栈函数使用...2设置初始化定时器...2回调函数(中断服务函数)3启动定时器...3停止定时器...4寄存器操作...4查询方式...4中断方式(使用定时器3)7 说明    依据数据手冊可知CC2530总共同拥有4个定时器,可是... 查看详情

cc2530入门教程-增强版基础技能综合实训案例(基础版)-题目需求

【CC2530入门教程-增强版】基础技能综合实训案例(基础版)-题目需求广东职业技术学院 欧浩源一、引用  不管是简单的单片机应用,还是复杂的嵌入式系统,在我看来它们的本质结构是差不多的,都离不开“内核+外... 查看详情

stc8051与cc2530单片机有撒不同

...了领先的RF收发器的优良性能,业界标准的增强型8051CPU,系统内可编程闪存,8-KBRAM和许多其它强大的功能。CC2530有四种不同的闪存版本:CC2530F32/64/128/256,分别具有32/64/128/256KB的闪存。CC2530具有不同的运行模式,使得它尤其适应... 查看详情

zigbee折腾之旅:cc2530最小系统

...于是乎,在百度一番后就有了下面这篇文章。 作为片上系统Soc,CC2530的集成度是非常高的,这也方便了我们开发者。搭建它的最小系统比较简单。 下面一张图就能代表一切:  上图是CC253x芯片作为zigbee主控制器的基本电路(2 查看详情

cc2530的外部中断(代码片段)

中断介绍什么是中断?在C语言中是没有中断的,一个标准的C语言程序,是从main函数开始执行的,main函数退出或者标准库中定义的一些退出函数被调用,程序也就结束了。对于单片机系统,如果硬件发生了一些事件需要应用程... 查看详情

cc2530定时器(代码片段)

...输入信号进行计数,当计数值达到设定要求时,向CPU提出中断处理请求,从而实现定时或者计数功能的外设。    定时/计数器的最基本工作原理是进行计数。不管是定时器还是计数器,本质上都是计数器,可以进... 查看详情

cc2530强化实训03定时器间隔定时实现按键n连击(代码片段)

...bee协议栈下完成。其中第一个题目“仓库温湿度智能控制系统”考查了按键单击、双击和三连击。为了让大家更好的掌握按键的复杂处理思路,在这里通过一个具体的实训案例,讲述通过间隔定时实现按键 查看详情

cc2530入门教程-增强版基础技能综合实训案例(基础版)-终端源码

【CC2530入门教程-增强版】基础技能综合实训案例(基础版)-终端源码广东职业技术学院欧浩源 一、关于硬件电路    关于这个综合实训案例,具体需求详见《【CC2530入门教程-增强版】基础技能综合实训案例(... 查看详情

cc2530学习路线-基础实验-gpio按键控制led灯亮灭(代码片段)

...识1.1新大陆Zigbee模块按键电路图1.2CC2530相关寄存器1.3CC2530中断走向图1.4使用C语言为51单片机编写中断程序1.5*函数指针2.程序代码THEEND1.前期预备知识1.1新大陆Zigbee模块按键电路图由上图可知,Zigbee模块的SW1按钮连接在P1.2端口上,... 查看详情

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

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

cc2530-----串口透明传输分析

...由main()函数开始执行,main()函数共做了2件事:一是系统初始化,另外一件是开始执行轮转查询式操作系统intmain(void){.......//Initializetheoperatingsystemosal_ini 查看详情

cc2530的adc采集外部电压

...在zigbee的组网中加入烟雾传感器的模块,所以需要用到cc2530的ADC对传感器输出的模拟信号进行采样。下面是自己对实现用CC2530的ADC采集外部电压的程序过程。以下是ADC的配置:1#include<iocc2530.h>2#include"adc.h"3#include"uart.h"4#include... 查看详情

无线通信篇|zstack协议栈cc2530zigbeezstack协议栈组网项目及详细讲解篇

.../BV1Ew411o7Fp 物联网无线通信技术,ZigBee无线传感网络CC2530最大的特点就是一个拥有无线收发器(RF)的单片机,既能实现单片机功能,也能实现无线传输Zstack协议栈是ZigBee协议栈里的翘楚,是ZigBee组网的首选协议栈 项目实... 查看详情

简述cc2530与8051单片机的区别

简述cc2530与8051单片机的区别最大区别是2530是16位的单片机,8051是8位单片机是比较简单的单片机参考技术A简述如下:处处都是区别。 查看详情

cc2530属于啥单片机

...器(TI)出的专用于zigbee协议的51核单片机(CPU,时钟、中断等跟51一样),外设比教科书上讲的51丰富(主要多了用于实现zigbee协议栈的硬件),应该属于增强型51单片机吧。https://wenku.baidu.com/view/ecfa9704bed5b9f3f90f1ce1.htmlTI官网的... 查看详情

基于cc2530设计的自动晾衣杆

...服。针对这来问题开始研究,通过对智能晾衣架控制系统的设计与实现的不断探究,得到了比较好的设计思路。使用CC2530单片机的ADC接口采集雨滴传感器的模拟值,得到雨滴传感器的雨滴测量值之后, 查看详情