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

📄 timer.c

📁 本程序是FS44B0XII V3.00开发板C57和G57液晶屏套件程序
💻 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
}
//***************************************************************************

⌨️ 快捷键说明

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