📄 pwm.c
字号:
/********************************************************************
*File :PWM.c
*Autor:GongJun
*Date :
*Modifier:GongJun
*Date:2005-8-5
*Description:PWM6 ouput PWM signal
*********************************************************************/
#include <iolpc2148.h>
//#include "demo.h"
#define XTALFREQ 12000000 //XTAL frequency in Hz
//#define CYCLE_DATA 2000
//#define DUTY_CYCLE_DATA 1000
/*********************************************************************
*Function :void Delay(U32 ms)
*Object :delay n ms
*Description:No
*Parameter :U32 ms :millisecond
*Return :No
**********************************************************************/
void Delay( unsigned int ms )
{
unsigned int CLK = ( XTALFREQ / 1000 ) * ms / 2 ;
while ( CLK-- ) ;
}
/********************************************************************
*Function :void PWM5_Beep( U32 CYCLE_DATA, U32 DUTY_CYCLE_DATA )
*Object :make PWM5 ouput certain PWM wave
*Description:No
*Parameter :
*Return :No
*********************************************************************/
void PWM2_Beep( unsigned int CYCLE_DATA , unsigned int DUTY_CYCLE_DATA )
{
PWMPR = 0x00; //count frequency:Fpclk
PWMMCR = 0x02;
PWMMR0 = CYCLE_DATA; // set PWM cycle
PWMMR5 = DUTY_CYCLE_DATA;
PWMLER = 0x21; // PWMMR0、PWMMR6 latch
PWMPCR = 0x2000; //PWM5 enable
PWMTCR = 0x09; //start timer,PWM enable
}
/********************************************************************
*Function :void PWM5_Beep( U32 CYCLE_DATA, U32 DUTY_CYCLE_DATA )
*Object :make PWM5 ouput certain PWM wave
*Description:No
*Parameter :CYCLE_DATA: range from :1---100000,10us
DUTY_CYCLE_DATA: range from:1--100000,0.001%-100%
*Return :No
*********************************************************************/
void PWM2_Set( unsigned int CYCLE_DATA , unsigned int DUTY_CYCLE_DATA )
{
PWMTCR =0x02;
PWMPR = 0x00; // count frequency:Fpclk
//PWMMCR = 0x02;
PWMMCR = 0x42;
PWMMR0 = CYCLE_DATA; // set PWM cycle
PWMMR2 = DUTY_CYCLE_DATA;
PWMLER = 0x05; // PWMMR0、PWMMR6 latch
PWMPCR = 0x400; // PWM2 enable
PWMTCR = 0x09; // start timer,PWM enable
}
/*********************************************************************
*Function :PWM5_Stop( void )
*Object :stop PWM5
*Description :No
*Parameter :No
*Return :No
**********************************************************************/
void PWM2_Stop( void )
{
PWMMCR = PWMMCR | ( 1 << 8 ) ;
}
/*********************************************************************
*Function :Beep( U32 time)
*Object :PWM5 control BUZZER
*Description:No
*Parameter :U32 time: beep time
*Return :No
**********************************************************************/
void Beep( unsigned int time )
{
PWM2_Set( 3000 , 1500 ) ;
Delay( time ) ;
PWM2_Stop() ;
}
/*********************************************************************
*Function :PWM5_Beep_Test( void )
*Object :use PWM5 to make BUZZER beep
*Description:No
*Parameter :No
*Return :No
**********************************************************************/
void PWM5_Beep_Test(void)
{
unsigned short CYCLE = 3000;
unsigned short i=5;
//printf( "PWM5 Test( Beep ) !\n\n" ) ;
//printf( "Press +/- to increase/reduce the frequency of beep !\n" ) ;
//printf( "Press 'ESC' to Exit this test program !\n\n" );
PWM2_Set( CYCLE , ( CYCLE / 2 ) ) ;
while (i--)
{
//U8 key;
if(CYCLE<2000)CYCLE=CYCLE+10;
PWM2_Set( CYCLE , ( CYCLE / 2 ) ) ;
Delay(100);
//printf( "\tNow beep CYCLE is %duS\n" , ( CYCLE * 10 ) ) ;
}
PWM2_Stop() ;
//return 1 ;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -