ZigBee案例笔记 -- 外部中断

news2024/9/27 9:25:46

文章目录

        • 1.中断概述
        • 2.中断屏蔽
        • 3.中断处理
        • 4.按键中断控制LED

1.中断概述

CC2530有18个中断源,每个中断源都有它自己的位于一系列 SFR 寄存器中的中断请求标志。相应标志位请求的每个中断可以分别使能或禁用,中断分别组合为不同的、可以选择的优先级别,中断源的定义和中断向量如表所示
在这里插入图片描述

2.中断屏蔽

每个中断请求可以通过设置中断使能 SFR 寄存器的中断使能位 IEN0,IEN1 或者 IEN2 使能或禁止,某些外部设备有若干事件,可以产生与外设相关的中断请求。这些中断请求可以作用在端口 0、端口 1、端口 2、定时器 1、定时器 2、定时器 3、定时器 4 和无线电上。对于每个内部中断源对应的 SFR 寄存器,这些外部设备都有中断屏蔽位
为了使能任一中断功能,应当采取下列步骤:
1、清除中断标志
2、如果有,则设置 SFR 寄存器中对应的各中断使能位为 1
3、设置寄存器 IEN0、IEN1 和 IEN2 中对应的中断使能位为 1
4、设置 IEN0 中的 EA 位为 1 使能全局中断
5、在该中断对应的向量地址上,运行该中断的服务程序

寄存器 IEN0,IEN1 和 IEN2 如图所示
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在上面3个寄存器中,IEN0.EA是对总中断进行使能控制,其他的是对所有中断源进行中断使能控制(包括端口0、端口1和端口2中断的使能即其他外设中断的使能)
I/O中断可以设置在外部信号的上升或下降沿触发。P0、P1 或 P2 端口都有中断使能位,对位于 IENl-2 寄存器内的端口所有的位都是公共的,如下:

  • IENI.P0 IE:P0 中断使能
  • IEN2.PI IE:P1 中断使能
  • IEN2.P2IE:P2 中断使能

除了这些公共中断使能之外,每个端口的位都有位于 SFR 寄存器 P0IEN、P1IEN 和 P2IEN 的单独的中断使能。即使配置为外设 I/O 或通用输出的 I/O 引脚使能时都有中断产生
在这里插入图片描述
中断使能的步骤如下

Created with Raphaël 2.3.0 总中断使能(EA) 端口中断使能(PxIE) 位中断使能(PxIEN) 触发沿设置(上升沿/下降沿)

1.使能IEN0中EA位为1,开总中断
2.设置寄存器IEN0、IEN1和IEN2中相应中断使能位为1
3.设置P0、P1、P2中指定引脚中断使能位为1
4.最后在寄存器PICTL中设置中断是上升沿或是下降沿触发

3.中断处理

当中断发生时,CPU 就指向中断向量地址。一旦中断服务开始,就只能够被更高优先级的中断打断。中断服务程序由中断指令 RETI(从中断指令返回)终止,当 RETI 执行时,CPU 将返回到中断发生时的下一条指令。当中断发生时,不管该中断使能或禁止,CPU 都会在中断标志寄存器中设置中断标志位。如果当设置中断标志时中断使能,那么在下一个指令周期,由硬件强行产生一个 LCALL 到对应的向量地址,运行中断服务程序。
中断的响应需要不同的时间,取决于该中断发生时 CPU 的状态。当 CPU 正在运行的中断服务程序,其优先级大于或等于新的中断时,新的中断暂不运行,直至新的中断的优先级高于正在运行的中断服务程序。在其他情况下,中断响应的时间取决于当前的指令,最快响应一个中断的时间是 7 个机器指令周期,其中 1 个机器指令周期用于探测中断,其余 6 个用来执行 LCALL

注意
如果一个中断被禁用且中断标志被轮询, 8051 汇编指令 JBC 不能用于轮询中断标志,当设置时要把它清除。如果使用了,中断标志可能立即重新生效。

TCON、S0CON、S1CON、IRCON、IRCON2是CC2530的5个中断标志寄存器
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
当中断条件发生在 I/O 引脚之一上面,P0-P2 中断标志寄存器 P0IFG、P1IFG 或 P2IFG 中相应的中断状态标志将设置为 1。不管引脚是否设置了它的中断使能位,中断状态标志都被设置。当中断已经执行,中断状态标志被清除,该标志写入 0。这个标志必须在清除 CPU 端口中断标志(PxIF)之前被清除

  • P0IFG: P0 中断标志
  • P1IFG: P1 中断标志
  • P2IFG: P2 中断标志

在这里插入图片描述I/O中断方式由寄存器PICTL控制
在这里插入图片描述

4.按键中断控制LED

实现按键key1控制LED1和LED2交替闪烁

#include <ioCC2530.h>

#define LED1 P1_0
#define LED2 P1_1

void main()
{
	P0SEL &= ~0x02;
	P0INP |= 0x02;					// 上拉
	P0IEN |= 0x02;					// P0_1 设置为中断方式
	PICTL |= 0x01;					// 下降沿触发

	EA = 1;							// 开总中断
	IEN1 |= 0x20;					// P0设置为中断模式
	P0IFG |= 0x00;					// 初始化中断标志位

	P1SEL &= ~0x03;
	P1DIR |= 0x03;

	LED1 = 1;
	LED2 = 0;

	while(1);
}

#pragma vector = P0INT_VECTOR	// 端口P0的中断处理函数
__interrupt void P0_ISR(void)
{
	if(P0IFG > 0)
	{
		LED1 = !LED1;
		LED2 = !LED2;

		P0IFG = 0;			// 清除P0_0中断标志
		P0IF = 0;			// 清除P0中断标志
	}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/139959.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

分布式ID之雪花算法

分布式ID常见生成策略 分布式ID生成策略常见的有如下几种: 数据库自增ID。UUID生成。Redis的原子自增方式。数据库水平拆分&#xff0c;设置初始值和相同的自增步长。批量申请自增ID。雪花算法。百度UidGenerator算法(基于雪花算法实现自定义时间戳)。美团Leaf算法(依赖于数据…

【ZooKeeper】第一章 快速入门

【ZooKeeper】第一章 快速入门 文章目录【ZooKeeper】第一章 快速入门一、概念二、安装1.环境准备2.安装3.配置二、命令操作1.数据模型2.服务端常用命令3.客户端常用命令一、概念 ZooKeeper 是 Apache Hadoop 项目下的一个子项目&#xff0c;是一个树形目录服务ZooKeeper 翻译…

SpringBoot使用SchedulingConfigurer实现多个定时任务多机器部署问题

目录一、使用SchedulingConfigurer实现多个定时任务二、定时任务多机器部署解决方案三、基于redis实现的代码示例3.1、基于redis实现的概述3.2、基于redis实现的代码3.2.1、代码目录结构3.2.2、引入依赖包3.2.3、配置文件新增redis连接配置3.2.4、自定义redis锁注解类3.2.5、自…

Linux 块设备驱动

1.块设备是针对存储设备的&#xff0c;比如 SD 卡、 EMMC、 NAND Flash、 Nor Flash、 SPI Flash、机械硬盘、固态硬盘等。因此块设备驱动其实就是这些存储设备驱动&#xff0c;块设备驱动相比字符设备驱动的主要区别如下&#xff1a; ①、块设备只能以块为单位进行读写访问&am…

【阶段二】Python数据分析Pandas工具使用07篇:探索性数据分析:数据的描述:数据的集中趋势

本篇的思维导图: 探索性数据分析:数据的描述 数据的描述是为了让数据使用者或开发者更加了解数据,进而做到“心中有数”,其描述过程侧重于统计运算和统计绘图。通过统计运算可以得到具体的数据特征,如反映集中趋势中的均值水平、中位数、分位数和众数等;反映分散趋势的方…

Unity脚本 --- VS调试工具

一般游戏逻辑调试的时候用的都是VS调试工具来进行调试 1.在Unity脚本中启动调试后并不会立刻开始调试&#xff0c;还需要我们在Unity中点击play&#xff08;游戏运行&#xff09;后调试才会开始进行 2.在调试的时候点击f11可以逐语句调试&#xff0c;同时当我们在调试的时候想…

螺旋桨k线的意义?

相信大家即使没坐过直升机&#xff0c;也很看见过螺旋桨吧&#xff1f;它的动能巨大&#xff0c;刮起的旋风能支撑起一架飞机的升降。但大家是否知道&#xff0c;在K线技术分析中&#xff0c;也有一种特殊的形态叫“螺旋桨”呢&#xff1f; 三、螺旋桨K线的形态概念 如下图&am…

2023-1-4目前市面上存在的树莓派rp2040控制器

目前市面上存在的树莓派rp2040控制器 1、树莓派pico原装 2、微雪rp2040 3、Ultimate pico rp2040兼容树莓派pico RaspberryPi Pico是一款低成本&#xff0c;高性能的微控制器开发板&#xff0c;具有灵活数字接口。硬件上&#xff0c;采用Raspberry Pi官方自主研发的RP2040微控…

高精度PWM脉宽调制信号转模拟信号隔离变送器0-5V/0-10V/1-5V,0-10mA/0-20mA/4-20mA

主要特性:>>精度等级&#xff1a;0.1级。产品出厂前已检验校正&#xff0c;用户可以直接使用>>辅助电源&#xff1a;8-32V 宽范围供电>>PWM脉宽调制信号输入: 1Hz~10KHz>>输出标准信号&#xff1a;0-5V/0-10V/1-5V,0-10mA/0-20mA/4-20mA等&#xff0c;…

国家法定节假日安排,节假日查询API接口有哪些?

节假日&#xff0c;对于我们每个人来说都息息相关。特别是国家法定节假日的安排&#xff0c;大家都希望清楚知道并合理安排好。因为&#xff0c;节假日是国务院统一安排的&#xff0c;我们就为此编写了这样一个节假日查询API接口&#xff0c;供大家方便查询。 节假日API接口正广…

佳能6D误格式化覆盖后的恢复方法

佳能6D算是佳能众多摄像机中的明星机型&#xff0c;销量很大。同样遇到的问题也很多&#xff0c;今天要说的案例就是佳能6D格式化覆盖后的恢复案例&#xff0c;比较特殊的是其结构部分全部覆盖了&#xff0c;下面我们来看看这个案例。故障存储:64G sd卡&#xff0c;采用exFAT文…

软件项目如何进行任务分配,减少冲突?

1、任务分配并非平均分配 项目经理往往有个认知误区&#xff0c;认为把工作任务详细分解&#xff0c;平均分配给每个人&#xff0c;不偏不倚&#xff0c;公平公正就没有问题。但在实际开发过程中&#xff0c;这样很容易出问题&#xff0c;尤其是到项目后期&#xff0c;掉链子的…

Python中的时间序列数据操作总结

时间序列数据是一种在一段时间内收集的数据类型&#xff0c;它通常用于金融、经济学和气象学等领域&#xff0c;经常通过分析来了解随着时间的推移的趋势和模式 Pandas是Python中一个强大且流行的数据操作库&#xff0c;特别适合处理时间序列数据。它提供了一系列工具和函数可以…

意想不到的前端三个小妙招

大厂面试题分享 面试题库前端面试题库 &#xff08;面试必备&#xff09; 推荐&#xff1a;★★★★★地址&#xff1a;前端面试题库整理下本人在工作中撸代码遇到的一些刚看时一脸懵逼&#xff0c;实则很简单就能解决的小妙招&#xff0c;希望对大家有所帮助哟~伪元素动态改变…

「诗人艺术家ll著名诗人」胭脂茉莉十四行诗10首

【诗人艺术家ll著名诗人】胭脂茉莉十四行10首胭脂茉莉诗人简介&#xff1a;胭脂茉莉&#xff0c;女&#xff0c;江苏人&#xff0c;年少习诗&#xff0c;作家、诗人。评论及随笔见诸媒体及报刊&#xff0c;诗歌被选编入海内外多种选本及刊物&#xff0c;其主要代表作有现代禅诗…

vue3-init

Vue3快速上手 1.Vue3简介 2020年9月18日&#xff0c;Vue.js发布3.0版本&#xff0c;代号&#xff1a;One Piece&#xff08;海贼王&#xff09;耗时2年多、2600次提交、30个RFC、600次PR、99位贡献者github上的tags地址&#xff1a;https://github.com/vuejs/vue-next/release…

maven中的scope

provided: 编译运行时期&#xff0c;目标容器已经提供&#xff0c;打jar包时候不带optional&#xff0c;依赖传递test: 举例子junit&#xff0c;为什么Test在src的java蓝包的测试类的方法上面不能用&#xff1f;src的java绿包里的测试类的方法上可以用。 依赖传递&#xff1a;间…

【数据篇】32 # 如何选择合适的方法对数据进行可视化处理?

说明 【跟月影学可视化】学习笔记。 从原始数据中过滤出有用的信息 下面通过航拍公园人群分布例子&#xff0c;按照某些属性对数据进行过滤&#xff0c;再将符合条件的结果展现出来。 数据来源&#xff1a;https://github.com/akira-cn/graphics/blob/master/data/park-peo…

Java on Azure Tooling 2022年12月更新|Azure SDK 参考书代码样例支持及用户体验提升

作者&#xff1a;Jialuo Gan - Program Manager, Developer Division at Microsoft 排版&#xff1a;Alan Wang 大家好&#xff0c;欢迎回到12月的 Java on Azure Tooling 的更新。首先&#xff0c;提前祝大家新年快乐。在这次更新中&#xff0c;我们将介绍 Azure SDK 参考书的…

Linux系统之部署MxsDoc个人文件管理系统

Linux系统之部署MxsDoc个人文件管理系统一、MxsDoc介绍1.MxsDoc简介2.MxsDoc功能3.MxsDoc应用场景二、检查本地系统环境1.检查系统版本2.检查系统内核三、下载MxsDoc软件包1.创建软件目录2.下载MxsDoc软件3.查看下载软件四、部署MxsDoc1.解压MxsDoc软件包2.一键部署MxsDoc五、登…