黑龙江网站建设企业,网站类型怎么分,网站标题改动,太仓做企业网站一.按键检测
1.硬件原理 当未按下按键时#xff0c;GPIO_5为低电平#xff0c;按下按键GPIO_5变为高电平。 根据引脚编号找到引脚名称 根据引脚名称找到引脚编号 裸机程序控制外设
特点#xff1a;读数据手册、设寄存器值
找出外设有哪些相关寄存器找出外设相关寄存器如何…一.按键检测
1.硬件原理 当未按下按键时GPIO_5为低电平按下按键GPIO_5变为高电平。 根据引脚编号找到引脚名称 根据引脚名称找到引脚编号 裸机程序控制外设
特点读数据手册、设寄存器值
找出外设有哪些相关寄存器找出外设相关寄存器如何设置
二.中断检测
1.通用中断控制器(GIC)
GIC用于管理单核或多核芯片中的中断资源
ARM公司开发了4 个版本GIC规范 V1~V4ARMv7-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保存中断IDGICC_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寄存器
CRnc15opc14CRmc0opc20
查询GIC的地址
MRC p15, 4, r1, c15, c0, 0 ;获取 GIC 基地址把c15配置成CBAR寄存器此时成c15的值就是GIC的基地址。
SCTLR 寄存器
CRnc1opc10CRmc0opc20 bit13中断向量表基地址 cache\mmu\分支预测… MRC p15, 0, Rt, c1, c0, 0 ;读取 SCTLR 寄存器数据保存到 Rt 中。
MCR p15, 0, Rt, c1, c0, 0 ;将 Rt 中的数据写到 SCTLR(c1)寄存器中。VBAR寄存器
CRnc12opc10CRmc0opc20
bit5~31中断向量表偏移地址
MRC p15, 0, Rt, c12, c0, 0 ;读取 VBAR 寄存器数据保存到 Rt 中。
MCR p15, 0, Rt, c12, c0, 0 ;将 Rt 中的数据写到 VBAR寄存器中。2.中断向量表
一级查表
自动跳转指定位置(基址偏移)
addrTYPEFUNCTIONMODE0x00Reset复位中断SVC0x04Undefined instructions未定义指令中断Undef0x08Supervisor Call软中断SYC0x0CPrefetch abort指令预取中止中断ABT0x10Data abort数据访问中止中断ABT0x14RESERVED未使用未使用0x18IRQ interruptIRQ 中断IRQ0x1CFIQ interruptFIQ 中断FIQ 通过触发不同类型的中断系统进入到相应的运行模式 二级查表 预先注册、回调执行 3.中断处理流程
中断上下文 cpu通过内核寄存器来运行指令并进行数据的读写处理的它在进入中断前一个时刻的具体值称为中断上下文 具体流程 初始化irq模式栈指针 进入irq模式 cpsr寄存器 保存现场 通用寄存器lrspsr 获取中断编号 读取GIC基地址GICC基地址(GIC cpu interface)GICC_IAR寄存器 执行中断处理函数 根据中断编号回调IRQ中断服务表 还原现场 通用寄存器 lr spsr 返回原程序 三级流水线
cpsr寄存器 ![2023-09-24T13:31:38.png][12]
bit31负数标记位bit30零标志位…M[4:0]运行模式控制位 10000User 模式10001FIQ 模式10010IRQ 模式10011SVC模式10111Abort模式11011Undef模式11111System模式10110Monitor模式11010Hyp模式
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-43.按键中断实验
GIC相关寄存器 分发器 中断数量GICD_TYPER中断清除 GICD_ ICENABLERn中断使能GICD_ISACTIVERn中断优先级设置GICD_IPRIORITYR 详见GIC官方手册 4.3 Distributor register descriptions cpu接口单元 中断优先级数量GICC_PMR抢占优先级和子优先级设置 GICC_BPR保存中断IDGICC_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,100000c语言(*(void(*)(void))0x100000)();位置相关码必须在指定运行地址运行
重定位
在执行位置相关码之前可以通过位置无关代码把位置相关码加载到位置相关代码的指定位置如重定位.data段