armlinux-外部中断

s3c2440的中断框图

如果我们单纯配置一个按键的外部中断,就不存在子中断与优先级的问题。

由于是按键的外部中断,通过引脚的高低电平来触发。所以我们要先配置引脚的功能。

我们使用按键1,终端源为EINT8,对应引脚GPG0

通过用户手册可以看到,我们需要初始化IO口配置的寄存器有

1.端口G控制寄存器(GPGCON)

2.外部中断控制寄存器(EXTINT1)

3.外部中断屏蔽寄存器(EINTMASK)

1.对应GPGCON寄存器0位

2.

3.

还要初始化中断的寄存器: 中断屏蔽(INTMSK)寄存器

复制代码
void eint11_init(void)
{
    //配置GPG0为EINT8
    GPGCON &= ~(0x3 << 0);
    GPGCON |= (0x2 << 0);

    //设置EINT11为下降沿触发
    EXTINT1 &= ~(0x7 << 0);
    EXTINT1 |= (0x2 << 0);

    //使能中断

    EINTMASK &= ~(0x1 << 8);
    
    //设置中断屏蔽寄存器,可服务
    INTMSK &= ~(0x1 << 5);
    
}

我们还要配置程序状态寄存器CPRS的I位,打开中断

I=1时,IRQ(中断模式)被禁止;I=0时,IRQ中断生效

在汇编端

复制代码
mrs r0, cpsr
	bic r0, r0, #(1<<7)
	msr cpsr_c, r0          ;使能I位(IRQ

	mrs	r0, cpsr
	bic r0, r0, #0x1f
	orr r0, r0, #0x12
	msr cpsr_c, r0			;切换工作模式到IRQ

	ldr sp, =0x40000c00		;初始化IRQ的栈

当按键后,中断会导致程序进入异常处理第七句

所以在这里写处理函数,类似于中断回调

进入deal_irq

红色区域是对中断的处理,自定义。蓝色是对中断的关闭,需要用到的寄存器就是代码上的那些。

应该遵守先关前面的中断源开关,再关后面的挂起标志。因为是前者产生的后者,不关前者就会一直产生后者。

相关推荐
czhaii26 分钟前
单片机伺服电机加减速控制子程序
c语言·单片机
熠速33 分钟前
基于PolarLabBox的永磁同步电机(PMSM)零速带载闭环+全速域无感:8小时从理论到落地
单片机·嵌入式硬件·硬件在环半实物仿真
深圳市晶科鑫实业有限公司1 小时前
5G与AIoT时代:如何选择晶振常用频率?
服务器·单片机·物联网·5g·智能路由器·健康医疗·信息与通信
JNX_SEMI1 小时前
EG2031L:220V半桥驱动,1.5A灌流,宽压5V供电
单片机·嵌入式硬件
m0_377108142 小时前
stm32-SPI
stm32·单片机·嵌入式硬件
QiLinkOS2 小时前
从技术到资产的跃迁:企业专利布局的深层逻辑
c语言·数据结构·c++·单片机·嵌入式硬件·算法·开源
夜听莺儿鸣2 小时前
201_002 Zynq7000 SoC PS资源介绍
嵌入式硬件·硬件架构
wohoo_wangzi3 小时前
苏州晟雅泰电子:关于汽车领域会用到的5类存储芯片,容量参数、设计方案和主要应用场景
嵌入式硬件·汽车
踏着七彩祥云的小丑3 小时前
嵌入式测试学习第 22 天:仿真看简易电路,熟悉电路运行逻辑
单片机·嵌入式硬件
czhaii4 小时前
基于51单片机的Modbus从机通信系统
开发语言·单片机