您现在的位置: 电玩巴士 >> GBA >> 掌机学院 >> 掌机开发 >> 文章正文

GBA探索日记(七):Interrupt

 

这一节是简单地讲讲关于中断的使用.声音的播放就必修使用有关时间的中断.GBA里面有14个硬件中断可以使用,但其实我们一般都只使用其中的一个就够了.我在这里将介绍两种使用中断的方法,希望对你能有所帮助.

 

首先我介绍一个十分简单的使用中断的方法.

先看看这张图片

图中看到Work RAM的顶头03007ffc的地址就是保存中断处理函数地址的地方.

GBA程序里,你只需要简单地把你的中断处理函数的地址传输到这个32位内存块中就行了.

 

然后我们再看看有关中断控制的寄存器

1.REG_IME 硬件中断总开关

When this flag is 0, all interrupts are disabled.

REG_IME设置成0,所有中断都禁止

When 1, the setting for interrupt enable register IE is enabled

REG_IME设置成1,允许使用中断.

 

2.REG_IE 具体中断开关

With the interrupt enable register, each hardware interrupt can be individually masked

我想图中已经很清楚地显示出来它的设置方法了.

当对应位设置成1,表示开起该中断,当对应位设置成0,表示关闭改中断.

除了Timer和V -Blank中断,其它中断我们一般不用,所以也不必太在意具体的设置.

Timer中断就是简单的时间中断.前一篇日记中具体讲解了Timer的使用.当一个Timer计数器自增到溢出时,系统就会产生个Timer中断.

 

V-Blank中断是个关于显示扫描的中断.具体时间是频率是59.727 Hz,每16.743 ms一次.由于它的频率跟60Hz很接近,而且很稳定,所以AgbLib官方开发包里面也把它当成了控制声音播放的时间中断来使用. 再后面关于声音的播放部分,我也将使用它作为声音播放的时间控制. 当然,你也可以使用标准的Timer来控制时间,不过对于声音播放这种精度要求不高的控制来所,V-Blank中断完全足够了.

 

3.REG_IF

When an interrupt request signal is generated from each hardware device, the corresponding interrupt request flag is set in the IF Register

当一个中断信号由硬件产生,相应的中断标志就会出现在REG_IF寄存器里面.这样你就知道该中断是从那里产生的.

 

首先要说明的是,REG_IF是个只读寄存器.通过它你可以知道你的中断服务函数是由什么中断引起的.

 

好了,理论部分就讲完了.下面我们看看实例代码.

#include <agb.h>

void Interrupts(void);

int main()

{

                REG_IME = 0x00; // Disable interrupts

                REG_INTERUPT = (u32)Interrupts;// Set interrupt proc address (IRQHandler)

                REG_IE |= 1;                                          // Enable V-Blank IRQ.

                REG_DISPSTAT |= 1<<3;    // Enable Display V-Blank IRQ also.

                REG_IME = 1;                                       // Enable interrupts

                while(1)

                {

                }

}

 

void Interrupts(void)

{

                REG_IME = 0x00; // Disable interrupts

                if((REG_IF & 1) == 1) // 如果是V-Blank中断

                {

                      &nbs

[1] [2] 下一页

相关文章:
【编辑:admin】  【文章来源:tangl_99 金点时空】  【更新时间:2004-12-31 4:05:11】
巴士全站中的精华
24小时热点推荐
我们向您隆重推荐的内容