嵌入式Linux-JZ2440-05课-中断模式理解

大部分内容转自 种菜大爷,在他的基础上加一些自己不明白的地方注释和修改,如有侵权,联系我,第一时间删掉。
在这里插入图片描述
S3C2440的中断分为两大类: 外部中断 和 内部中断.
一 外部中断
在这里插入图片描述

**EXTINT[x]: 用来配置各个引脚的中断触发方式 (高电平触发、低电平触发、下降沿触发、上升沿触发), 注意该寄存器与中断源的对应关系

EINTPEND[x]: xxxPEND的寄存器都是状态寄存器, 初始化时先清除标志, 在清除中断的时候将寄存器的值赋值给本身即可

EINTMASK[x]: 1 屏蔽中断; 0 未屏蔽

SRCPND[x]: 1 申请中断; 0 未申请中断

EINTFLT0~EINTFLT3: 配置滤波时钟和滤波宽度

INTMOD[x]: 1: FIQ, 0: IRQ

二 内部中断
内部中断分两种: 带子中断的中断 和 不带子中断的中断

不带子中断(): 发生中断后 SRCPEND置位, 如果没有被 INTMSK屏蔽, 那么继续向下一步申请中断

带子中断: 发生中断之后, 先将 SUBSRCPEND 置位, 如果没有INTSUBMSK屏蔽则向 SRCPEND申请中断. 如果没有被INTMSK屏蔽则进一步向下申请中断

在这里插入图片描述
在这里插入图片描述
中断的优先级:
ARB_MODEx: 控制中断优先级是否轮转

ARB_SELx: 控制轮转顺序

中断的开启(xxxMSK):
1 外部中断: EINT4~23先初始化EINTMSK 和 INTMSK, 如果是EINT0~3直接初始化INTMSK
2 内部中断: 有子中断先初始化 INTSUBMSK 再初始化 INTMSK, 如果是不带子中断的内部中断直接初始化 INTMSK
中断的清除(xxxPEND):
1 外部中断: 如果是EINT4~23 先清除EINTPEND 再清除SRCPND、最后清除 INTPND (注意顺序), 如果是 EINT0~3 先清除SRCPND.,然后清除 INTPND (不需要清除 EINTPEND)
2 内部中断: 带子中断, 先清除 SUBSRCPND再清除SRCPND(注意顺序); 不带子中断直接清除SRCPND
3 清除中断是写 1 清除
在这里插入图片描述

代码执行示意图:
在这里插入图片描述
在这里插入图片描述
Makefile

objs := head.o init.o interrupt.o main.o
# $^ 代表所有的依赖文件。 $@--目标文件,$<--第一个依赖文件。
int.bin: $(objs)
    arm-linux-ld -Ttext 0x00000000 -o int_elf $^
    arm-linux-objcopy -O binary -S int_elf $@ # binary:二进制的 -S:不从源文件复制重定位信息和符号信息到目标文件中去
    arm-linux-objdump
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值