按键检测|中断检测

一.按键检测

1.硬件原理

在这里插入图片描述

当未按下按键时,GPIO_5为低电平,按下按键GPIO_5变为高电平。

在这里插入图片描述

根据引脚编号找到引脚名称

在这里插入图片描述

根据引脚名称找到引脚编号

裸机程序控制外设

特点:读数据手册、设寄存器值

  • 找出外设有哪些相关寄存器
  • 找出外设相关寄存器如何设置

二.中断检测

1.通用中断控制器(GIC)

GIC用于管理单核或多核芯片中的中断资源

  • ARM公司开发了4 个版本GIC规范 ,V1~V4
  • ARMv7-A内核搭配GIC-400使用(v2)

2.GIC结构

在这里插入图片描述

  • 三类信号源:

    • 软件中断:用于多核通信,ID0~ID15
    • 私有中断:内核独有的中断,ID16~ID31
    • 共享中断:所有内核共享的中断,ID32~ID1019
  • 分发器:选择把中断信号发送到哪一个cpu接口单元

    有哪些相关寄存器?

    • 中断数量:GICD_TYPER

    • 中断清除: GICD_ ICENABLERn

    • 中断使能:GICD_ISACTIVERn

    • 中断优先级设置:GICD_IPRIORITYR

  • cpu接口单元:处理信号后,发送信号给CPU

    有哪些相关寄存器?

    • 中断优先级数量:GICC_PMR
    • 抢占优先级和子优先级设置: GICC_BPR
    • 保存中断ID:GICC_IAR
    • 通知cpu中断完成:GICC_EOIR

2.获取GIC基地址

方法一:查询芯片数据手册
在这里插入图片描述

方法二:查询cp15协处理器

共有16个:c0~c15。每个协处理器本身有多种含义,需逐步配置

//设置并读协处理器
MRC {cond} p15, <opc1>, <Rn>, <CRn>, <CRm>, <opc2>
//设置并写协处理器
MCR {cond} p15, <opc1>, <Rn>, <CRn>, <CRm>, <opc2> 
  • cond:执行条件,一般省略
  • opc1:第一层设置
  • Rn:通用寄存器
  • CRn:要设置的协处理器
  • CRm:第二层设置
  • opc2:第三层设置

在这里插入图片描述

CBAR寄存器

CRn=c15,opc1=4,CRm=c0,opc2=0

  • 查询GIC的地址
MRC p15, 4, r1, c15, c0, 0 ;获取 GIC 基地址

把c15配置成CBAR寄存器,此时成c15的值就是GIC的基地址。

SCTLR 寄存器

CRn=c1,opc1=0,CRm=c0,opc2=0

在这里插入图片描述

  • bit13:中断向量表基地址

  • cache\mmu\分支预测…

    MRC p15, 0, <Rt>, c1, c0, 0 ;读取 SCTLR 寄存器,数据保存到 Rt 中。
    MCR p15, 0, <Rt>, c1, c0, 0 ;将 Rt 中的数据写到 SCTLR(c1)寄存器中。
    

VBAR寄存器

CRn=c12,opc1=0,CRm=c0,opc2=0

在这里插入图片描述

  • bit5~31:中断向量表偏移地址
MRC p15, 0, <Rt>, c12, c0, 0 ;读取 VBAR 寄存器,数据保存到 Rt 中。
MCR p15, 0, <Rt>, c12, c0, 0 ;将 Rt 中的数据写到 VBAR寄存器中。

2.中断向量表

一级查表

自动跳转指定位置(基址+偏移)

addrTYPEFUNCTIONMODE
0x00Reset复位中断SVC
0x04Undefined instructions未定义指令中断Undef
0x08Supervisor Call软中断SYC
0x0CPrefetch abort指令预取中止中断ABT
0x10Data abort数据访问中止中断ABT
0x14RESERVED未使用未使用
0x18IRQ interruptIRQ 中断IRQ
0x1CFIQ interruptFIQ 中断FIQ

通过触发不同类型的中断,系统进入到相应的运行模式
在这里插入图片描述

在这里插入图片描述

二级查表

预先注册、回调执行
在这里插入图片描述

3.中断处理流程

中断上下文

cpu通过内核寄存器来运行指令并进行数据的读写处理的,它在进入中断前一个时刻的具体值,称为中断上下文

