2440 无法进入按键中断服务函数怎么办

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2440 无法进入按键中断服务函数怎么办相关的知识,希望对你有一定的参考价值。

参考技术A 看完中断控制系统后决定写一个按键中断程序,四个按键对应四个外部中断,每个按键按下时对于
led
亮。

主函数中我们需要做以下工作:

1
,配置
I/O
口为外部中断模式
(rGPGCON)
,配置
led
引脚为输出
(rGPBCON)
,灭
led(rGPBDAT)
。这些工作我们可以
直接
#define
一下然后在主函数中引用。如
GPG0,1,2,4
分别对于
EINT8,11,13,14
。需要配置为外部中断模式,我们可
以这样写:

#define GPG0_eint (2<<(0*2))
#define GPG1_eint (2<<(1*2))
#define GPG2_eint (2<<(2*2))
#define GPG4_eint (2<<(4*2))
然后主函数中这样写:
rGPGCON=GPG0_eint | GPG1_eint | GPG2_eint | GPG4_eint
;为什么要用
“|”
符号,是因为我
们要保证
1
能被正常写进相应位。其他寄存器的操作相信大家也能写出来了吧。

2
,初始化
MMU
,直接调用函数
MMU_Init();
为什么调用这个函数我也不是很明白,似乎需要进行地址映射什么的,大
家自己百度之就
ok
,相信学到后面再回过来看这个初始化,应该问题不大了。

3

清寄存器相应位。
S3C2440
支持
60
个中断源,
其中有
EINT0-EINT23

24
个外部中断,
EINT0-3
为系统保留,
EINT4-7
为子中断,对应中断源为
EINT4_7

EINT8-23
,对应中断源为
EINT8_23
;其他的为内部中断,内部中断也分带子中断
和不带子中断。外部中断(
0-3
)需要清
rSRCPND,rINTPND,
直接往相应位写
1
即可清除。也可以直接调用函数
ClearPending(bit);
括号内的
bit
为对应的中断值。如若中断为
EINT8-23
,则这样写:
ClearPending(EINT8-23);
。带子
中断的也需要清子中断。道理和前面一样。然后就要使能中断
(EINTMASK&rINTMSK);
这里又涉及到两个函数:
EnableIrq(bit)&EnableSubIrq(bit)
,这里的
bit
与上相同。然后再根据情况设定中断触发方式和中断优先级。我这里
EINT8_23
中断默认为低电平触发而且优先级都一样,所以不需要设置。然后装入中断服务函数地址:
pISR_EINT8_23=(U32)KEY_handle;
加入这句话后
2440
才会找到相应中断地址进入服务函数。当然,
key_handle()

数需要在
main
之前进行声明,这和
51
不一样,需要注意。

4
,进入中断服务函数处理。中断服务函数格式为:
void __irq
KEY_handle
(),
红色部分可根据函数名改变,前面的必须
这样写。不然
2440
不能识别出这是个中断服务函数。进入函数后,首先应清各中断寄存器的相应位。与之前在
main
里面处理的一样。之后再进行其他的处理。

至此,程序完成,在线调试,按键按下,相应
led
点亮。本回答被提问者和网友采纳

Nios下按键中断

  1. 中断类型:电平中断和沿中断。

  2. 操作步骤:中断使能,中断类型选择,中断服务函数注册。

         这里操作是使用库函数(其实不是函数,就是一种预定义),这样主要是为了提高程序可读性,用的是官方的东西,大家都能看明白。

       

static void Initial_Keys() { IOWR_ALTERA_AVALON_PIO_IRQ_MASK(KEY_OK_BASE,1);//中断使能 IOWR_ALTERA_AVALON_PIO_EDGE_CAP(KEY_OK_BASE,0);

alt_irq_register(KEY_OK_IRQ,NULL,KEY_OK_ISR);//注册中断服务函数

printf("register success!"); }

关于中断服务函数,在上一篇文章定时器中断文件有提及,不懂的可以自己去看看吧。

需要注意一点的是,我用的是nios ii 11.0,由于版本不一样。alt_irq_register这个函数不在#include"sys/alt_irq.h"这个目录下,但是可以在

#include“priv/alt_legacy_irq.h”目录下。

 

static void KEY_OK_ISR() { dir=RIGHT; }

中断服务函数很简单,不需要自己去清除中断标志位,打开中断使能什么的,这个相对一般的51单片机的操作会简单一些,因为很多事情os帮你做了。因为os就是一个成功男人背后默默支持他的女人。^_^...

 

以上是关于2440 无法进入按键中断服务函数怎么办的主要内容,如果未能解决你的问题,请参考以下文章

ucos系统进不了中断怎么回事

2440按键中断编程

5.2440的按照中断编程

初始化中断按键(2440)

通过按键玩中断

linux 中断管理