嵌入式(三)中断解析 | 中断基本概念 CC2530中断系统 中断编程全解析

文章目录

  • 1中断的概念和作用
    • 1.1 概念
    • 1.2 作用
    • 1.3 中断 其他概念
  • 2. CC2530的中断系统
  • 3 中断编程
    • 3.1 中断配置
      • 3.1.1 使能端口组的中断功能
      • 3.1.2 使能当前端口组有哪些端口引脚中断
      • 3.1.3 设置中断触发方式
    • 3.2 中断处理函数编写
      • 3.2.1 基本编写格式
      • 3.2.2 识别触发外部中断的端口Port
      • 3.2.3 识别触发外部中断的引脚(Pin)

注意一般是

不同端口上有不同引脚

1中断的概念和作用

1.1 概念

指CPU在执行当前程序的时候,由于系统中出现某种急需要处理的情况,CPU暂停正在执行的程序,转而执行别的一段特殊处理程序来处理出现的紧急事物,处理结束后,CPU自动返回原先暂停的程序中断继续

1.2 作用

1 提高工作效率

2 具备应对突发状况的能力

1.3 中断 其他概念

主程序 在发生中断前,CPU正常执行的处理程序。

中断源 引起中断的原因,或发生中断申请的来源

中断请求 中断源要求CPU提供服务的请求

断点 CPU响应中断后,主程序被打断的位置

中断处理函数 CPU响应中断后所执行的相应处理程序

中断向量 中断处理函数的入口地址,当CPU响应中断请求时,会跳转到该地址去 执行代码

CC2530的中断源如下

在这里插入图片描述

中断是有优先级的,按照不同优先级可以看到如下的系统

2. CC2530的中断系统

CC2530将18个中断源划分成6个中断优先级组IPG0~IPG5, 每组包括3个中断源

在这里插入图片描述

用户可以指定这6个中断优先组的优先级 (称作用户指定优先级)可以设置0~3级

其中0级属于最低优先级,3级为最高优先级。

为了保证中断系统的正常工作 还存在(自然优先级)的一些规则

1 如果多个组被设置成相同级别,则组号小的要比组 号大的优先级高。

2 同一组中包括的3个中断源,最左侧的优先级最高, 最右侧的优先级最低。

如何设置中断优先级?

通过IP1和IP0两个寄存器

由于每个组可能的情况一共是0,1,2三种情况,所以每个组需要2位来代表不同的优先级,那么至少需要两个寄存器,IP1是高位,IP0是低位,每个寄存器最高的2位空置不使用

从右到左,依次为0.1.2.3.4.5组

具体来说,比如我要设置0组优先级为3

IP0的[0]设置为0

IP1的[0]设置为1

再举例

要设置中断源的优先级为P0INT>P1INT>P2INT

查表可知

P0INT对应的组为 IPG5

P1INT对应的组为 IPG4

P2INT对应的组为 IPG1

则可使用以下代码实现。

IP1 = 0x30;   //IPG5级别为3,IPG4级别为2,IPG1级别为1,其他组级别为0
IP0 = 0x22; 

3 中断编程

3.1 中断配置

3.1.1 使能端口组的中断功能

相当于是上面有18种终端,对应不同的端口

我们首先要打开端口组中断的开关,比如P0,P1,P2

寄存器IEN1和IEN2

需要通过IEN1和IEN2特殊功能寄存器。

在这里插入图片描述

3.1.2 使能当前端口组有哪些端口引脚中断

实际上一个端口组对应多个引脚,所以我们需要指定

需要设置当前端口组中哪几个引脚具有外部中断功能,将不需要使用外部中断的引脚屏蔽掉。使用Px_IEN寄存器。

寄存器Px_IEN

在这里插入图片描述

3.1.3 设置中断触发方式

用PICTL寄存器

触发方式有

1)电平触发

①高电平触发:输入信号为高电平时会引起中断请求

②低电平触发:输入信号为低电平时会引起中断请求

电平触发引起的中断,在中断处理完成后,如果输入电平 仍旧保持有效状态,则会再次引发中断请求,适用于连续 信号检测,如外接设备故障信号检测。

2)边沿触发

①上升沿触发:输入信号出现由低电平到高电平的跳变时 会引起中断请求。

②下降沿触发:输入信号出现由高电平到低电平的跳变时 会引起中断请求。

在这里插入图片描述

4 设置外部中断优先级

用刚刚讲到的IP1和IP0两个寄存器

5 使能系统总中断

使用EA寄存器

除了各个中断源有自己的中断开关之外,中断系统还有一 个总开关。如果说各个中断源的开关相当于楼层各个房间 的电闸,则中断总开关相当于楼宇的总电闸。中断总开关 控制位是EA位,在IEN0寄存器中

IEN0寄存器可以进行位寻址,因此要使能总中断,可以直

接采用如下方法实现。

EA =1; //使能总中断

3.2 中断处理函数编写

刚刚进行了中断使能和初始化,接下来我们重点介绍中断后的检测

中断处理函数就是在中断后进行的操作

比如我想要按键之后亮灯