具体流程
  • 初始化irq模式栈指针

  • 进入irq模式

    • cpsr寄存器
  • 保存现场

    • 通用寄存器
    • lr
    • spsr
  • 获取中断编号

    • 读取GIC基地址
    • GICC基地址(GIC cpu interface)
    • GICC_IAR寄存器
  • 执行中断处理函数

    • 根据中断编号,回调IRQ中断服务表
  • 还原现场

    • 通用寄存器

    • lr

    • spsr

  • 返回原程序

    • 三级流水线

cpsr寄存器
在这里插入图片描述

  • bit31:负数标记位
  • bit30:零标志位
  • M[4:0]:运行模式控制位
    • 10000:User 模式
    • 10001:FIQ 模式
    • 10010:IRQ 模式
    • 10011:SVC模式
    • 10111:Abort模式
    • 11011:Undef模式
    • 11111:System模式
    • 10110:Monitor模式
    • 11010:Hyp模式
mrs <Rt>,cpsr //读cpsr
msr cpsr,<Rt> //写cpsr
cps #xx //写立即数到cpsr中的M[4:0]
GICC基地址

4.1.3 CPU interface register ma (GIC官方手册)

在这里插入图片描述

三级流水线
  • 取指令(pc)
  • 译指令
  • 执行指令
lr = pc = 当前执行指令+8
当前执行指令的下一条:lr-4

3.按键中断实验

GIC相关寄存器
  • 分发器

    • 中断数量:GICD_TYPER
    • 中断清除: GICD_ ICENABLERn
    • 中断使能:GICD_ISACTIVERn
    • 中断优先级设置:GICD_IPRIORITYR

    详见GIC官方手册

    4.3 Distributor register descriptions

  • cpu接口单元

    • 中断优先级数量:GICC_PMR
    • 抢占优先级和子优先级设置: GICC_BPR
    • 保存中断ID:GICC_IAR
    • 通知cpu中断完成:GICC_EOIR

    详见GIC官方手册

    4.4 CPU interface register descriptions

GPIO中断相关寄存器
  • gpio中断触发类型:高/低电平、上升/下降沿

    • GPIO5_ICR1(0~15)

    • GPIO5_ICR2(16~31)

  • gpio中断屏蔽

    • GPIO5_IMR
  • gpio中断状态寄存器

    • GPIO5_ISR
  • gpio双边缘触发

    • GPIO5_EDGE_SEL

    详见芯片数据手册

    28.5 GPIO Memory Map/Register Definition

中断服务函数表

记录每个IRQ中断的回调函数

  • 函数指针

  • 函数参数

中断向量表偏移位置

C语言读写cp15协处理器

