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

📄 timerinit.c

📁 arm7s3c44b0x0里ps2口和lcd口驱动编程实例
💻 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 + -