当前位置: 首页 > news >正文

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

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.lryc.cn/news/164047.html

相关文章:

  • 适用于Linux的Windows子系统(PHP搭建lmap、redis、swoole环境)
  • Vue3+Ts+Vite项目(第十二篇)——echarts安装与使用,vue3项目echarts组件封装
  • hive location更新hive元数据表详解
  • 【SpringBoot】统一功能处理
  • 分布式数据库-架构真题(二十六)
  • MyWebServer开发日记-socket
  • 图书管理信息系统分析与设计
  • Charles基础使用指南
  • Android12之/proc/pid/status参数含义(一百六十五)
  • UMA 2 - Unity Multipurpose Avatar☀️三.给UMA设置默认服饰Recipes
  • uniapp-小程序登录授权框
  • Unity 性能优化Shader分析处理函数:ShaderUtil.GetShaderGlobalKeywords用法
  • 第一百四十一回 如何添加程序启动页
  • 从零开始的PICO教程(4)--- UI界面绘制与响应事件
  • IntelliJ IDEA 远程调试 Tomcat
  • 谷粒商城----认证服务
  • Mediasoup源码介绍
  • GIS入门,WKT格式详解
  • Qt之postEvent
  • 1976~2020年青藏高原典型冰川及冰湖遥感监测数据集
  • 时序预测 | MATLAB实现LSSVM最小二乘支持向量机时间序列预测未来
  • windows10 使用WSL2安装原生docker
  • jupylab pandas按条件批量处理xls数据
  • RJ45水晶头网线顺序出错排查
  • 【洛谷 P1115】最大子段和 题解(贪心算法)
  • uni-app--》基于小程序开发的电商平台项目实战(一)
  • 入门人工智能 —— 学习一门编程语言 python 基础代码编写和运算符介绍(1)
  • 【java安全】CommonsBeanUtils1
  • JVM优化(OOM,内存溢出),查看线程快照,堆内存情况等问题
  • git 给分支添加描述