天嵌 ARM开发社区

 找回密码
 注册
查看: 2789|回复: 1

裸机PWM蜂鸣器的问题

[复制链接]
xiaofuhaixia 发表于 2009-9-19 14:57:56 | 显示全部楼层 |阅读模式
本帖最后由 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);
}
 楼主| xiaofuhaixia 发表于 2009-9-21 09:31:51 | 显示全部楼层
要是有做好的单独的PWM蜂鸣器实验的工程文件,能上传就一个,好好学习一下?
谢谢。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

i.MX8系列ARM cortex A53 M4 工控板上一条 /1 下一条

Archiver|手机版|小黑屋|天嵌 嵌入式开发社区 ( 粤ICP备11094220号 )

GMT+8, 2024-5-14 13:17 , Processed in 1.062507 second(s), 18 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表