__ASM ( code : 输出操作数列表 : 输入操作数列表 );

  • code

    • 具体操作指令(字符串表示)

    • #是把宏参数变为一个字符串

    • ##是把两个参数连接在一起

    __STRINGIFY(p##coproc) ", ->“p15”

  • 操作数

    通过%加数字引用,比如%0 引用第一个操作数,%1 引用第二个操作数

    r:将变量放入通用寄存器

4.位置无关码和重定位

程序执行和变量访问的两种方式:

  • pc指针+偏移地址
  • 绝对地址
位置无关码

没有出现绝对地址访问的代码称为位置无关码

  • 普通.text段指令
  • 局部变量

位置无关码可以在任意合法内存运行

位置相关码

出现了绝对地址访问的代码称为位置相关码

  • 访问.data段:初始值非零的全局变量、静态变量

  • 访问.rodata段:字符串、具有初始值的数组

  • 访问.bss段:初始值为0的全局变量、静态变量

  • 特殊.text段指令

    汇编: ldr pc,=100000
    
    c语言:(*(void(*)(void))0x100000)();
    

位置相关码必须在指定运行地址运行

重定位

在执行位置相关码之前,可以通过位置无关代码把位置相关码加载到位置相关代码的指定位置,如重定位.data段

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

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

相关文章

SpringBoot 统计API接口用时该使用过滤器还是拦截器?

统计请求的处理时间&#xff08;用时&#xff09;既可以使用 Servlet 过滤器&#xff08;Filter&#xff09;&#xff0c;也可以使用 Spring 拦截器&#xff08;Interceptor&#xff09;。两者都可以在请求处理前后插入自定义逻辑&#xff0c;从而实现对请求响应时间的统计。 …

行业分享----dbaplus174期:美团基于Orchestrator的MySQL高可用实践

记录 MySQL高可用方案-MMM、MHA、MGR、PXC https://blog.csdn.net/jycjyc/article/details/119731980 美团数据库高可用架构的演进与设想 https://tech.meituan.com/2017/06/29/database-availability-architecture.html

Apache Doris (六十四): Flink Doris Connector - (1)-源码编译

🏡 个人主页:IT贫道-CSDN博客 🚩 私聊博主:私聊博主加WX好友,获取更多资料哦~ 🔔 博主个人B栈地址:豹哥教你学编程的个人空间-豹哥教你学编程个人主页-哔哩哔哩视频 目录 1. Flink与Doris版本兼容

HarmonyOS—声明式UI描述

ArkTS以声明方式组合和扩展组件来描述应用程序的UI&#xff0c;同时还提供了基本的属性、事件和子组件配置方法&#xff0c;帮助开发者实现应用交互逻辑。 创建组件 根据组件构造方法的不同&#xff0c;创建组件包含有参数和无参数两种方式。 说明 创建组件时不需要new运算…

如何禁用WordPress站点的管理员电子邮件验证或修改检查频率?

今天boke112百科登录某个WordPress站点时&#xff0c;又出现“管理员邮件确认”的提示&#xff0c;要求确认此站点的管理员电子邮箱地址是否仍然正确。具体如下图所示&#xff1a; 如果点击“稍后提醒我”&#xff0c;那么管理员邮件验证页面就会在3天后重新显示。 说实话&…

多输入多输出 | Matlab实现PSO-CNN粒子群优化卷积神经网络多输入多输出预测

多输入多输出 | Matlab实现PSO-CNN粒子群优化卷积神经网络多输入多输出预测 目录 多输入多输出 | Matlab实现PSO-CNN粒子群优化卷积神经网络多输入多输出预测预测效果基本介绍模型背景程序设计参考资料 预测效果 基本介绍 Matlab实现PSO-CNN粒子群优化卷积神经网络多输入多输出…

WordPress后台仪表盘自定义添加删除概览项目插件Glance That

成功搭建WordPress站点&#xff0c;登录后台后可以在“仪表盘 – 概览”中看到包括多少篇文章、多少个页面、多少条评论和当前WordPress版本号及所使用的主题。具体如下图所示&#xff1a; 但是如果我们的WordPress站点还有自定义文章类型&#xff0c;也想在概览中显示出来应该…

【深度学习入门】深度学习基础概念与原理

*&#xff08;本篇文章旨在帮助新手了解深度学习的基础概念和原理&#xff0c;不深入讨论算法及核心公式&#xff09; 目录 一、深度学习概述 1、什么是深度学习&#xff1f; 2、深度学习与传统机器学习的区别 3、深度学习的应用领域 二、深度学习基本原理 1、神经网络的…

uniapp中uview组件库的NoticeBar 滚动通知 使用方法

目录 #平台差异说明 #基本使用 #配置主题 #配置图标 #配置滚动速度 #控制滚动的开始和暂停 #事件回调 #API #Props #Events 该组件用于滚动通告场景&#xff0c;有多种模式可供选择 #平台差异说明 AppH5微信小程序支付宝小程序百度小程序头条小程序QQ小程序√√√√…

如何避免知识付费小程序平台的陷阱?搭建平台的最佳实践

随着知识经济的兴起&#xff0c;知识付费已经成为一种趋势。越来越多的人开始将自己的知识和技能进行变现&#xff0c;而知识付费小程序平台则成为了一个重要的渠道。然而&#xff0c;市面上的知识付费小程序平台琳琅满目&#xff0c;其中不乏一些不良平台&#xff0c;让老实人…

阿赵UE学习笔记——10、Blender材质和绘制网格体

阿赵UE学习笔记目录   大家好&#xff0c;我是阿赵。   之前介绍了虚幻引擎的材质和材质实例。这次来介绍一个比较有趣的内置的Blender材质。   在用Unity的时候&#xff0c;我做过一个多通道混合地表贴图的效果&#xff0c;而要做过一个刷顶点颜色混合地表和水面的效果。…

【Web】CTFSHOW PHP特性刷题记录(全)

知其然知其所以然&#xff0c;尽量把每种特性都详细讲明白。 目录 web89 web90 web91 web92 web93 web94 web95 web96 web97 web98 web99 web100 web101 web102 web103 web104 web105 web106 web107 web108 web109 web110 web111 web112 web113 web…