【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.mzph.cn/news/622782.shtml

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

相关文章

泛微OA-Ecology8表单中填充用友U8数据

文章目录 1、需求及效果1.1 需求1.2 效果 2、思路及实现步骤2.1 思路2.2 实现步骤 3.结语 1、需求及效果 1.1 需求 在OA中填写表单中时候&#xff0c;比如物料号还需要从U8中查找后才能填写&#xff0c;非常的麻烦。想要在填写表单的时候可以搜索&#xff0c;并且带出其他的关…

如何查看串口号和波特率?

serialport引入后&#xff0c;设备也接上了&#xff0c;一直不知道串口号和波特率去哪里找&#xff0c;当时这个问题困扰了我很久 将设备的线插入到电脑上的插口(串口)桌面的【此电脑】上右击选择管理&#xff0c;打开【设备管理器】在【端口】中找到对应的端口&#xff0c;如果…

【linux】软链接创建(linux的快捷方式创建)

软连接的概念 类似于windows系统中的快捷方式。有的文件目录很长或者每次使用都要找很不方便&#xff0c;于是可以用类似windows的快捷方式的软链接在home&#xff08;初始目录类似于桌面&#xff09;上创建一些软链接方便使用。 软链接的语法 ln -s 参数1 参数2 参数1&#…

智慧园区数字孪生智能可视运营平台解决方案:PPT全文82页,附下载

关键词&#xff1a;智慧园区解决方案&#xff0c;数字孪生解决方案&#xff0c;数字孪生应用场景及典型案例&#xff0c;数字孪生可视化平台&#xff0c;数字孪生技术&#xff0c;数字孪生概念&#xff0c;智慧园区一体化管理平台 一、基于数字孪生的智慧园区建设目标 1、实现…

SpringMVC零基础入门 - 概述、入门搭建、PostMan的使用(常见数据类型的传输)、REST风格编程

SpringMVC零基础入门 - 概述、入门搭建、PostMan的使用(常见数据类型的传输)、REST风格编程 SpringMVC是隶属于Spring框架的一部分&#xff0c;主要是用来进行Web开发&#xff0c;是对Servlet进行了封装SpringMVC是处于Web层的框架&#xff0c;所以其主要的作用就是用来接收前…

解决“win11无法识别U盘“问题

在15.6寸笔记本上插上U盘&#xff0c;有时候出现U盘无法识别的现象&#xff0c;出现这种问题的原因有许多&#xff0c;比如U盘的格式不被当前电脑支持、电脑的USB接口电压过低、没有安装U盘驱动等等。     若是U盘格式不支持&#xff0c;则把U盘改成电脑能够识别的格式&#…

字符串处理(将字符串中符合十六进制数据格式的数字和字符按照其对应的十进制数值进行累加) C语言xdoj704

题目描述&#xff1a; 输入由数字和字符构成的字符串&#xff08;不包含空格&#xff09;&#xff0c;将字符串中符合十六进制数据格式的数字和字符按照其对应的十进制数值进行累加&#xff0c;并输出累加结果&#xff0c;如果字符串中不含有任何满足十六进制格式的字符&#x…

CES 2024丨引领变革,美格智能为智能终端带来生成式AI能力

作为电子行业的“风向标”&#xff0c;CES 2024&#xff08;国际消费电子展&#xff09;于1月9日至12日在美国拉斯维加斯举办。本届展会可谓是AI的盛宴&#xff0c;芯片、AI PC、智能家居、汽车科技、消费电子等领域与AI相关的前沿成果接连发布&#xff0c;引领人工智能领域的科…

6.2 声音编辑工具GoldWave5简介(8)

2&#xff0e;降噪 如果声卡的质量不太好&#xff0c;在录音的过程中免不了会掺杂一些杂音&#xff0c;比如&#xff1a;电流声、爆破声等&#xff0c;此时就需要进行降噪处理。 (1) 选择【效果】|【波波器】|【噪声减小】命令&#xff0c;打开“降噪”对话框。如图6-2-14所示…

Shell编程自动化之Shell数学运算与条件测试

