S3C2440之中断操作(MDK4.22)

背景知识:

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代码

  1. #include "S3C2440.h"  
  2. #include "int.h"  
  3.   
  4.   
  5. void init_irq(void)  
  6. {  
  7.   
  8.     pHandleEINT0     = EINT0_Handle;  
  9.     pHandle
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值