初入ARM,点灯,按键与中断相结合

与MCU不同,ARM属于功能更复杂,更强大的SOC,是可以移植操作系统的,但是在最开始学习arm,需要了解arm的运行方式,所以现在使用的是裸机开发。arm系统有多种工作模式,分别是User,IRQ,FIQ,Supervisor,Abort,Undef 和 System。一般情况下arm会工作在User模式,但是当有异常发生时,pc指针会指向异常向量表中对应的异常向量,该异常向量保存的是异常处理函数入口,然后就会进入异常处理函数。

而对这些异常向量进行初始化,对其对应的cpsr,sp进行初始化就是需要汇编实现的功能,将这些写好之后,在汇编中使用b指令进行跳转,跳转到c文件的主函数开始正常运行。

而这些异常向量最常用到的就是中断异常,我选择的是使用IRQ模式执行中断处理函数,当产生中断的时候就会跳转到异常向量的位置,然后会跳转到中断处理函数,该中断处理函数是所有的中断都会跳转过来的函数,所以在该函数中,需要对跳转的是哪一个中断进行判断,一般使用的是INTOFFSET,中断偏移量进行判断,INTOFFSET值不同就代表了不同的中断,然后根据对应的中断去处理相应的函数,最终在处理完之后要记得源挂起寄存器和中断挂起寄存器的置起位都清掉,不然就会反复执行该中断。

因为我要使用的是按键,使用按键需要配置端口 G 控制寄存器(GPGCON, GPGDAT, GPGUP)

然后配置GPGCON寄存器中的GPG0,GPG3等与按键相关的这六个GPG,让他们的模式为EINT模式,就可以通过按键触发对应的外部中断了。然后通过配置EXTINTn(外部中断控制寄存器 n),就可以选择对应的触发方式,按键按下是高电平向低电平的跳变,所以这里选择的是下降沿触发方式,然后需要配置EINTMASK(外部中断屏蔽寄存器),通过配置该寄存器的对应位来允许中 断,这些都是对该外部中断的初始化,让其按下按键会进入相应的终端,最后在中断处理函数中检查EINTPEND(外部中断挂起寄存器)中被置起的位,就可以得知是外部中断是EINT8_23中的哪一个中断被相应了,然后就让一全局变量的键值改变,最后使用led灯对该键值进行显示。

但是在使用led之前,也同样需要查手册,对led点亮相关的GPB寄存器进行配置,写好初始化函数,还要写好led点亮的函数,最后才能实现按键控制led的功能。

总而言之,与之前学习的51相比,要实现一个简单的功能,也需要查手册,然后需要配置大量的寄存器才能实现对应的功能,但是寄存器这么多也才能实现更复杂的功能,所以还需继续加油!

下面是我实现该功能所需要配置的寄存器的手册内容

相关推荐
byte轻骑兵4 小时前
如何定制BlueZ编译:开启/关闭BLE/音频模块的编译参数配置
linux·arm开发·蓝牙·bluez·电脑蓝牙
亿道电子Emdoor1 天前
【Arm】MSP和PSP的区别简介
c语言·arm开发·单片机·mcu
Lee_jerome2 天前
《C/C++编译全家桶:g++四阶段、.a与.so区别、CMake构建、ARM交叉编译,这篇全讲透了》
c语言·开发语言·arm开发·c++·编译·cmake·cmakelists
Dlrb12112 天前
ARM---IMX6ULL的LCD模块简介及LCD驱动程序的编写
arm开发·lcd·arm·imx6ull·显存·像素
深信达沙箱3 天前
漏洞修不完、合规过不了?先御OS如何让嵌入式设备‘出厂即合规
arm开发·操作系统·嵌入式操作系统
木木_王3 天前
嵌入式学习 | STM32 裸板驱动开发(Day05)超详细复习笔记外部中断 EXTI、NVIC 优先级、串口中断实战
arm开发·stm32·学习
振南的单片机世界3 天前
3.5T静默分帧,CRC16校验:Modbus-RTU帧结构解析
arm开发·stm32·单片机·嵌入式硬件
m0_547486663 天前
《Arm Cortex-M4嵌入式系统-STM32G4系列微控制器的原理架构与开发》全套PPT课件
arm开发·stm32·嵌入式硬件
工业设备方案笔记3 天前
RK3588 AI部署实战:如何在ARM设备上运行AI模型?——从模型转换到边缘推理全过程解析
arm开发·人工智能·边缘计算
2601_954706493 天前
基于 ARM 虚拟化的云手机架构选型与 Python 自动化实战——2026 年 8 月为何我推荐傲晨云手机
arm开发·智能手机·架构