一、Shell数学运算 1.Shell常见的算术运算符号 序号算术运算符号意义1、-、*、/、%加、减、乘、除、取余2**幂运算3、–自增或自减4&&、||、&#xff01;与、或、非5、!相等、不相等&#xff0c;也可写成6、、-、*、/、%赋值运算符&#xff0c;a1相等于aa1 2.Shell常…

C语言之字符串和指针

目录 用数组实现的字符串和用指针实现的字符串 █用数组实现的字符串str █用指针实现的字符串ptr 注意 用数组和指针实现字符串的不同点 字符串数组 用数组实现的字符串的数组——二维数组 用指针实现的字符串数组——指针数组 注意 字符串和指针有着紧密的联系&#…

TikTok系列算法定位还原x-ss-stub

TikTok的x系列的算法比较有名,很多粉丝也问过,之前没有深入研究,本人工作量也比较大。 我们上次说到TikTok的x-ss-stub的算法就是ccmd5标准库算的,今天要讲细致点,表面这个结论本不是直接将数据md5那么来的,是经过一系列分析来的 上图是上次截图的,这次我们分析整个定位…

node(express.js创建项目)+连接mysql数据库

1.node npm的安装 2.express的安装 全局安装:npm install express -gnpm install -g express-generator// ps: 4.0版本把generator分离出来了&#xff0c;需要单独安装3.创建express项目 express 项目名称 cd 项目名称 npm install npm start4.项目中安装数据库 npm install…

C语言督学营(高级阶段)

文章目录 高级阶段19.C语言语法进阶1.条件运算符、逗号运算符(1)条件运算符 / 三目运算符   ? :(2)逗号运算符   , 2.自增自减运算符3.位运算符&#xff1a;按位或、按位异或、按位取反(1)逻辑与、按位与、左移、右移(2)有符号数右移 vs 无符号数右移(3)按位与、按位或、按位…

Docker学习与应用(五)-DockerFile

1、DockerFile 1&#xff09;DockerFile介绍 dockerfile是用来构建docker镜像的文件&#xff01;命令参数脚本&#xff01; 构建步骤&#xff1a; 1. 编写一个dockerfile文件 2. docker build 构建称为一个镜像 3. docker run运行镜像 4. docker push发布镜像&#xff08;D…

LC 83. 删除排序链表中的重复元素

83. 删除排序链表中的重复元素 难度 &#xff1a; 简单 题目&#xff1a; 给定一个已排序的链表的头 head &#xff0c; 删除所有重复的元素&#xff0c;使每个元素只出现一次 。返回 已排序的链表 。 提示&#xff1a; 链表中节点数目在范围 [0, 300] 内-100 < Node.va…

蓝桥杯准备

书籍获取&#xff1a;Z-Library – 世界上最大的电子图书馆。自由访问知识和文化。 (zlibrary-east.se) 书评&#xff1a;(豆瓣) (douban.com) 一、观千曲而后晓声 别人常说蓝桥杯拿奖很简单&#xff0c;但是拿奖是一回事&#xff0c;拿什么奖又是一回事。况且&#xff0c;如果…

Docker教程

docker 安装 官方文档 wget -qO- https://get.docker.com/ | sh sudo usermod -aG docker your-user sudo usermod -aG docker ${USER} newgrp docker # 更新docker用户组 cat /etc/group | grep docker docker --version 使用非root用户管理 帮助启动类 命令 system…

寄快递有没有什么省钱的小妙招? 怎样寄快递才能省钱呢?

快递物流行业的快速崛起刺激了人们的消费欲望&#xff0c;其中典型的是每每到重大节日尤其是双十一或者双十二&#xff0c;消费市场异常火爆&#xff0c;这也使得快递行业加班加点的干也不追不上人们下单的速度。如今&#xff0c;互联网时代崛起&#xff0c;网购成为了大家最寻…

机器学习_捕捉函数的变化趋势(凸函数)

文章目录 连续性是求导的前提条件通过求导发现 y 如何随 x 而变凸函数有一个全局最低点 机器学习所关心的问题之一捕捉函数的变化趋势&#xff0c;也就是标签&#xff08;y&#xff09;是如何随着特征字段&#xff08;x&#xff09;而变化的&#xff0c;这个变化趋势是通过求导…