【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;如果…

textContent和innerText有什么区别

textContent 和 innerText 都是用于获取或设置元素的文本内容的属性&#xff0c;但它们之间有一些区别。 textContent 属性返回元素的所有文本内容&#xff0c;包括元素内部的所有文本和注释节点。而 innerText 属性仅返回元素内部可见的文本内容&#xff0c;忽略任何被 CSS 隐…

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

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

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

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

在钉钉群通过机器人发送信息

在第三方API接口对接中&#xff0c;需要及时获取第三方接口请求结果情况&#xff0c;所以在代码中融合钉钉机器人&#xff0c;对请求的异常结果及时发送通知。 自定义机器人参考链接通用响应参数-封装API的错误码 public interface IErrorCode {long getCode();String getMess…

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…

论AI自动生成游戏的局限性及其意义缺失

近年来&#xff0c;人工智能技术在游戏开发领域的应用日益广泛&#xff0c;包括智能NPC设计、游戏关卡生成、剧情编排等。然而&#xff0c;关于让AI完全自主地编写和设计整个游戏的讨论也日渐兴起。本文旨在探讨为何让AI自己来写游戏在当前阶段并无实质意义&#xff0c;主要从创…

LC旋转矩阵

LC 旋转矩阵 题目描述&#xff1a; 给你一幅由 N N 矩阵表示的图像&#xff0c;其中每个像素的大小为 4 字节。请你设计一种算法&#xff0c;将图像旋转 90 度。 不占用额外内存空间能否做到&#xff1f; 题目示例如下&#xff1a; 示例一&#xff1a; 给定 matrix [[1,2…

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所示…

webpack 是什么?

webpack 是一个开源的 JavaScript 模块打包工具。它是前端开发中常用的构建工具之一&#xff0c;主要用于将项目中的多个模块和文件打包成一个或多个静态资源文件&#xff08;通常是 JavaScript 文件&#xff09;&#xff0c;以便在浏览器中加载和运行。 webpack 的主要功能包…

Pandas实战100例 | 案例 27: 数据合并 - 使用 `merge`

案例 27: 数据合并 - 使用 merge 知识点讲解 在数据处理中&#xff0c;经常需要将来自不同来源的数据集合并在一起。Pandas 提供了 merge 函数&#xff0c;它类似于 SQL 中的 JOIN 操作&#xff0c;可以根据一个或多个键来合并两个 DataFrame。 内连接 (inner): 只合并两个 …

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

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

记录一下常用的工具类

1.通用返回类 import lombok.Data;Data public class CommonResult<T> {private Integer code;private String message;private T data;//成功通用返回public static CommonResult okResult(Object data){CommonResult commonResult new CommonResult(AppHttpCodeEnum.…

chromium通信系统-ipcz系统(十一)-mojo binding

关于mojo binding的官方文档为mojo docs。 由于比较复杂&#xff0c;这里只做简单源码分析。 我们知道要实现rpc&#xff0c;必须实现客户端和服务端。 mojo 实现了一套领域语言&#xff0c;通过领域语言描述接口和数据&#xff0c; 再通过特有编译器编译成c代码。 这个过程会…

C语言之字符串和指针

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

程序设计语言的分类

编译与解释 编译型 将源代码转换成目标代码&#xff0c;通常源代码是高级语言代码&#xff0c;目标代码是机器语言代码&#xff0c;执行编译的计算机程序称为编译器。 eg:java 好处&#xff1a;对于相同的源代码编译产生的目标代码执行速度更快&#xff0c;目标代码不需要编译…