那么就可以在中断处理函数种进行亮灯的代码编写

3.2.1 基本编写格式

中断服务处理的编写格式具体如下

中断向量可以查上面的表

#pragma vector=<中断向量> //编译指示

__interrupt void <函数名称> (void)

{

/*编写中断处理程序*/

}

“__interrupt ”表示函数是一个中断处理函数,函数体

不能带参数或有返回值。注意: “interrupt”前面的“_”

是两个短下画线构成的。

3.2.2 识别触发外部中断的端口Port

寄存器用P0IF、P1IF和P2IF

先识别

P0、P1和P2口分别使用P0IF、P1IF和P2IF作为中断标志位,任何一个端口组的I/O口产生外部中断时,会将对应端口组的外部中断标志位自动置位。例如,本任务中当SW1按下后,P1IF会变成1,此时CPU将进入P1口中断处理函数中处理事件。

if(P1IF==1

注意使用后要清除中断标志

外部中断标志位不能自动复位,因此必须在中断处理

函数中手工清除该中断标志位,否则CPU将反复进入中断过

程。清除P1口外部中断标志位的方法如下。

P1IF=0;  // 清除P1口中断标志位

3.2.3 识别触发外部中断的引脚(Pin)

寄存器 P0IFG、P1IFG和P2IFG

先识别

•CC2530中有3个端口状态标志寄存器P0IFG、P1IFG和P2IFG,分别对应P0、P1和P2各引脚的中断触发状态。

•当被配置成外部中断的某个I/O口触发中断请求时,对应标志位会被自动置位,在进行中断处理时可通过判断相应寄存器的值来确定是哪个引脚引起的中断

在这里插入图片描述

使用后清除引脚中断标志

if (P1IFG & 0x04) //如果P1_2引脚中断标志位置位
{
	if(flag_Pause ==0)
	{
		flag_Pause =1;
	}
	else
	{
		flag_Pause =0;
	}
	P1IFG &=~0x04; //清除P1_2引脚(PIN)中断标志位
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

实验笔记之——bug:in /usr/local/lib/libfmt.a(format.cc.o) is referenced by DSO

最近在编译D-MAP的时候遇到下面的问题 在github issue好像也有类似的提问 compiling error with fmt Issue #4 hku-mars/D-Map GitHub 这应该是fmt配置没有连接上。为此寻找所有包含的fmt文件&#xff0c;在头文件处加入 #define FMT_HEADER_ONLY #include "fmt/for…

Java学习苦旅(十九)——详解Java的堆和优先级队列

本篇博客将详细讲解堆和优先级队列。 文章目录 堆概念向下调整 优先级队列概念内部原理入队列出队列返回队首元素java中的优先级队列常用操作 topK问题结尾 堆 概念 堆逻辑上是一棵完全二叉树。 堆物理上是保存在数组中。 满足任意结点的值都大于其子树中结点的值&#xff…

北京大学漏洞报送证书

获取来源&#xff1a;edusrc&#xff08;教育漏洞报告平台&#xff09; url&#xff1a;教育漏洞报告平台(EDUSRC) 兑换价格&#xff1a;30金币 获取条件&#xff1a;北京大学任意中危或以上级别漏洞

【React系列】Portals、Fragment

本文来自#React系列教程&#xff1a;https://mp.weixin.qq.com/mp/appmsgalbum?__bizMzg5MDAzNzkwNA&actiongetalbum&album_id1566025152667107329) Portals 某些情况下&#xff0c;我们希望渲染的内容独立于父组件&#xff0c;甚至是独立于当前挂载到的DOM元素中&am…

浅谈基于物联网的建筑物综合环境能耗监测管理系统

叶根胜 安科瑞电气股份有限公司 上海嘉定 201801 摘要&#xff1a;随着社会经济的快速发展&#xff0c;我国建筑能源消费总量逐年增加&#xff0c;占社会能源消费总量的近30%。国际发达国家建设部科技司的相关研究表明&#xff0c;随着城市化进程的加快和人民生活质量的提高&…

案例091:基于微信小程序的农场驿站平台的设计与实现

文末获取源码 开发语言&#xff1a;Java 框架&#xff1a;SSM JDK版本&#xff1a;JDK1.8 数据库&#xff1a;mysql 5.7 开发软件&#xff1a;eclipse/myeclipse/idea Maven包&#xff1a;Maven3.5.4 小程序框架&#xff1a;uniapp 小程序开发软件&#xff1a;HBuilder X 小程序…

ubuntu桥接方式上网

vmvare:VMware Workstation 17 Pro ubuntu: Ubuntu 14.04.6 LTS window10 下面是我的电脑配置 下面是ubuntu虚拟机的配置 vi /etc/network/interfaces 下面的gateway就是window -ipconfig 截图里的默认网关 auto lo iface lo inet loopbackauto eth0 iface eth0 inet stat…

日常工作 经验总结

1,在使用vue2开发项目时,快捷有效的组件化component 若有参数传递时,可以通过这样传递 在component中: 2,上拉加载,下拉刷新 若是使用局部进行上拉加载 下拉刷新 且需要用到scroll-view时 那么需要切记scroll-view在内被mescroll-uni包裹。若场景有限 对于无数据显示…

优雅实现微信小程序动态tabBar,根据不同用户角色显示不同底部导航——更新版(支持自由组合总数超过5个tabBar菜单)

背景 在开发小程序过程中&#xff0c;有个需求是&#xff0c;小程序底部的tabBar需要根据不同用户角色显示不同底部导航。此时就需要用到自定义底部导航 custom-tab-bar。 上次发文是组合显示4个底部tabBar导航&#xff0c;很多小伙伴评论说组合超过5个怎么办。他们的需求总数…

C语言KR圣经笔记 5.6指针数组;指针的指针

5.6 指针数组&#xff1b;指针的指针 因为指针本身也是变量&#xff0c;所以它们也能像其他变量一样保存在数组里面。我们写个程序来说明&#xff0c;该程序将一些文本行按照字母顺序排列&#xff0c;算是 UNIX 程序 sort 的精简版本。 在第三章中&#xff0c;我们介绍了对一…

设计创新,流程优化:3D开发HOOPS在数字化工厂中的多面应用

随着科技的不断发展&#xff0c;数字化转型已经成为各行各业的共同趋势&#xff0c;而工业领域也不例外。在这一浩大的变革浪潮中&#xff0c;Tech Soft 3D的HOOPS正以其卓越的性能和多功能性&#xff0c;成为数字化工厂领域的关键推动力。 数字化工厂概述 数字化工厂是指通过…

ssl证书(https/wss)内网测试

前言 一般后端部署到外网&#xff0c;可以去申请免费的SSL 证书&#xff0c; 但在内网测试时&#xff0c;需要自己生成证书 本章主要讲述ssl证书生成 1:环境 生成证书 openssl &#xff08;windows or linux 都行) 2:生成证书 1>生成私钥 pkcs#1私钥 openssl genrsa -out…

uniCloud 云函数

相对于云函数&#xff0c;官方更推荐使用 云对象 新建云函数 编辑云函数 uniCloud-aliyun/cloudfunctions/hello_func/index.js use strict; exports.main async (event, context) > {let {name} eventreturn 你好&#xff0c;${name}! };云函数接收的参数从event中解构获…

Js的String的replace(和replaceAll(

EcmaJavascriptJs的String的 replace( 和 replaceAll( 方法 String.prototype.replaceString.prototype.replaceAll 相同点 都是String.prototype的函数都是用于字符串替换都是两个参数第一个参数都可以是正则或字符串第二参数都可以是字符串或者回调函数, 回调会传入一个参…

YOLOv8改进 | 主干篇 | EfficientNetV1均衡缩放网络改进特征提取层

一、本文介绍 这次给大家带来的改进机制是EfficientNetV1主干,用其替换我们YOLOv8的特征提取网络,其主要思想是通过均衡地缩放网络的深度、宽度和分辨率,以提高卷积神经网络的性能。这种方法采用了一个简单但有效的复合系数,统一调整所有维度。经过我的实验该主干网络确实…

Linux系统:进程和计划任务管理

目录 一、程序 二、进程 1、什么是进程 1.1 进程的概念 1.2 进程的特征 1.3 进程、线程和协程 2、进程状态 3、进程的类型 4、进程使用内存出现的问题 三、进程管理相关命令 1、ps&#xff08;process state&#xff09; 1.1 用法 1.2 分析ps命令输出的内容 2、t…

基于STM32的ESP8266 WiFi模块数据采集与显示

基于STM32的ESP8266 WiFi模块数据采集与显示是一种常见的嵌入式系统应用&#xff0c;通常用于远程数据监测和控制。在这种应用中&#xff0c;STM32作为主控制器负责采集周围环境的数据&#xff0c;通过ESP8266 WiFi模块将数据发送到远程服务器&#xff0c;并在远程服务器上进行…

前端跨域问题的解决思路

目录 前言 跨域问题的解决思路 一般跨域的解决方案 前言 做了一个简单页面&#xff0c;做了一些数据埋点&#xff0c;想通过企业微信机器人来推送数据&#xff0c;遇到了一些问题&#xff0c;顺便记录下。 跨域问题的解决思路 由于是项目比较简单&#xff0c;直接使用了aj…

vue中key的用法

加key是提升vue渲染效率&#xff0c;减少DOM操作。 vue列表元素的更新机制&#xff1a; 当列表元素没有设置key的时候&#xff0c;vue判断是否操作这个DOM元素&#xff0c;是根据新旧两次数据的元素顺序进行对比&#xff0c;看一下元素内容是否发生变化。发生变化vue就操作这个…

2024.1.4每日一题

LeetCode每日一题 2397.被列覆盖的最多行数 2397. 被列覆盖的最多行数 - 力扣&#xff08;LeetCode&#xff09; 题目描述 给你一个下标从 0 开始、大小为 m x n 的二进制矩阵 matrix &#xff1b;另给你一个整数 numSelect&#xff0c;表示你必须从 matrix 中选择的 不同 …