📄 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
}
//***************************************************************************
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -