嵌入式系统:中断

2023-11-07

中断

(一)查询与中断

1.查询:按照主函数中的语句顺序,顺序执行

(1)优点:结构简单,易于理解

(2)缺点:无法充分利用CPU资源

2.中断:程序顺序执行,遇到中断使能,跳转执行中断函数

(1)优点

  • 充分利用CPU资源,提高效率
  • 易于处理突发事件

(2)缺点:结构复杂,不好理解(次要)

在这里插入图片描述

(二)中断相关知识

1.中断分类(中断源)

(1)外部中断

  • 按键
  • 外部通讯中断

(2)内部中断

  • CPU内部中断,如重置,遇到突发事件处理的中断
  • 相关外设中断

2.中断优先级:优先级高的先执行

3.注意:具体哪些端口可以中断需要看具体数据手册


(三)编程

1.编程流程

(1)配置所需中断功能相关寄存器,开启功能中断以及全局中断

  • 中断源
  • 中断优先级
  • 中断使能

(2)编写中断处理子程(ISR)(CPU硬件自动调用)

  • 中断触发源判断(中断触发,相关标志位置1)
  • 中断标志位清零

(3)在中断函数中处理相关任务


2.编程实例

(1)寄存器编程

#include <msp430.h> 

/**
 * main.c
 */
int main(void)
{
	WDTCTL = WDTPW | WDTHOLD;	// stop watchdog timer
	
	/******************
	 * 功能:按键实现LED开关
	 * 函数:按键中断函数
	 ******************/

	/*LED初始化*/
	P1SEL &=~BIT0;  //GPIO模式
	P1DIR |= BIT0;  //输出模式

	/*按键中断初始化*/
	P2SEL &=~BIT1;  //GPIO模式
	P2DIR &=~BIT1;  //输入模式
	P2IE  |= BIT1;  //中断使能
	//内部配置上拉电阻
	P2REN |= BIT1;  //上拉电阻
	P2OUT |= BIT1;  //输出为高
	P2IES |= BIT1;  //中断边沿选择(上升沿)
	
	P2IFG &=~BIT1;  //中断标志位清零

	_EINT();       //全局中断开启

	return 0;
}

/*延时函数*/
void delay(unsigned char Time)
{
    while(Time--);
}

/*按键中断处理子程*/
#pragma vector = PORT2_VECTOR
__interrupt void PORT2_ISR()
{
    /*按键去抖*/
    if(P2IFG & BIT1)  //判断中断标志位,是否开启中断
    {
        delay(40);
        if(!(P2IN & BIT1))  //判断按键是否按下
        {
            while(!(P2IN & BIT1));  //等待按键抬起
            delay(40);  //延时去抖
            //功能执行语句
            P1OUT ^= BIT0;  //LED闪烁
        }
    }
    P2IFG &=~BIT1;
}

(2)库函数编程

#include "msp.h"
#include <ti/devices/msp432p4xx/driverlib/driverlib.h>

/**
 * main.c
 */
void main(void)
{
	WDT_A->CTL = WDT_A_CTL_PW | WDT_A_CTL_HOLD;		// stop watchdog timer

	/******************
	 * 功能:按键实现LED闪烁
	 * 函数:按键中断函数
	******************/

	/*LED初始化*/
	//P1.0作为输出模式
	MAP_GPIO_setAsOutputPin(GPIO_PORT_P1,GPIO_PIN0);

	/*按键中断初始化*/
	//P1.4作为输入模式
	MAP_GPIO_setAsInputPinWithPullUpResistor(GPIO_PORT_P1,GPIO_PIN4);
	//按键中断使能
	MAP_GPIO_enableInterrupt(GPIO_PORT_P1,GPIO_PIN4);
	//按键上升沿触发
	MAP_GPIO_interruptEdgeSelect(GPIO_PORT_P1,GPIO_PIN4,GPIO_LOW_TO_HIGH_TRANSITION);
	//清除中断标志位
	MAP_GPIO_clearInterruptFlag(GPIO_PORT_P1,GPIO_PIN4);

	MAP_Interrupt_enableInterrupt(INT_PORT1);//开启PORT1全局中断

	while(1);

}



/*按键中断处理函数*/
void PORT1_IRQHandler(void)
{
    uint32_t status;
    status = MAP_GPIO_getEnabledInterruptStatus(GPIO_PORT_P1);  //得到产生中断的位

    if(status & GPIO_PIN4)  //判断中断标志位
    {
           MAP_GPIO_toggleOutputOnPin(GPIO_PORT_P1, GPIO_PIN0);
    }
    MAP_GPIO_clearInterruptFlag(GPIO_PORT_P1, status);  //清除中断标志位
}


3.总结

(1)此例只是简单的中断函数,目的是为了明白中断的大致原理

(2)中断是非常重要的在嵌入式开发中,当然还有更高效的操作系统编程,但这不是目前要了解的


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

嵌入式系统:中断 的相关文章

  • STM32+ESP8266+MQTT连接阿里云(1)

    ESP8266连接阿里云的流程 发送 目的是让ESP8266退出透传 AT RESTORE 让模块恢复出厂设置 AT 判断模块的好坏及工作状态 正常就会回复OK ATE0 关闭回显 这个没什么好说的 AT CWMODE CUR 1 设置为s
  • 继电器、并联的二极管和驱动三极管选型实战演练

    继电器选型原则 继电器的选用原则参见下表 在表中 必须确定 栏中有 号的项目被确定之后 就可选定一款继电器 如果有进一步的要求 需要进一步考虑 参考 栏中有 号的相应项目 下面对表格中的所有参数进行详细说明 触点 1触点负载 确定继电器所能
  • STM32与Python上位机通过USB虚拟串口通信

    文章目录 前言 1 查看原理图 2 新建工程 3 添加代码与烧录 4 python代码编写 总结 问题解决思路 前言 在详细阅读广大网友的教程之后 我对STM32和Python通过USB通信的流程烂熟于心 尝试用ST公司的NUCLEO L4
  • QT基础学习(12)---事件过滤

    文章目录 事件过滤 一 事件过滤 实现该功能的方法就是在目标部件 自定义的图片显示部件 上注册事件过滤器 此时的事件过滤器就是我们所说的监视对象 完成这些步骤之后 当目标部件有事件产生后 首先会传递给监视对象 事件过滤器 进行处理而不是该事
  • 嵌入式学习:stm32学习路线推荐之思维导图

    从9月1日开始学习STM32后 对于STM32的一些个人总结 1 对于STM32和51的区别 对于 STM32来说 基本的大概都和51单片的内容相似 但是由于STM的引脚和寄存器的数量较多 所以需要一个更加完善的管理机制 导致了 时钟 的产
  • 【AD20】快速且只选中部分自己想要的同类型的元件

    在project属性框里面 可以选择所有如下图所示内容 这个是一个过滤器 里面有多种小选项 比如 Components 元件 Pads 焊盘 Texts 文本 选择哪个就只能选择对应的部分 比如 只选择文本 在画图区域 框选 发现只有文本才
  • modbus总线协议(一)modbus rtu

    一 介绍 Modbus协议由Modicon公司开发出来 现在Modbus是工业领域全球最流行的协议 硬件支持RS 232 RS 422 RS 485和以太网设备 应用在PLC DCS 智能仪表等工控领域 图片来源于网络 二 modbus协议
  • 新唐NUC980使用记录(5.10.y内核):u-boot & linux & rootfs 编译与烧录测试(基于SD1位置SD卡)

    文章目录 目的 基础准备 烧录环境 开发编译环境 SD卡分区 制作和设置编译工具链 制作toolchain和rootfs 拷贝rootfs内容到SD卡 设置编译工具链 u boot编译与测试 下载 配置与编译 烧录u boot与环境变量 l
  • 嵌入式 在开发板显示bmp图片、jpeg图片

    嵌入式 在开发板显示bmp图片 jpeg图片 一 简述 记 在GEC6818开发板 800W 480H 显示24位的bmp图片 使用开源的jpeg库显示jpeg图片 代码 链接 https pan baidu com s 1G3jzvdnc
  • 基于STM32F4单片机对步进电机的控制(有代码)

    步进电机简介 步进电机是将电脉冲控制信号转变为角位移或线位移的一种常用的数字控制执行元件 又称为脉冲电机 在驱动电源的作用下 步进电机受到脉冲的控制 其转子的角位移量和速度严格地与输入脉冲的数量和脉冲频率成正比 步进电机每接收一个电脉冲 转
  • 2023年电赛E题详细讲解

    前言 E题是运动目标控制与自动追踪系统 其实就是一个红色激光追踪绿色激光 本文主要授人以渔 讲解思路 不含代码 建议自己编写 本文旨在和大家探讨一下更好的方案 欢迎讨论 读题 做题肯定是要读题的 本节主要是将一些主要的点 并反推出题人的出题
  • HMI智能串口屏——在STM32开发板上的实战应用及其详解

    HMI智能串口屏 在STM32开发板上的实战应用及其详解 一 HMI智能串口屏使用步骤 二 附录 一 HMI智能串口屏使用步骤 安装USART HMI软件 一般买的串口屏里面 商家送的资料里面都有改该软件 打开软件 并点击左上角的 新建 选
  • 通过External Tools在STM32CubeIDE下使用DAP-LINK

    目录 一 文章背景 二 准备工作 2 1 Stm32CubeIDE 2 2 DAP LINK 2 3 STM32目标板 三 配置过程 3 1 连接目标板 3 2 配置仿真器 3 3 更改调试设置为远程调试 3 4 新建OpenOcd扩展工具
  • 内存管理实验

    内存管理 1 介绍 内存管理 是指软件运行时对计算机内存资源的分配和使用的技术 其最主要的目的是如何高效 快速的分配 并且在适当的时候释放和回收内存资源 内存管理的实现方法有很多种 他们其实最终都是要实现 2 个函数 malloc 和 fr
  • STM32F103C8移植uCOSIII(HAL库)

    少年 一 随笔 二 uCOSIII源码 三 项目导入文件整理 四 导入文件和增加头函数路径 五 代码改动 六 参考资料 一 随笔 移植一个嵌入式系统用了一天时间 只能说不愧是我 在不了解的情况下还是少一些自己的操作 自己挖坑埋自己 记录一下
  • C#写的34401A串口232数据读取程序

    首先呢 请先设置惠普表为Talk only模式 也就是31 还不明白的自己查手册去 另外 各个表设置不一样 比如我这里2块表就不一样 一块是7位数据位 even校验 另一块是8位数据位 none校验 具体的可以看看表里的i o那里的设置 数
  • 嵌入式资源网站

    原题地址 http blog csdn net ce123 article details 6724127 一 MailList 1 MailList大全 网址 http news gmane org 描述 可以查到绝大部分开源项目的Mai
  • 2022年 大学生工程训练比赛[物料搬运]

    本人和团结参加了2022年大学生工程训练 简称工训赛 校赛选拔 准备了几个月的时间和花费了较多的资金 由于疫情等多种情况 很遗憾未能参加湖南省省赛 过了这么久还是写个博客记录参赛准备和调试过程 目录 一 比赛要求 二 整体思路 三 硬件模块
  • 计算机基础:一颗芯片是怎样诞生的?

    一颗芯片是怎样诞生的 芯片属于半导体 半导体是介于导体和绝缘体之间的一类物质 元素周期表中硅 锗 硒 硼的单质都属于半导体 这些单质通过掺杂其他元素生成的一些化合物 也属于半导体的范畴 这些化合物在常温下可激发载流子的能力大增 导电能力大大
  • 跟着野火学FreeRTOS:第一段(任务定义,切换以及临界段)

    在裸机系统中 系统的主体就是 C P U CPU CP U 按照预先设定的程序逻辑在 m a i n

随机推荐

  • Kubernetes初始化集群时报错[ERROR Port-10259]: Port 10259 is in use

    错误原因 节点被占用 报错信息 W0823 00 33 45 142456 107567 validation go 28 Cannot validate kube proxy config no validator is availabl
  • Qt动态属性

    动态属性 在标准C 中 为了保证封装性 我们经常声明一个私有变量 然后声明两个公有函数 即set函数和get函数 在Qt中我们可以使用宏Q PROPERTY 宏来实现这些 一个属性可以使用常规函数QObject property 和QObj
  • 程序员赚钱致富的6种方法

    我认识一个朋友 也是程序员出身 他在一家还不错的外企上班 每个月工资收入也就差不多15K 五年的工作经验了 在他面前 我算是小弟 那天我们几个朋友一起打完球就去附近的饭馆吃饭 环境还不错 于是就边吃边聊工作 赚钱的事情 那天了解到 他不仅拿
  • macOS查看IP地址的命令

    查看内网的 IP 地址 ipconfig getifaddr en0 Last login Thu Aug 11 17 13 00 on ttys000 grnt wMacBook Pro ipconfig getifaddr en0 19
  • nginx用户认证配置

    1 用户认证模块 在 nginx 下 提供了 ngx http auth basic module 模块实现让用户只有输入正确的用户名密码才允许访问web内容 默认情况下 nginx 已经安装了该模块 所以整体的一个过程就是先用第三方工具设
  • GUI编程—PyQt5学习笔记1

    GUI 图形用户界面 Graphical User Interface 简称 GUI 又称图形用户接口 是指采用图形方式显示的计算机操作用户界面 PyQt5常用模块 QtWidgets 包含了一整套UI元素控件 用于建立符合系统风格的界面
  • 启动mysql服务报错:mysql服务无法启动

    一 问题描述 之前mysql服务好好的 突然无法启动了 win10系统 64位 mysql8 0 23 二 问题解决 1 mysqld console命令查看具体报错 C WINDOWS system32 gt mysqld console
  • C++ 2:new和delete,volatile关键字,auto关键字,基于范围for循环,string简单使用

    文章目录 1 B Tree 的结构设计 2 new和delete 2 1 new的三种用法 2 2 对于内置类型new delete malloc free 可以混用 3 C11的新特性 3 1 类型推导 3 2 auto的推导规则 3 2
  • geeksforgeeks —— 算法 1

    目录 算法 一 查找和排序 1 1 线性查找 1 2 二分查找 1 3 跳跃搜索 1 4 插值搜索 1 5 指数搜索 1 6 为什么二元搜索优于三元搜索 1 7 选择排序 1 8 冒泡排序 1 9 插入排序 1 10 归并排序 1 11 堆
  • 关于指针大小(c语言)

    32位系统默认指针大小为4个字节 8位为一个字节 因为32位系统默认的内存寻址空间是4G 所以指针大小为4个字节可以完成对4G空间的寻址 2 32约为4个G 64位系统默认指针大小为8个字节 理论上寻址空间可达到1800万个TB 指针大小为
  • git给服务器传文件在哪里,git上传文件服务器地址

    git上传文件服务器地址 内容精选 换一换 在本地主机和Windows弹性云服务器上分别安装QQ exe等工具进行数据传输 使用远程桌面连接mstsc方式进行数据传输 该方式不支持断点续传 可能存在传输中断的情况 因此不建议上传大文件 文件
  • qt怎么一个程序显示两个窗口

    首先我们要把 ui文件的QMainWindow改成QDialog 用记事本 然后把 ui对应的头文件和 cpp 出现QMainWindow改成QDialog 如图重点其包含头文件定义也记得修改 然后非模态显示 才不堵塞主窗口 然后在主窗口程
  • 星际2正在等待暴雪服务器的响应,win7系统玩星际2一直停留在"正在更新暴雪启动器"页面的解决方法...

    很多小伙伴都遇到过win7系统玩星际2一直停留在 正在更新暴雪启动器 页面的困惑吧 一些朋友看过网上零散的win7系统玩星际2一直停留在 正在更新暴雪启动器 页面的处理方法 并没有完完全全明白win7系统玩星际2一直停留在 正在更新暴雪启动
  • 【交叉二五码及其校验码计算方式】

    一 交叉二五码 交叉二五码是1972年美国Intermec公司发明的一种条 空均表示信息的连续型 非定长 具有自校验功能的双向条码 它的字符集为数字字符0 9 交叉二五条码由左侧空白区 起始符 数据符 终止符及右侧空白区构成 它的每一个条码
  • CentOS 7虚拟机安装常用软件

    依然是虚拟机安装常用软件系列 CentOS 7目前官方支持到2024 还行 1 VMWare 安装CentOS 7 默认都安装成功了 2 换源 更新 阿里源最近老是403 换了网易源 sudo wget O etc yum repos d
  • python对字符串中指定字符进行替换

    1 替换指定的所有字符 string replace a b 表示将字符串string中所有字符为a的替换为b 例子 string abcabcabc string string replace a b print string 输出 bb
  • SpringBoot默认Json框架Jackson解析-基础篇

    1 Springboot返回JSON数据的方式 目前SpringBoot提供的Json格式有三种 Jackson 默认 Gson JsonB 我们都可以在springboot自动配置模块spring boot autoconfigure中查
  • (深度/广度优先算法)——遍历邻接表(C语言)

    一 算法代码 采用邻接表表示图的遍历 include
  • 基于同一IP的不同端口访问不同的网站

    目录 创建网站目录 一 ip 端口1的根目录 二 ip 端口2的根目录 编写虚拟主机配置文件 配置完成 实验结果测试 创建网站目录 一 ip 端口1的根目录 这个目录大家可以随意 配置文件里同步即可 mkdir p www port 909
  • 嵌入式系统:中断

    中断 一 查询与中断 1 查询 按照主函数中的语句顺序 顺序执行 1 优点 结构简单 易于理解 2 缺点 无法充分利用CPU资源 2 中断 程序顺序执行 遇到中断使能 跳转执行中断函数 1 优点 充分利用CPU资源 提高效率 易于处理突发事