www.pudn.com > USBdiskRW.rar > Timer.c


/**************************************************************************** 
【文  件  名  称】Timer.c 
【功  能  描  述】三星S3C44B0X板定时器程序代码 
【程  序  版  本】2.0 
【创建人及创建日期】龚俊//2003-07-02 15:27 
【修改人及修改日期】龚俊//2004-8-7 15:39 
****************************************************************************/ 
 
//*************************************************************************** 
#include "44b.h" 
#include "def.h" 
#include "option.h" 
#include "utils.h" 
 
extern struct{ 
	U32 mclk; 
	U32 pclk; 
	U32 sclk; 
	U32 freq; 
} ClkPara; 
 
/**************************************************************************** 
【功能说明】 
****************************************************************************/ 
#define	MaxBeepFreq	20000 
#define	MinBeepFreq	20 
 
void SetBeepPwm( U16 Freq, U8 HiRatio ) 
{ 
	if( Freq > MaxBeepFreq ) 
		Freq = MaxBeepFreq; 
	if( HiRatio > 100 ) 
		HiRatio = 100 ;	 
		 
	rTCON = rTCON & (~(0xf<<16)) ;			// clear manual update bit, stop Timer3 
 
	rTCFG0 	&= 0xffff00ff;					// set Timer 2&3 prescaler 0 
 
	rTCFG1 	&= 0xffff0fff;					// set Timer 2 MUX 1/16 
	rTCFG1  |= 0x00003000;					// set Timer 2 MUX 1/16 
 
	rTCNTB3	 = ( ClkPara.freq )/(Freq*16);				//if set inverter off, when TCNT2<=TCMP2, TOUT is high, TCNT2>TCMP2, TOUT is low 
	rTCMPB3  = (rTCNTB3*(100-HiRatio))/100;	//if set inverter on,  when TCNT2<=TCMP2, TOUT is low,  TCNT2>TCMP2, TOUT is high 
 
	rTCON = rTCON & (~(0xf<<16)) | (0x0a<<16) ; 
	//自动重装,输出取反关闭,更新TCNTBn、TCMPBn,死区控制器关闭 
	rTCON = rTCON & (~(0xf<<16)) | (0x09<<16) ;		//开启蜂鸣器的叫声 
} 
//*************************************************************************** 
 
 
/**************************************************************************** 
【功能说明】定时器PWM测试 
****************************************************************************/ 
void Timer_Test( void ) 
{ 
	U16 BeepFreq = 500;	 
 
   	printf( "S3C44B0X Timer Test( Beep ) !\n\n" ) ; 
 
   	rPCONE = ( rPCONE & (~(3<<12)) ) | ( (0x2)<<12 ) ; 
   		//GPE6引脚功能设置为TOUT3(PWM输出) 
   	rPUPE = rPUPE & (~(1<<6)) ; 
   		//使能GPE6引脚的上拉电阻 
 
   	printf( "Press '+' to increase the frequency of beep !\n" ) ; 
   	printf( "Press '-' to reduce the frequency of beep !\n" ) ; 
	printf( "Press 'ESC' to Exit this test program !\n\n" ); 
	 
	SetBeepPwm( BeepFreq, 50 ) ; 
 
    while( 1 ) 
    { 
		U8 key;		 
		 
		key = SerialRxChar(); 
		SerialTxChar( key ); 
 
		if( key == '+' ) 
			if( BeepFreq < 20000 ) 
				BeepFreq += 100 ; 
		if( key == '-' ) 
			if( BeepFreq > 100 ) 
				BeepFreq -= 100 ;	 
		 
		if( key == ESC_KEY ) break ; 
		 
		SetBeepPwm( BeepFreq, 50 ) ; 
		printf( "\tNow beep frequence is %d\n", BeepFreq ) ; 
	} 
	 
	printf( "\n" ) ; 
	rTCON = rTCON & (~(0xf<<16)) ;			// clear manual update bit, stop Timer3 
} 
//***************************************************************************