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

📄 timer.c

📁 中芯微VC0528测试程序
💻 C
字号:
/*************************************************************************/
/*									 */
/* The last modification date:  02-23-2004                               */
/* REMARKS:  Created initial version 1.0                                 */
/*                                                                       */
/*                Copyright (C) 2004 Vimicro CO.,LTD     		 */
/*************************************************************************/
#include "..\inc\44b.h"
#include "..\inc\IntControl.h"
#include "..\inc\timer.h"


extern UINT32 g_mclk;

#define MaxTime 0x0000ffff
static void __irq Exint1(void);		//For deal command.
void DrvInitInt(void)
{

 	rPCONG |= 0xc;		//EINT1
   	rPUPG=0x0;			//pull up enable
	rEXTINT &= ~(0xf0);
	rEXTINT |= 0x10; 		//"1" level mode

	pISR_EINT1 = (unsigned)Exint1;

	Enable_Intr(nINT_EXT1);

}
void Exint1()
{
	rI_ISPC=BIT_EINT1;


}

void __irq Timer0_isr(void);		//For deal command.
static	void (*CommandDeal)() = (void (*)())0;
void 	InitTimer0ForCommandParase(void (*func)(),int interval)
{
	UINT32 Freq, Tcount;

	CommandDeal= func;
	pISR_TIMER0 = (unsigned)Timer0_isr;
	rTCFG0 = 0xa;

	rTCFG1 = TIMER0_CLK_DIVISOR_8;
	Freq = 	g_mclk/8/(0xa+1);	// Timer0_clock (in Hz)
        							// Timer0_clock=MCLK_FREQ/(prescale+1)/Divisor

	Tcount = (interval*Freq)/1000;  //100ms timer
	rTCNTB0 = (UINT16)Tcount;

	rTCON |= TIMER0_LOAD;
	rTCON &= (~TIMER0_LOAD);	
	rTCON |= TIMER0_RUN | TIMER0_INTERVAL;	

	Enable_Intr(nINT_TIMER0);

}

void Timer0_isr(void)
{
    rI_ISPC=BIT_TIMER0;
	CommandDeal();
}
void Timer0_stop(void)
{
    rI_ISPC=BIT_TIMER0;
	Disable_Intr(nINT_TIMER0);
}

void __irq Timer1_isr(void);		//For deal command.
static	void (*CommandDeal1)() = (void (*)())0;


void 	InitTimer1(void (*func)())
{
	UINT32 Freq, Tcount;
	
	CommandDeal1= func;
	pISR_TIMER1 = (unsigned)Timer1_isr;

	rTCFG0 |= 0xa;
	rTCFG1 |= TIMER1_CLK_DIVISOR_32;

	Freq = 	g_mclk/32/(0x0a+1)	;	// Timer1_clock (in Hz)
        								// Timer1_clock=MCLK_FREQ/(prescale+1)/Divisor

	Tcount = (50*Freq)/1000;    //50ms timer
	
	rTCNTB1 = (UINT16)Tcount;

	rTCON |= TIMER1_LOAD;
	rTCON &= ~TIMER1_LOAD;	
	rTCON |= TIMER1_RUN | TIMER1_INTERVAL;
	Enable_Intr(nINT_TIMER1);
}

void InitCaculaterTime(void)
{
	rTCFG0 |= 0xff00;			//max 44s
	rTCFG1 |= TIMER2_CLK_DIVISOR_32;
}
UINT32 ReturnTime(void)
{
UINT32 Freq, Tcount;
	
	Tcount=rTCNTO2;
	Timer2_Stop();
	Tcount=MaxTime-Tcount;
	Freq = g_mclk/32/(0xff+1);
	Tcount=Tcount*1000/Freq;	//ms

	return Tcount;
}
void StartCaculateTime(void)
{
UINT32 Freq;
	Freq = 	g_mclk/8/(0xa+1)	;	// Timer2_clock (in Hz)
        							// Prescaler=256=2^8, Divisor=4=2^2
        							// Timer2_clock=MCLK_FREQ/(prescale+1)/Divisor
	rTCNTB2 = MaxTime;
	rTCON |= TIMER2_LOAD;
	rTCON &= ~TIMER2_LOAD;	
	rTCON |= TIMER2_RUN;
}
void Timer1_isr(void)
{
    rI_ISPC=BIT_TIMER1;
	CommandDeal1();
}
UINT32 G_MS;
UINT32 ReturnCount(void)
{
UINT32 Freq, Tcount;
	
	Tcount=rTCNTO2;
	Tcount=MaxTime-Tcount;
	Freq = g_mclk/32/(0xff+1);
	Tcount=Tcount*1000/Freq;	//ms

	if(!rTCNTO2)
	{
		Timer2_Stop();
		rTCNTB2 = MaxTime;
		rTCON |= TIMER2_LOAD;
		rTCON &= ~TIMER2_LOAD;
		rTCON |= TIMER2_RUN;
		G_MS+=Tcount;
	}
	;
	return (G_MS+Tcount);
}
void StartCaculate(void)
{
UINT32 Freq;
	Timer2_Stop();
	Freq = 	g_mclk/32/(0xff+1)	;	// Timer2_clock (in Hz)
        							// Prescaler=256=2^8, Divisor=4=2^2
        							// Timer2_clock=MCLK_FREQ/(prescale+1)/Divisor
	rTCNTB2 = MaxTime;
	rTCON |= TIMER2_LOAD;
	rTCON &= ~TIMER2_LOAD;
	rTCON |= TIMER2_RUN;
	G_MS=0;
}
void StopCaulate(void)
{
	Timer2_Stop();
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -