⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 extint.c

📁 AT91fr40162的FLASH读写程序
💻 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 + -