📄 timerinit.c
字号:
#include "\inc\define.h"
#include "\inc\drives.h"
#include "\inc\timerinit.h"
volatile U32 OSTimeDly_sys = 0;
volatile U32 OSTimeDly_user[6] = {0,0,0,0,0,0};
void __irq Timer0IntISR(void);
void __irq Timer1IntISR(void);
void __irq Timer2IntISR(void);
void __irq Timer3IntISR(void);
void __irq Timer4IntISR(void);
void __irq Timer5IntISR(void);
void __irq RTCSecTickISR(void);
void __irq RTCAlarmISR(void);
void Timer0Init(void)
{
OSTimeDly_user[0] = 0;
rINTMSK &= ~BIT_TIMER0;
pISR_TIMER0 = (int)Timer0IntISR;
rTCFG0 &= ~(0xff << 0);
rTCFG0 |= (250 << 0);
rTCFG1 &= ~(0xf << 0);
rTCFG1 |= (0x2 << 0);
rTCNTB0 = 1600;
rTCON |= (SETBIT3 | SETBIT1) ;
rTCON &= ~SETBIT1;
rTCON |= (SETBIT0);
}
void Timer1Init(void)
{
OSTimeDly_user[1] = 0;
rINTMSK &= ~BIT_TIMER1;
pISR_TIMER1 = (int)Timer1IntISR;
rTCFG0 &= ~(0xff << 0);
rTCFG0 |= (250 << 0);
rTCFG1 &= ~(0xf << 4);
rTCFG1 |= (0x2 << 4);
rTCNTB1 = 3200;
rTCON |= (SETBIT11 | SETBIT9) ;
rTCON &= ~SETBIT9;
rTCON |= (SETBIT8);
}
void Timer2Init(void)
{
OSTimeDly_user[2] = 0;
rINTMSK &= ~BIT_TIMER2;
pISR_TIMER2 = (int)Timer2IntISR;
rTCFG0 &= ~(0xff << 8);
rTCFG0 |= (250 << 8);
rTCFG1 &= ~(0xf << 8);
rTCFG1 |= (0x2 << 8);
rTCNTB2 = 16000;
rTCON |= (SETBIT15 | SETBIT13) ;
rTCON &= ~SETBIT13;
rTCON |= (SETBIT12);
}
void Timer3Init(void)
{
OSTimeDly_user[3] = 0;
rINTMSK &= ~BIT_TIMER3;
pISR_TIMER3 = (int)Timer3IntISR;
rTCFG0 &= ~(0xff << 8);
rTCFG0 |= (250 << 8);
rTCFG1 &= ~(0xf << 12);
rTCFG1 |= (0x2 << 12);
rTCNTB3 = 32000;
rTCON |= (SETBIT19 | SETBIT17) ;
rTCON &= ~SETBIT17;
rTCON |= (SETBIT16);
}
void Timer4Init(void)
{
OSTimeDly_user[4] = 0;
rINTMSK &= ~BIT_TIMER4;
pISR_TIMER4 = (int)Timer4IntISR;
rTCFG0 &= ~(0xff << 16);
rTCFG0 |= (250 << 16);
rTCFG1 &= ~(0xf << 16);
rTCFG1 |= (0x2 << 16);
rTCNTB4 = 64000;
rTCON |= (SETBIT23 | SETBIT21) ;
rTCON &= ~SETBIT21;
rTCON |= (SETBIT20);
}
void Timer5Init(void)
{
OSTimeDly_sys = 0;
OSTimeDly_user[5] = 0;
rINTMSK &= ~BIT_TIMER5;
pISR_TIMER5 = (int)Timer5IntISR;
rTCFG0 &= ~(0xff << 16);
rTCFG0 |= (250 << 16);
rTCFG1 &= ~(0xf << 20);
rTCFG1 |= (0x2 << 20);
rTCNTB5 = 320;
rTCON |= (SETBIT26 | SETBIT25) ;
rTCON &= ~SETBIT25;
rTCON |= (SETBIT24);
}
void TimersInit(void)
{
Timer0Init();
Timer1Init();
Timer2Init();
Timer3Init();
Timer4Init();
Timer5Init();
}
void __irq Timer0IntISR(void)
{
rI_ISPC = BIT_TIMER0;
OSTimeDly_user[0] ++;
//puts("timer0\n");
}
void __irq Timer1IntISR(void)
{
rI_ISPC = BIT_TIMER1;
OSTimeDly_user[1] ++;
//puts("timer1\n");
}
void __irq Timer2IntISR(void)
{
rI_ISPC = BIT_TIMER2;
OSTimeDly_user[2] ++;
//puts("timer2\n");
}
void __irq Timer3IntISR(void)
{
rI_ISPC = BIT_TIMER3;
OSTimeDly_user[3] ++;
//puts("timer3\n");
}
void __irq Timer4IntISR(void)
{
rI_ISPC = BIT_TIMER4;
//puts("timer4\n");
OSTimeDly_user[4] ++;
}
void __irq Timer5IntISR(void)
{
rI_ISPC = BIT_TIMER5;
OSTimeDly_user[5] ++;
OSTimeDly_sys ++;
//puts("timer5\n");
}
/*================================================================*/
// RTC functions
/*================================================================*/
void RTCInit(TIME_STRUC Time2Set, TIME_STRUC Time2Alarm)
{
rRTCCON = 0x01;
rINTMSK &= ~BIT_TICK;
pISR_TICK = (int)RTCSecTickISR;
rINTMSK &= ~BIT_RTC;
pISR_RTC = (int)RTCAlarmISR;
rTICINT = SETBIT7 | 127;
rBCDYEAR = Time2Set.year;
rBCDMON = Time2Set.month;
rBCDDAY = Time2Set.day;
rBCDDATE = Time2Set.weekday;
rBCDHOUR = Time2Set.hour;
rBCDMIN = Time2Set.min;
rBCDSEC = Time2Set.sec;
rRTCALM = SETBIT6 | 0x01;
rALMYEAR = Time2Alarm.year;
rALMMON = Time2Alarm.month;
rALMDAY = Time2Alarm.day;
rALMHOUR = Time2Alarm.hour;
rALMMIN = Time2Alarm.min;
rALMSEC = Time2Alarm.sec;
rRTCCON = 0x00;
}
TIME_STRUC RTCRead(void)
{
TIME_STRUC TimeStruct;
rRTCCON = 0x01;
while(1)
{
if(rBCDYEAR == 0x99)
{
TimeStruct.year = 0x1999;
}
else
{
TimeStruct.year = 0x2000 + rBCDYEAR;
}
TimeStruct.month = rBCDMON;
TimeStruct.day = rBCDDAY;
TimeStruct.weekday = rBCDDATE;
TimeStruct.hour = rBCDHOUR;
TimeStruct.min = rBCDMIN;
TimeStruct.sec = rBCDSEC;
if(TimeStruct.sec != 0)
{
break;
}
}
rRTCCON = 0x00;
return TimeStruct;
}
void __irq RTCSecTickISR(void)
{
rI_ISPC = BIT_TICK;
puts("RTC\n");
}
void __irq RTCAlarmISR()
{
rI_ISPC = BIT_RTC;
puts("RTC Alarm\n");
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -