📄 extint.c
字号:
#include "dtm_v3.h"
#include "dtm.h"
#include "externdef.h"
// unsigned short gwPluseMile;
void EXIRQ_open (AT91PS_AIC pAic);
void EXIRQ_close ( AT91PS_AIC pAic );
//*--------------------------------------------
//*中断服务程序
//*--------------------------------------------
void __irq Ext_irq (void)
{
AT91PS_AIC pAic;
pAic = AT91C_BASE_AIC;
gwPluseMile++ ;
gwPluseAllow++;
gwPluseSetup++;
pAic->AIC_EOICR = 0;
}
void __irq Ext_error (void)
{
AT91PS_AIC pAic;
pAic = AT91C_BASE_AIC;
pAic->AIC_EOICR = 0;
}
//*----------------------------------------------------------------------------
//* 关闭中断
//*----------------------------------------------------------------------------
void EXIRQ_close ( AT91PS_AIC pAic )
{
pAic->AIC_IDCR = EXTIRQ0;
pAic->AIC_ICCR = EXTIRQ0;
pAic->AIC_SVR[16] = (unsigned int) Ext_error;
}
//*--------------------------------------------
//* 打开中断
//*--------------------------------------------
void EXIRQ_open (AT91PS_AIC pAic)
{
MY_PIO_PDR = EXTINT;
pAic->AIC_IDCR = EXTIRQ0;
pAic->AIC_SVR[16] = (unsigned int) Ext_irq;
pAic->AIC_SMR[16] = AT91C_AIC_SRCTYPE_INT_EDGE_TRIGGERED|0x5;
//pAic->AIC_SMR[16] = AT91C_AIC_SRCTYPE_INT_LEVEL_SENSITIVE|0x5;
pAic->AIC_ICCR = EXTIRQ0;
pAic->AIC_IECR = EXTIRQ0;
// pAic->AIC_ISCR = EXTIRQ0;
}
void __irq Key1IRQ2Interrupt (void)
{
AT91PS_AIC pAic;
pAic = AT91C_BASE_AIC;
pAic->AIC_EOICR = 0;
}
_BYTE AskForPowerOff()
{
_DWORD i;
DispLCDClearScreen();
DispOutText(0,0,12,(_BYTE *)" 关机确认 ");
DispOutText(2,0,11,(_BYTE *)" 确认关机吗? ");
DispOutText(4,0,10,(_BYTE *)" 按[确认]键关机 ");
DispOutText(6,0,10,(_BYTE *)" 按其它键取消 ");
DispRefresh(0,0,8,VIDEOCOL,1);
i=0;
while(i<0x2200) {
KeyReadKey();
if (gcKeyUp) {
gcKeyUp = FALSE;
if (gdwKeyNum==ENTER_MENU_KEY) return(C_OK);
else return(C_NOTOK);
}
Delayms(1);
i++;
}
return(C_NOTOK);
}
// 手持机关机的命令
void PowerOff()
{
AT91PS_AIC pAic;
_BYTE cRetCode;
int i;
cRetCode = AskForPowerOff();
if (cRetCode!=C_OK) return;
if (CSI.cStatus==S_TRAINING) {
DriverTmpLogout(); // 学员临时签退
}
pAic = AT91C_BASE_AIC;
DispLCDClearScreen();
DispBackLigth(OFF,0);
for (i=0;i<6;i++) gcpCPLDReg[i]=0;
ICPower(OFF);
Power(OFF);
MY_PS_PCDR = 0xFFFFFFFF ; // Disable all the peripheral clocks
pAic->AIC_IDCR = 0xFFFFFFFF; // Disable all interrupt
//EXIRQ_open (AT91C_BASE_AIC); //打开外部中断
MY_PIO_PDR = KEY1_MASK;
pAic->AIC_IDCR = IRQ2_MASK;
pAic->AIC_SVR[18] = (unsigned int) Key1IRQ2Interrupt;
pAic->AIC_SMR[18] = AT91C_AIC_SRCTYPE_INT_EDGE_TRIGGERED|0x7;
pAic->AIC_ICCR = IRQ2_MASK;
pAic->AIC_IECR = IRQ2_MASK;
//while(1);
while(1) {
MY_PS_PCDR = 0xFFFFFFFF ; // Disable all the peripheral clocks
MY_PS_CR = 0x00000001 ; // Write the System Clock Disable Register
MY_PS_PCER = 0xFFFFFFFF ; // Enable all the peripheral clocks
KeyReadKey(); // 扫描键盘
if (gcKeyDown) {
gcKeyDown=0;
Delayms(1000);
KeyReadKey(); // 扫描键盘
if ((gcKeyDown)) { // && (gdwKeyNum==LOGIN_KEY)) {
MY_WD_OMR = 0x3700; // HPVC=0, MCK/8
MY_WD_CR = 0xC071; // 重新启动看门狗
MY_WD_OMR = 0x2343; // 启动看门狗,等待系统复位
while(1); // 等待看门狗溢出
}
}
MY_PIO_PDR = KEY1_MASK;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -