嵌入式(三)中断解析 | 中断基本概念 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)中断标志位
}

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于AOP实现权限管理系统demo

简介&#xff1a;本文将介绍如何使用面向切面编程&#xff08;AOP&#xff09;技术实现一个简单的权限管理系统demo。我们将使用ssm框架作为基础&#xff0c;通过AOP来拦截和处理权限相关的操作。主要实现拦截操作。&#xff08;如有需要&#xff0c;您可以自行从Gitee仓库中获…

嵌入式-stm32-基于HAL库的感应开关盖垃圾桶项目(开源)

嵌入式-stm32-感应开关盖垃圾桶项目&#xff08;开源&#xff09; 网盘资料 《嵌入式-stm32-基于HAL库的感应开关盖垃圾桶项目&#xff08;开源&#xff09;》 目录 一&#xff1a;项目概述 二&#xff1a;材料准备 三&#xff1a;细节分析&#xff08;重点&#xff09; 四&…

Git 对项目更新的时候提示错误 repository not owned by current user

遇到 Git 提示的错误信息为&#xff1a;repository not owned by current user 上图显示的是错误的信息。 问题和解决 出现上面错误信息的原因是当前文件夹的权限和 Git 的执行权限不一直导致的。 我们的问题是我们希望在网盘上使用 Git 更新克隆后的代码&#xff0c;但登录…

快速、准确地检测和分类病毒序列分析工具 ViralCC的介绍和详细使用方法,fudai shiyong ijaoben

介绍 viralcc是一个基因组病毒分析工具&#xff0c;可以用于快速、准确地检测和分类病毒序列。 github&#xff1a;dyxstat/ViralCC: ViralCC: leveraging metagenomic proximity-ligation to retrieve complete viral genomes (github.com) Instruction of reproducing resul…

Ajax基础入门_Ajax概述,同步与异步,Axios的使用,JSON数据及FastJSON的使用

Ajax 文章目录 Ajax1 概述2 作用3 同步和异步3.1 同步3.2 异步 4 代码编写4.1 服务端4.2 客户端 5 Axios5.1 使用5.2 代码5.2.1 前端5.2.2 后端 5.3 请求方法别名 6 JSON6.1 概述6.2 JSON 基础语法6.2.1 定义格式6.2.2 js 对象与JSON的转换 6.3 发送异步请求携带参数6.4 JSON串…

Focal Loss

1、样本不均衡的 问题 与 方案 Focal loss 用于解决上述 样本不均衡的问题 : \quad 1、正负样本数量不均衡 \quad 2、易分类的样本和难分类的样本数量不均衡

Linux内存管理:(五)反向映射RMAP

文章说明&#xff1a; Linux内核版本&#xff1a;5.0 架构&#xff1a;ARM64 参考资料及图片来源&#xff1a;《奔跑吧Linux内核》 Linux 5.0内核源码注释仓库地址&#xff1a; zhangzihengya/LinuxSourceCode_v5.0_study (github.com) 1. 前置知识&#xff1a;page数据结…

大数据StarRocks(四) :常用命令

这次主要介绍生产工作中Starrocks时的常用命令 4.1 连接StarRocks 4.1.1 Linux命令行连接 [roothadoop1011 fe]# yum install mysql -y [roothadoop1011 fe]# mysql -h hadoop101 -uroot -P9030 -p4.1.2 Windows客户端 DBeaver 连接 4.2 常用命令 4.2.1 查看状态 1. 查看f…

Pytorch从零开始实战15

Pytorch从零开始实战——ResNeXt-50算法实战 本系列来源于365天深度学习训练营 原作者K同学 文章目录 Pytorch从零开始实战——ResNeXt-50算法实战环境准备数据集模型选择开始训练可视化总结 环境准备 本文基于Jupyter notebook&#xff0c;使用Python3.8&#xff0c;Pytor…

智能穿戴时代 | 米客方德SD NAND的崭新优势

SD NAND在智能穿戴上的优势 SD NAND是一种可以直接焊接在智能穿戴设备主板上的存储芯片&#xff0c;其小型化设计有助于紧凑设备尺寸&#xff0c;同时提供可靠的嵌入式存储解决方案。 这种集成设计减少了空间占用&#xff0c;同时确保设备在高度活动的环境中更为稳定。SD NAND…

漏洞复现--天融信TOPSEC两处远程命令执行

免责声明&#xff1a; 文章中涉及的漏洞均已修复&#xff0c;敏感信息均已做打码处理&#xff0c;文章仅做经验分享用途&#xff0c;切勿当真&#xff0c;未授权的攻击属于非法行为&#xff01;文章中敏感信息均已做多层打马处理。传播、利用本文章所提供的信息而造成的任何直…

EasyRecovery2024永久免费版电脑数据恢复软件

EasyRecovery是一款操作安全、价格便宜、用户自主操作的非破坏性的只读应用程序&#xff0c;它不会往源驱上写任何东西&#xff0c;也不会对源驱做任何改变。它支持从各种各样的存储介质恢复删除或者丢失的文件&#xff0c;其支持的媒体介质包括&#xff1a;硬盘驱动器、光驱、…