ARM接口编程—Interrupt(exynos 4412平台)

news2024/11/18 1:39:12

CPU与硬件的交互方式

  • 轮询
    CPU执行程序时不断地询问硬件是否需要其服务,若需要则给予其服务,若不需要一段时间后再次询问,周而复始
  • 中断
    CPU执行程序时若硬件需要其服务,对应的硬件给CPU发送中断信号,CPU接收到中断信号后将当前的程序暂停下来,转而去执行中断服务程序,执行完成后再返回到被打断的点继续执行
  • DMA
    硬件产生数据后,硬件控制器可将产生的数据直接写入到存储器中,整个过程无需CPU的参与

配置引脚

查看按键的原理图可以看到K2接到网络标号为UART_RING,对应GPX1_1引脚
在这里插入图片描述
在这里插入图片描述

将对应引脚设置成中断模式
在这里插入图片描述
在这里插入图片描述
设置GPX1_1中断触发方式为下降沿触发
在这里插入图片描述
在这里插入图片描述
使能GPX1_1的中断功能
在这里插入图片描述

中断控制器

使能中断控制器
在这里插入图片描述

GPX1_1引脚对应的是EINT9,所以需要使能57中断号
在这里插入图片描述

在这里插入图片描述

选择由CPU0来处理57号中断
在这里插入图片描述
在这里插入图片描述

使能CPU0与中断控制器之间的接口
在这里插入图片描述
GPIO按键中断代码:

#include "exynos_4412.h"

void Delay(unsigned int Time)
{
	while(Time--);
}

//IRQ异常处理
void do_irq(void)
{
	unsigned int IrqNum = 0;
	/*从中断控制器中获取当前中断的中断号*/
	IrqNum = CPU0.ICCIAR & 0x3FF;
	
	/*根据中断号处理不同的中断*/
	switch(IrqNum)
	{
		case 57:
			printf("Key2 Pressed\n");
			/*清除GPIO控制器中GPX1_1的中断挂起标志位*/
			EXT_INT41_PEND = (1 << 1);
			/*将当前中断的中断号写回到中断控制器中,以这种方式来告知中断控制器当前的中断已经处理完成,可以发送其它中断*/
			CPU0.ICCEOIR = CPU0.ICCEOIR & (~(0x3FF)) | (57);
			break;
		default:
			break;
	}
}

int main()
{
	/*外设层次 - 让外部的硬件控制器产生一个中断信号发送给中断控制器*/
	/*将GPX1_1设置成中断功能*/
	GPX1.CON = GPX1.CON | (0xF << 4);
	/*设置GPX1_1的中断触发方式为下降沿触发*/
	EXT_INT41_CON = EXT_INT41_CON & (~(0x7 << 4)) | (0x2 << 4);
	/*使能GPX1_1的中断功能*/
	EXT_INT41_MASK = EXT_INT41_MASK & (~(1 << 1));

	/*中断控制器层次 - 让中断控制器接收外设产生的中断信号并对其进行管理然后再转发给CPU处理*/
	/*全局使能中断控制器使其能接收外设产生的中断信号并转发到CPU接口*/
	ICDDCR = ICDDCR | 1;
	/*在中断控制器中使能57号中断,使中断控制器接收到57号中断后能将其转发到CPU接口*/
	ICDISER.ICDISER1 = ICDISER.ICDISER1 | (1 << 25);
	/*选择由CPU0来处理57号中断*/
	ICDIPTR.ICDIPTR14 = ICDIPTR.ICDIPTR14 & (~(0xFF << 8)) | (0X01 << 8);
	/*使能中断控制器和CPU0之间的接口,使中断控制器转发的中断信号能够到达CPU0*/
	CPU0.ICCICR = CPU0.ICCICR | 1;

	GPX2.CON = GPX2.CON & (~(0xF << 28)) | (0x1 << 28);

    while(1)
	{   
		/*点亮LED2*/
		GPX2.DAT = GPX2.DAT | (1 << 7); 
		/*延时*/
		Delay(1000000);
		/*熄灭LED2*/
		GPX2.DAT = GPX2.DAT & (~(1 << 7));
		/*延时*/
		Delay(1000000);
	}   

	return 0;
}

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

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

相关文章

SOC 2.0安全运营中心

SOC&#xff0c;安全运营中心&#xff0c;为取得其最佳效果&#xff0c;以及真正最小化网络风险&#xff0c;需要全员就位&#xff0c;让安全成为每个人的责任。 早在几年前&#xff0c;企业就开始创建SOC来集中化威胁与漏洞的监视和响应。第一代SOC的目标&#xff0c;是集中管…

【使用Cpolar和Qchan搭建自己的个人图床】

文章目录 前言1. Qchan网站搭建1.1 Qchan下载和安装1.2 Qchan网页测试1.3 cpolar的安装和注册 2. 本地网页发布2.1 Cpolar云端设置2.2 Cpolar本地设置 3. 公网访问测试总结 前言 图床作为云存储的一项重要应用场景&#xff0c;在大量开发人员的努力下&#xff0c;已经开发出大…

TSMC逻辑制程技术命名和发展

参考来源&#xff1a; 逻辑制程 - 台湾积体电路制造股份有限公司 (tsmc.com) 1、 TSMC逻辑制程发展路线图 2、从65nm到3nm制程技术发展的简介 2.1 65nm 制程 Y2005&#xff1a;成功试产65nm晶片&#xff1b; Y2006&#xff1a;成功通过65nm制程技术的产品验证&#xff0c;推…

asio中的锁

asio到底有没有锁 asio是有锁的&#xff0c;所以规避锁的写法还是值得研究的 windows中的锁 先来张截图&#xff1a; dispatch_mutex_主要是为了保护定时器队列和完成端口回调的队列。 保护定时器队列 保护完成端口回调的队列 在PostQueuedCompletionStatus失败时&#x…

React总结1

3 React技术 React是Facebook于2013年开源的框架。React解决的是前端MVC框架中的View视图层的问题。 3.1 Virtual DOM* DOM&#xff08;文档对象模型Document Object Model&#xff09; 将网页内所有内容映射到一棵树型结构的层级对象模型上&#xff0c;浏览器提供对DOM的支…

构建全面 AI Agent 解决方案:Chocolate Factory 框架的文本到 UI、图表和测试用例生成...

长太不看版&#xff1a;基于领域驱动设计思考的 AI Agent 框架 Chocolate Factory&#xff0c;框架现在还在 PoC 阶段&#xff0c;欢迎加入开发。&#xff08;当前主要关注于 SDLC AIGC 的场景&#xff09;。 GitHub&#xff1a;https://github.com/unit-mesh/chocolate-facto…

MySQL的架构和性能优化

一、架构 MySQL逻辑架构整体分为三层&#xff0c;最上层为客户端&#xff0c;并非MySQL独有&#xff0c;诸如&#xff1a;连接处理&#xff0c;授权认证&#xff0c;安全等功能均在这一层处理 MySQL大多数核心服务均在中间这一层&#xff0c;包括查询解析&#xff0c;分析优化…

【Mysql】数据库第三讲(表的约束、基本查询语句)

表的约束和基本查询 1.表的约束1.1 空属性1.2默认值1.3列描述1.4 zerofill1.5主键1.6 自增长1.7 唯一键1.8外键 1.表的约束 真正约束字段的是数据类型&#xff0c;但是数据类型约束很单一&#xff0c; 需要有一些额外的约束&#xff0c; 更好的保证数据的合法性&#xff0c;从…

【Flowable】FlowableUI使用以及在IDEA使用flowable插件(二)

前言 之前有需要使用到Flowable&#xff0c;鉴于网上的资料不是很多也不是很全也是捣鼓了半天&#xff0c;因此争取能在这里简单分享一下经验&#xff0c;帮助有需要的朋友&#xff0c;也非常欢迎大家指出不足的地方。 一、部署FlowableUI 1.准备war包 在这里提供了&#xf…

Java之Hashset的原理及解析

4.数据结构 4.1二叉树【理解】 二叉树的特点 二叉树中,任意一个节点的度要小于等于2 节点: 在树结构中,每一个元素称之为节点 度: 每一个节点的子节点数量称之为度 二叉树结构图 4.2二叉查找树【理解】 二叉查找树的特点 二叉查找树,又称二叉排序树或者二叉搜索树 每一…

【算法专题突破】双指针 - 最大连续1的个数 III(11)

目录 1. 题目解析 2. 算法原理 3. 代码编写 写在最后&#xff1a; 1. 题目解析 题目链接&#xff1a;1004. 最大连续1的个数 III - 力扣&#xff08;Leetcode&#xff09; 这道题不难理解&#xff0c;其实就是求出最长的连续是1的子数组&#xff0c; 但是&#xff0c;他支…

[学习笔记]PageRank算法

参考资料&#xff1a;改变世界的谷歌PageRank算法 pagerank算法用于计算节点重要度 思想 如果网页被更多的入度(被引用)&#xff0c;则网页更重要。 被重要网站引用比被普通网站引用更加凸显重要性。 所以考虑一个网站是否重要&#xff0c;需要看引用它的网站是否重要&#…

Mysql binlog的三种模式statement,row,mixed详解,以及无主键造成复制延时的测试

2.1 Statement 模式的概念 Statement 是基于语句的复制模式。 Statement 模式将数据库中执行的修改操作记录为 SQL 语句&#xff0c;再从数据库上执行相同的 SQL 语句来实现数据同步。 2.2 Statement 模式的优点 Statement 模式的优点是简单明了&#xff0c;易于理解和实现。…

工作不好找,普通打工人如何破局

大家好&#xff0c;我是苍何&#xff0c;我的一位阿里朋友被裁后&#xff0c;找工作找了一个月都没结果&#xff0c;很多到最后一面被pass了&#xff0c;不由得做一下感慨&#xff0c;即使是大厂背景又如何&#xff0c;面对经济环境和大环境市场&#xff0c;每个人都不容易。 …

关于一个left join的易错点

很多人在学习mysql的时候应该都出现过很多问题&#xff0c;特别是连接方面的问题应该最多&#xff0c;希望这篇文章帮助到正在找bug的你 Java报错数据返回数量出现错误 遇到这种问题一定要看日志 很明显通过left join查询除了两条数据并且为空 马上思考错误的原因&#xff0c;…

【playwright】访问不同链接方法

every blog every motto: You can do more than you think. https://blog.csdn.net/weixin_39190382?typeblog 0. 前言 访问不同页面方法方法比较 browser.new_page() page context.new_page() 1. 访问不同url 1.1 方法一 browser.new_page() 打开多个浏览器&#xff0…

JS如何判断一个变量是否为数组类型?

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ 使用 Array.isArray() 方法⭐ 使用 instanceof 操作符⭐ 使用 Object.prototype.toString.call() 方法⭐ 使用 Array.from() 方法⭐ 使用 Array.prototype.isArray 属性&#xff08;不推荐&#xff09;⭐ 写在最后 ⭐ 专栏简介 前端入门之…

人机融合的熵增定律

在信息论中&#xff0c;熵增定律是指在信息传输或处理过程中&#xff0c;总的熵&#xff08;即不确定性或信息的度量&#xff09;通常会增加。然而&#xff0c;对于人机融合的情况&#xff0c;熵增定律并不是一个普适的定律&#xff0c;而是取决于具体情境和应用。 当人与机器进…

uniapp-小程序登录授权框

微信官方文档 不弹出授权框原因 因为版本问题&#xff0c;目前的最新的版本是不支持 wx.getUserInfo 去主动弹出授权框 只能引导用户去点击 butten 去授权 解决方法 我的思路是参考了其他的微信微信小程序, 就是跳转到我的页面的时候 在钩子函数内去触发一个封装的模态框,状…