背景知识:
2440中断控制器接收60个中断源。
中断被分为多种类别,此处为32类别,正好用32位。

图上可以很好的表示整个中断的流程。有些中断源对应一个中断类别,比如串口中断发送,接收最后都对应到串口中断。submask屏蔽子类别,未屏蔽的会引起srcpnd相应位置位,如果mask未屏蔽的话,就会紧接着判断优先级,最后导致intpnd置位,然后产生了IRQ,而FIQ不需要优先级判断,会直接产生,由intmod设置。
注意的是:进入ISR后,清除中断的顺序很重要,首先是srcpnd接着是intpnd,如果还需要清除eintpnd的话,要最先清除。
实验过程:
编译工具--MDK4.22
硬件图

首先需要配置GPF0/1/2/4的脚为EINT0/1/2/4。
由于用到了外部4-7中断,需要开启EINTMASK寄存器相应位。设置优先级寄存器,设置INTMSK寄存器。
在2440A.s中已经设置了I F位开启,可以接收中断了。
在中断初始化代码里,需要将中断函数的地址安装到中断向量表中。
程序如下:
MDK4.22的启动代码设置

配置了堆,栈,以及中断向量表的地址为0x33ffff20处。配置了B口和F口,B口试LED的灯显示,F口是连接按键的外部中断。按一个键会亮一个LED。
int.c代码
- #include "S3C2440.h"
- #include "int.h"
- void init_irq(void)
- {
- pHandleEINT0 = EINT0_Handle;
- pHandleEINT1 = EINT1_Handle;

本文介绍了S3C2440处理器中断操作的背景知识和实验过程,包括中断控制器的功能、中断类别和流程。通过MDK4.22编译工具,配置中断源、优先级、中断向量表,并提供了中断处理函数的示例代码,以实现按键触发LED亮灯功能。
最低0.47元/天 解锁文章
8011

被折叠的 条评论
为什么被折叠?



