|
#include "def.h"
#include "option.h"
#include "2440addr.h"
#include "mmu.h"
#include "stdio.h"
/*中斷處理函數(shù)按下不同按鈕進(jìn)入該中斷處理,并根據(jù)按下的不同按鈕啟動(dòng)不同功能,實(shí)現(xiàn)功能控制面板的按鈕功能*/
void __irq Eint_Isr(void)
{
switch(rEINTPEND)
{
case 1<<13: //功能1啟動(dòng),同時(shí)關(guān)閉功能2
rGPBDAT=0<<6|1<<7;
rEINTPEND=1<<13; //等待下一個(gè)自己的中斷進(jìn)入
break;
case 1<<14: //功能2啟動(dòng),同時(shí)關(guān)閉功能1
rGPBDAT=1<<6|0<<7;
rEINTPEND=1<<14; //等待下一個(gè)自己的中斷進(jìn)入
break;
case 1<<8: //關(guān)閉功能1和2
rGPBDAT=1<<6|1<<7;
rEINTPEND=1<<8; //等待下一個(gè)自己的中斷進(jìn)入
break;
default:
rGPBDAT=1<<6|1<<7;
break;
}
ClearPending(BIT_EINT8_23); //等待下一個(gè)該中斷向量?jī)?nèi)的任意中斷到來(lái)
}
/*設(shè)置啟動(dòng)后的默認(rèn)功能*/
void Led_on()
{
// 設(shè)置LED燈
rGPBCON=0x155555; //設(shè)置GPB為輸出
rGPBDAT=(0x1<<6)|(0x1<<7); //GPB7腳置位,led滅
}
/*設(shè)置按鈕出發(fā)方式*/
void Eint_func()
{
// 按鍵中斷源設(shè)置
rGPGCON=(rGPGCON&~((0x3<<0)|(0x3<<10)|(0x3<<12)))|(0x1<<1)|(0x1<<11)|(0x1<<13); //設(shè)置GPG0、5、6腳為EINT8、13、14
rGPGUP|=(0x1<<0)|(0x1<<5)|(0x1<<6); //引腳使用第二功能
rEXTINT1=rEXTINT1&~(0x7<<0);//|(0x1<<2); //按鈕1設(shè)置為低電平沿觸發(fā)
rEXTINT1=rEXTINT1&~(0x7<<20);//|(0x1<<22); //按鈕2設(shè)置為低電平沿觸發(fā)
rEXTINT1=rEXTINT1&~(0x7<<24);//|(0x1<<26); //按鈕3設(shè)置為低電平沿觸發(fā)
}
/*中斷初始化*/
void Eint_init()
{
rEINTMASK=rEINTMASK&~((0x1<<8)|(0x1<<13)|(0x1<<14)); // 使能外部中斷屏蔽,為0時(shí)不屏蔽中斷
/*設(shè)置中斷控制器*/
rINTMOD&=~BIT_EINT8_23; //設(shè)置中斷模式為IRQ
rINTMSK&=~BIT_EINT8_23; //啟動(dòng)中斷使能
}
/*中斷掛起,等中斷*/
void Eint_wait()
{
rSRCPND=rSRCPND; //中斷掛起寄存器清除
rINTPND=rINTPND; //中斷源掛起寄存器清除
rEINTPEND|=(0x1<<8)|(0x1<<13)|(0x1<<14); //外部中斷掛起寄存器,Eint13掛起等待中斷
rSRCPND=BIT_EINT8_23; //中斷源掛起寄存器相應(yīng)位置1等待中斷
rINTPND=BIT_EINT8_23; //中斷掛起寄存器相應(yīng)位置1等待中斷
}
/*設(shè)置中斷指針*/
void Eint_p()
{
pISR_EINT8_23 =(U32)Eint_Isr; //設(shè)置中斷為Eint11響應(yīng)
}
/*主程序開(kāi)始*/
void Main()
{
// isr_asm(); //使能CPSR寄存器的I位
Led_on(); //啟動(dòng)時(shí)將led熄滅
Eint_init(); //中斷初始化
Eint_func(); //中斷觸發(fā)狀態(tài)初始化
Eint_wait(); //等待中斷
Eint_p(); //中斷指針
}
|
|