📄 testpwm.c
字号:
#include "2440addr.h"
#include "2440lib.h"
#include "def.h"
void xmain(void)
{
U16 freq = 2000 ;
ChangeClockDivider(3,1);//1:3:6
ChangeMPllValue(127,2,1); //405MHZ
Port_Init();
Isr_Init();
Uart_Init(0, 115200);
Uart_Select(0);
//---------------------set PWM---------------------//
//设置功能管脚
rGPBCON = ( rGPBCON | (3<<2) ) & ( ~(1<<2) );//GPB1 -> timer1
//设置预分频器
rTCFG0 |= 0x0f;//prescaler value for Timer1//why?
//rTCFG0 = rTCFG0 &~(0xff)|(15);
//设置分割器
rTCFG1 = ( rTCFG1 | (0x0f<<4) ) & ( ~(0x0d<<4) );//MUX1 be 0010 = 1/8
//周期、占空比
rTCNTB1 = (PCLK>>7)/freq;//
rTCMPB1 = rTCNTB1>>1;//50%
//设置时钟控制寄存器
rTCON = rTCON | (1<<11) //auto reload
| (0<<10) //inverter off
| (1<<9) //update TCNTB1&TCMPB1
| (1<<8); //start for Timer1
rTCON &= ~(1<<9);//stop update
Uart_Printf( "\nBUZZER TEST ( PWM Control )\n" );
Uart_Printf( "Press +/- to increase/reduce the frequency of BUZZER !\n" ) ;
Uart_Printf( "Press 'ESC' key to Exit this program !\n\n" );
while(1)
{
U8 key = Uart_Getch();
switch(key)
{
case '=': //'+'
if(freq<20000)
freq += 100;
//周期、占空比
rTCNTB1 = (PCLK>>7)/freq; //
rTCMPB1 = rTCNTB1>>1; //50%
//设置时钟控制寄存器
rTCON |= (1<<8); //start for Timer1
rTCON &= ~(1<<9); //stop update
Uart_Printf( "\tFreq = %d\n", freq ) ;
break;
case '-':
if(freq>100)
freq -= 100;
//周期、占空比
rTCNTB1 = (PCLK>>7)/freq; //
rTCMPB1 = rTCNTB1>>1; //50%
//设置时钟控制寄存器
rTCON |= (1<<8); //start for Timer1
rTCON &= ~(1<<9); //stop update
Uart_Printf( "\tFreq = %d\n", freq ) ;
break;
case ESC_KEY:
rGPBCON = ( rGPBCON | (3<<2) ) & ( ~(2<<2) );//set GPB1 as output
rGPBDAT &= ~2; //GPB1 = 0
rTCON &= (1<<8); //stop for Timer1
Uart_Printf( "\tstop Been\n" ) ;
break;
default:
break;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -