新闻中心

EEPW首页 > 嵌入式系统 > 设计应用 > S3C2440-RTC中断

S3C2440-RTC中断

作者: 时间:2016-12-02 来源:网络 收藏
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 通过写入数据清零,如果不清零,会反复进行请求
rINTPND |= 1; //INDPND 通过置1清零
flag = 1;
}
void __irq EINT2_ISR(void){ //使用__irq这个关键字定义终端服务例程,这样系统会自动为我们保留一些变量,并能在中断处理完后正确的返回
rSRCPND |= 1<<2;
rINTPND |= 1<<2;
rTICNT &= "(1<<7);
rGPBDAT = 0xfe; //如果按键被按下,关闭节拍时间中断
}
void __irq Alarm_ISR(void){
rSRCPND |= 1<<30; //SRCPND 通过写入数据清零,如果不清零,会反复进行请求
rINTPND |= 1<<30; //INDPND 通过置1清零
rTICNT = (1<<7)|(127<<0); //开启节拍时间中断,设置每1s中断一次
}
void __irq Tick_ISR(void){
rSRCPND |= 1<<8; //SRCPND 通过写入数据清零,如果不清零,会反复进行请求
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次,然后停止节拍时间中断
}
}
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 下一页

评论


技术专区

关闭