|
本帖最后由 xiaofuhaixia 于 2009-9-19 15:01 编辑
想做PWM蜂鸣器的实验:用按键1控制频率加,按键2控制频率减,按键3停止。
出现问题如下:程序编译没有问题,下到板子里按键不可用,蜂鸣器不响。
请求专家解答:是不是哪里不对????
还是要改头文件如“2440lib.h”等???
源码如下:
#include "def.h"
#include "option.h"
#include "2440addr.h"
#include "2440lib.h"
#include "2440slib.h"
void FreqSet( U32 freq );
void Stops( void );
void PWMTest( void );
void Isr_Init(void);
void HaltUndef(void);
void HaltSwi(void);
void HaltPabort(void);
void HaltDabort(void);
void Main(void) //主函数
{
ChangeClockDivider(3,1); //1:3:6
ChangeMPllValue(127,2,1);
Port_Init(); //端口初始化
Isr_Init(); //中断初始化
PWMTest(); //PWM测试函数
}
void FreqSet( U32 freq )
{
rGPBCON &= ~3; //set GPB0 as tout0, pwm output
rGPBCON |= 2;
rTCFG0 &= ~0xff;
rTCFG0 |= 15; //prescaler = 15
rTCFG1 &= ~0xf;
rTCFG1 |= 2; //mux = 1/8
rTCNTB0 = (PCLK>>7)/freq;
rTCMPB0 = rTCNTB0>>1; // 50%
rTCON &= ~0x1f;
rTCON |= 0xb;
rTCON &= ~2; //clear manual update bit
}
void Stops( void )
{
rGPBCON &= ~3; //set GPB0 as output
rGPBCON |= 1;
rGPBDAT &= ~1;
}
//PWM测试函数
void PWMTest( void )
{
U16 freq = 1000 ;
FreqSet( freq ) ; //频率设置函数
while( 1 )
{
U8 key;
key=rGPFDAT; //读取按键
if(!(key & (1<<1))) //判断是否是按键1
{
if( freq < 20000 ) //假如是则频率加
freq += 30 ;
FreqSet( freq ) ;
}
if(!(key & (1<<4))) //判断是否是按键2
{
if( freq > 150 ) //假如是则频率减
freq -= 30 ;
FreqSet( freq ) ;
}
if(!(key & (1<<2))) //判断是否是按键3
{
Stops() ; //停止
}
}
}
void Isr_Init(void)
{
pISR_UNDEF=(unsigned)HaltUndef;
pISR_SWI =(unsigned)HaltSwi;
pISR_PABORT=(unsigned)HaltPabort;
pISR_DABORT=(unsigned)HaltDabort;
rINTMOD=0x0; // All=IRQ mode
rINTMSK=BIT_ALLMSK; // All interrupt is masked.
}
void HaltUndef(void)
{
Uart_Printf("Undefined instruction exception!!!\n");
while(1);
}
void HaltSwi(void)
{
Uart_Printf("SWI exception!!!\n");
while(1);
}
void HaltPabort(void)
{
Uart_Printf("Pabort exception!!!\n");
while(1);
}
void HaltDabort(void)
{
Uart_Printf("Dabort exception!!!\n");
while(1);
} |
|