新聞中心

S3C2440-RTC中斷

作者: 時間:2016-12-02 來源:網(wǎng)絡(luò) 收藏
void SetAlarm(){
rALMSEC = alarm_buffer[0];
rALMMIN = alarm_buffer[1];
rALMHOUR = alarm_buffer[2];
rALMDATE = alarm_buffer[3];
rALMMON = alarm_buffer[4];
rALMYEAR = alarm_buffer[5];
}
void __irq EINT0_ISR(void){
rSRCPND |= 1; //SRCPND 通過寫入數(shù)據(jù)清零,如果不清零,會反復(fù)進(jìn)行請求
rINTPND |= 1; //INDPND 通過置1清零
flag = 1;
}
void __irq EINT2_ISR(void){ //使用__irq這個關(guān)鍵字定義終端服務(wù)例程,這樣系統(tǒng)會自動為我們保留一些變量,并能在中斷處理完后正確的返回
rSRCPND |= 1<<2;
rINTPND |= 1<<2;
rTICNT &= "(1<<7);
rGPBDAT = 0xfe; //如果按鍵被按下,關(guān)閉節(jié)拍時間中斷
}
void __irq Alarm_ISR(void){
rSRCPND |= 1<<30; //SRCPND 通過寫入數(shù)據(jù)清零,如果不清零,會反復(fù)進(jìn)行請求
rINTPND |= 1<<30; //INDPND 通過置1清零
rTICNT = (1<<7)|(127<<0); //開啟節(jié)拍時間中斷,設(shè)置每1s中斷一次
}
void __irq Tick_ISR(void){
rSRCPND |= 1<<8; //SRCPND 通過寫入數(shù)據(jù)清零,如果不清零,會反復(fù)進(jìn)行請求
rINTPND |= 1<<8; //INDPND 通過置1清零
if(count%2 == 0)
rGPBDAT = 0x1;
else
rGPBDAT = 0xfe;
count++;
if(count == 20){
count = 0;
rGPBDAT = 0;
rTICNT &= "(1<<7); //中斷20次,然后停止節(jié)拍時間中斷
}
}
int Main(){
flag = 0;
count = 0;
t = 0;
rGPFCON &= 0xffcc; //0
rGPFCON |= (1<<1)|(1<<5);
rGPFUP = 0xfe;
rGPBCON &= 0xfffc;
rGPBCON |= 0x1;
rGPBUP = 0xfe;
rULCON0 = 0xfff00;
rULCON0 |= 0x3;
rUCON0 = 0x0800;
rUCON0 |= 0x05;
rUBRDIV0 = 26;
rRTCALM = (1<<1)|(1<<6); //主要全局報警使能,然后是分鐘報警使能
rSUBSRCPND |= 0x3;
rSRCPND |= (1<<0)|(1<<2)|(1<<8)|(1<<28)|(1<<30); //先清一下
rINTPND |= (1<<0)|(1<<2)|(1<<8)|(1<<28)|(1<<30); //先清一下
rINTMSK &= ("(0x1<<0))&("(0x1<<2))&("(0x1<<8))&("(0x1<<28))&("(0x1<<30)); //開中斷
rINTSUBMSK &= ("(0x1<<0)) & ("(0x1<<1));
pISR_EINT0 = (U32)EINT0_ISR;
pISR_EINT2 = (U32)EINT2_ISR;
pISR_TICK = (U32)Tick_ISR;
pISR_RTC = (U32)Alarm_ISR;
pISR_UART0 = (U32)Uart_ISR;
Init_LCD();
Paint_background(0xffffff,0,0,320,240);
SetAlarm();
SetTime();
ShowTime();
while(1){
if(flag){
Paint_background(0xffffff,0,0,320,240);
ShowTime();
flag = 0;
}
}
}

上一頁 1 2 3 下一頁

關(guān)鍵詞: S3C2440RTC中斷節(jié)拍中

評論


技術(shù)專區(qū)

關(guān)閉