【LV12 DAY17-18 中断处理】

在这里插入图片描述
q
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

GPX1_1是外部中断9 EINT9
在这里插入图片描述
查询可知其中断ID是57

所以需要进行人为修正lr的地址
sub lr,lr,#4

//iqr异常处理程序

irq_handler:

	//IRQ异常后LR保存的地址是被IRQ打断指令的下一条再下一条指令的地址,所以我们需要人为进行修正一下sub LR,LR,#4//因为irq模式下使用的R0-R12寄存器和user模式下的是同一组//所以在处理异常之前需要将USER模式下的寄存器进行压栈保护现场stmfd sp!,{r0-r12,LR}//处理异常bl do_irq//异常返回//1.将r0-r12寄存器中的值出栈,使其恢复到异常打断之前的值//2.将SPSR寄存器的值返回到CPSR,使得cpu恢复到异常前的状态//3.将LR寄存器的值给PC,程序返回ldmfd sp!,{r0-r12,PC}^
#include "exynos_4412.h"//异常处理程序void  do_irq(void){unsigned int Irqnum=0;//从中断控制器中获取当前中断的中断号,只取后10位Irqnum=CPU0.ICCIAR & (0X3FF);switch(Irqnum){case 0://0号中断处理程序//break;//...//case 57:printf("key pressed\n");//清楚gpio控制器的中断挂起位EXT_INT41_PEND=(1<<1);//将当前的中断号写回到中断控制器,以这种方式来告知中断控制器CPU当前的中断已经处理完成,可以发送其他中断CPU0.ICCEOIR=CPU0.ICCEOIR & (~(0X3FF)) | (57);break;//...//case 159://159处理中断程序//break;default:break;
}
}void delay(unsigned int time){while(time--);}int main(){//外设层次---外部设备能产生一个中断信号并且发送给中断控制器//将GPX1_1设置为中断功能//GPX1.CON=GPX1.CON | (0xF << 4);//设置GPX_1中断触发模式---下降沿触发//EXT_INT41_CON=EXT_INT41_CON & (~(0x7<<4)) |(0x2<<4);//使能GPX1_1---开启中断模式//EXT_INT41_MASK=EXT_INT41_MASK & (~(1<<1));//中断控制器层次---让中断控制器接收外设发来的中断信号并且进行管理,然后转发给合适的CPU进行处理//全局使能中断控制器使其能够接受外部设备产生的中断信号并且转发给CPUICDDCR=ICDDCR | 1;//在中断控制器中使能57号中断,使中断控制器把57号中断转发给CPU接口	ICDISER.ICDISER1=ICDISER.ICDISER1 | (1<<25);//将57号中断选择CPU0处理ICDIPTR.ICDIPTR14=ICDIPTR.ICDIPTR14 & (~(0XFF<<8)) | (0X01<<8);//将中断控制器和CPU0之间的接口使能,使得中断控制器转发的信号能够到达CPU0CPU0.ICCICR=CPU0.ICCICR | 1;GPX2.CON=GPX2.CON&(~(0XF<<28))|(0X1<<28);while(1){	//点亮LED2//GPX2.DAT=GPX2.DAT|(1<<7);//delay//delay(1000000);//熄灭LED2//GPX2.DAT=GPX2.DAT&(~(1<<7));//DELAY//delay(1000000);}return 0;
}

作业:通过使用中断的方式检测Key3按键的状态,实现按一次按键,LED2点亮,再次按下,LED2熄灭。

#include "exynos_4412.h"int flag=0;//异常处理程序void  do_irq(void){unsigned int Irqnum=0;//从中断控制器中获取当前中断的中断号,只取后10位Irqnum=CPU0.ICCIAR & (0X3FF);switch(Irqnum){case 0://0号中断处理程序//break;//...//case 57:printf("key pressed\n");//清楚gpio控制器的中断挂起位EXT_INT41_PEND=(1<<1);//将当前的中断号写回到中断控制器,以这种方式来告知中断控制器CPU当前的中断已经处理完成,可以发送其他中断CPU0.ICCEOIR=CPU0.ICCEOIR & (~(0X3FF)) | (58);break;//...//case 58:flag=~flag;EXT_INT41_PEND=(1<<2);//将当前的中断号写回到中断控制器,以这种方式来告知中断控制器CPU当前的中断已经处理完成,可以发送其他中断CPU0.ICCEOIR=CPU0.ICCEOIR & (~(0X3FF)) | (58);delay(1000);break;case 159://159处理中断程序//break;default:break;}}void delay(unsigned int time){while(time--);}int main(){//外设层次---外部设备能产生一个中断信号并且发送给中断控制器//将GPX1_2设置为中断功能//GPX1.CON=GPX1.CON | (0xF << 8);//设置GPX_1中断触发模式---下降沿触发//EXT_INT41_CON=EXT_INT41_CON & (~(0x7<<8)) |(0x2<<8);//使能GPX1_1---开启中断模式//EXT_INT41_MASK=EXT_INT41_MASK & (~(1<<2));//中断控制器层次---让中断控制器接收外设发来的中断信号并且进行管理,然后转发给合适的CPU进行处理//全局使能中断控制器使其能够接受外部设备产生的中断信号并且转发给CPUICDDCR=ICDDCR | 1;//在中断控制器中使能58号中断,使中断控制器把58号中断转发给CPU接口	ICDISER.ICDISER1=ICDISER.ICDISER1 | (1<<26);//将58号中断选择CPU0处理ICDIPTR.ICDIPTR14=ICDIPTR.ICDIPTR14 & (~(0XFF<<16)) | (0X01<<16);//将中断控制器和CPU0之间的接口使能,使得中断控制器转发的信号能够到达CPU0CPU0.ICCICR=CPU0.ICCICR | 1;GPX2.CON=GPX2.CON&(~(0XF<<28))|(0X1<<28);
while(1){	//点亮LED2////	GPX2.DAT=GPX2.DAT|(1<<7);//delay////	delay(1000000);//熄灭LED2////	GPX2.DAT=GPX2.DAT&(~(1<<7));//DELAY////	delay(1000000);if(flag)GPX2.DAT=GPX2.DAT|(1<<7);elseGPX2.DAT=GPX2.DAT&(~(1<<7));}return 0;}

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

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

相关文章

【北亚企安数据恢复】RAIDZ多块磁盘离线导致服务器崩溃的数据恢复案例

服务器数据恢复环境&#xff1a; ORACLE SUN ZFS某型号存储&#xff0c;共40块磁盘组建存储池&#xff0c;其中的36块磁盘分为三组&#xff0c;每组12块&#xff0c;单个组使用ZFS特有的RAIDZ管理所有磁盘&#xff0c;RAIDZ级别为2&#xff1b;另外的4块磁盘作为全局热备。存储…

DDDDDD

DDD 1、团队边界&#xff1a; 导购&#xff1a;负责用户的搜索和下单&#xff0c; 供应链负责机票的覆盖&#xff0c; 自营本身是一个商家&#xff08;一个企业&#xff09;&#xff0c;对供应链进行加工&#xff0c;在导购进行销售&#xff0c;主要负责收益、履约交付、财务方…

强化学习与监督学习【区别】

强化学习很强大&#xff0c;但是有大多数场景毫无使用它的必要&#xff0c;监督学习就够了。下面分析强化学习和监督学习的区别和强化学习有前景的应用。 目录 决策是否改变环境当前奖励还是长线回报总结 决策是否改变环境 监督学习假设模型的决策不会影响环境&#xff0c;而强…

【代码随想录07】344.反转字符串 541. 反转字符串II 05.替换空格 151.翻转字符串里的单词 55. 右旋转字符串

目录 344. 反转字符串题目描述做题思路参考代码 541. 反转字符串 II题目描述参考代码 05. 替换数字题目描述参考代码 151. 反转字符串中的单词题目描述参考代码 55. 右旋转字符串题目描述参考代码 344. 反转字符串 题目描述 编写一个函数&#xff0c;其作用是将输入的字符串反…

mac vscode latex实用

网上有教程怎么在vscode里安装macTex以及插件&#xff0c;然后就可以在latex里写代码了&#xff0c;这里需要修改的是对应的json文件&#xff0c;输入command P,可以看到最近打开的json设置文件&#xff0c;结果如下 然后设置这个json文件&#xff0c;我的json文件设置如下 …

three.js 点按钮,相机飞行靠近观察设备

效果&#xff1a; 代码&#xff1a; <template><div><el-container><el-main><div class"box-card-left"><div id"threejs" style"border: 1px solid red"></div><div class"box-right&quo…

oracle篇—19c新特性自动索引介绍

☘️博主介绍☘️&#xff1a; ✨又是一天没白过&#xff0c;我是奈斯&#xff0c;DBA一名✨ ✌✌️擅长Oracle、MySQL、SQLserver、Linux&#xff0c;也在积极的扩展IT方向的其他知识面✌✌️ ❣️❣️❣️大佬们都喜欢静静的看文章&#xff0c;并且也会默默的点赞收藏加关注❣…

Smart Tomcat

Smart Tomcat插件可以让idea图形化界面让代码部署到tomcat上达成一键打包部署的过程 下面是idea安装使用Smart Tomcat的过程 我们直接在plugins(插件)里搜索Tomcat 然后下载第一个 然后点击Apply(应用) 在一个项目中 第一次使用时要进行配置Smart Tomcat Name 可以不配置…

C# 基础入门

第二章 C# 语法基础 2-1 C# 中的关键字 关键字&#xff0c;是一些被C#规定了用途的重要单词。 在Visual Studio的开发环境中&#xff0c;关键字被标识为蓝色&#xff0c;下图代码中&#xff0c;用红方框圈出的单词就是关键字。 关键字 class &#xff0c;这个关键字的用途是…

使用 Elasticsearch 和 LlamaIndex 进行高级文本检索:句子窗口检索

2023 年是检索增强生成 (RAG) 的一年&#xff0c;人们探索了许多用例&#xff0c;并使用该技术开发了数百种产品。 从 Q/A 聊天机器人到基于上下文的代理&#xff0c;RAG 的使用一直是 LLM 申请快速增长的主要因素。 支持不断发展的社区以及 Langchain 和 LlamaIndex 等强大框架…

锂离子电池建模综述

锂电池很有吸引力&#xff0c;因为在元素周期表中&#xff0c;锂是一种非常正电的元素&#xff0c;它也恰好是最轻的金属&#xff0c;密度是水的一半。通常&#xff0c;电池由串联/并联的电化学电池组成。每个电池都包含一个负极&#xff08;放电时为阳极&#xff09;和一个由电…

OceanBase集群部署

我认为学习一个中间件比较好的方式是&#xff0c;先了解它的架构和运行原理&#xff0c;然后动手部署一遍&#xff0c;加深对它的了解&#xff0c;再使用它&#xff0c;最后进行总结和分享 本篇介绍OceanBase部署前提配置和集群部署 1.使用开源免费的社区版&#xff0c;企业版…

高通sm7250与765G芯片是什么关系?(一百八十一)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 优质专栏&#xff1a;多媒…

从0开始python学习-48.pytest框架之断言

目录 1. 响应进行断言 1.1 在yaml用例中写入断言内容 1.2 封装断言方法 1.3 在执行流程中加入断言判断内容 2. 数据库数据断言 2.1 在yaml用例中写入断言内容 2.2 连接数据库并封装执行sql的方法 2.3 封装后校验方法是否可执行 2.4 使用之前封装的断言方法&#xff0c…

73.网游逆向分析与插件开发-背包的获取-物品数据的初步数据分析

内容参考于&#xff1a;易道云信息技术研究院VIP课 上一个内容&#xff1a;72.网游逆向分析与插件开发-背包的获取-项目需求与需求拆解-CSDN博客 然后首先找切入点&#xff1a; 通过药物来当切入点&#xff0c;药物比较好使用&#xff0c;然后鼠标放到药物上它有名字、种类、…

[zabbix] zabbix监控其他

一、温习zabbix自定义监控 二、zabbix 自动发现与自动注册 2.1 zabbix 自动发现 //zabbix 自动发现&#xff08;对于 agent2 是被动模式&#xff09; zabbix server 主动的去发现所有的客户端&#xff0c;然后将客户端的信息登记在服务端上。 缺点是如果定义的网段中的主机数…

node.js(express.js)+mysql实现注册功能

文章目录 实现步骤一、获取客户端提交到服务器的用户信息&#xff0c;对表单中的数据&#xff0c;进行合法性的效验 代码如下:二、检测用户名是否被占用三、对密码进行加密四、插入新用户&#xff08;完整代码&#xff09;总结 实现步骤 一、获取客户端提交到服务器的用户信息…

微信小程序canvas画布图片保存到相册官方授权、自定义授权、保存

关键步骤介绍 wx.getSetting可以获取授权信息。 wx.authorize首次授权时会打开弹框让用户授权&#xff0c;若用户已选择同意或拒绝&#xff0c;后续不会再显示授权弹框。 如果授权信息显示未进行相册授权&#xff0c;则打开自定义弹框&#xff08;show_auth: true&#xff0…

[Python练习]使用Python爬虫爬取豆瓣top250的电影的页面源码

1.安装requests第三方库 在终端中输入以下代码&#xff08;直接在cmd命令提示符中&#xff0c;不需要打开Python&#xff09; pip install requests -i https://pypi.douban.com/simple/ 从豆瓣网提供的镜像网站下载requests第三方库 pip install requests 是从国外网站下…

深度学习记录--梯度消失和爆炸

梯度消失和爆炸的产生 当神经网络层数很大时&#xff0c;即很大时&#xff0c;w与1之间的大小关系会产生梯度消失与梯度爆炸的问题 当w<1时&#xff0c;会非常小&#xff0c;梯度消失 当w>1时&#xff0c;会非常大&#xff0c;梯度爆炸 解决方法 权重初始化 层数n越大…