| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 574 人关注过本帖
标题:蜂鸣器遇到问题了
只看楼主 加入收藏
kindboy18
Rank: 2
等 级:论坛游民
威 望:1
帖 子:28
专家分:84
注 册:2014-1-24
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:3 
蜂鸣器遇到问题了
先简要介绍一下我想实现的功能,我用了两个定时器来分别控制ARM板上的蜂鸣器和LED,想要实现每秒钟LED和蜂鸣器交替变化,目前LED能实现亮灭变化,可是蜂鸣器却一直没有响,感觉中断3函数就没有进去,不知道问题出在哪里,请大神帮忙。

#include "2440addr.h"

void Timer2Init(void)
{
    rTCFG0  = 124 << 8;       // t0 预分频
    rTCFG1  = 0x03 << 8;          // 1/16 intrupt mod

    // PCLK / 125 / 16 / = 101.25 MHz / 125 / 16 / 50 = 1KHz   ;1ms
    rTCNTB2 = 50625;       // 1s

    rTCON   = (1<<15)|(1<<14)|(1<<13)|(0<<12);      //  自动装载  反相输出 手动加载  不启动
    rTCON   = (1<<15)|(1<<14)|(0<<13)|(1<<12);      //  自动装载  反相输出 清手动加载  启动
   

      //开中断,直接用PWM驱动beep,此时中断服务程序里面可以改变rTCMPB0,从而改变占空比
      EnableIrq(BIT_TIMER2);

    return ;
}

void Timer3Init(void)
{
    rTCFG0  = 124 << 12;       // t0 预分频
    rTCFG1  = 0x03 << 12;          // 1/16 intrupt mod
    // PCLK / 125 / 16 / = 101.25 MHz / 125 / 16 / 50 = 1KHz   ;1ms
    rTCNTB3 = 50625;       // 1s

    rTCON   = (1<<19)|(1<<18)|(1<<17)|(0<<16);      //  自动装载  反相输出 手动加载  不启动
    rTCON   = (1<<19)|(1<<18)|(0<<17)|(1<<16);      //  自动装载  反相输出 清手动加载  启动   

     //开中断,直接用PWM驱动beep,此时中断服务程序里面可以改变rTCMPB0,从而改变占空比
      EnableIrq(BIT_TIMER3);

    return ;
}        

void Led_Buzzer_Init()
{
       rGPBCON = (1<<16) | (1<<14) | (1<<12) | (1<<10) | (1<<0);    //GPB5-8  output
    rGPBDAT = (0<<8) | (0<<7) | (0<<6) | (0<<5) | (0<<0);    //on        
   
    return ;         
}

/*void LedInit(void)
{
    rGPBCON = (1<<16) | (1<<14) | (1<<12) | (1<<10);    //GPB5-8  output
    rGPBDAT = (0<<8) | (0<<7) | (0<<6) | (0<<5);    //on   
}*/

// BUZ-TOUT0/GPB0
/*void BuzzerInit(void)
{
    //rGPBCON = (2 << 0);     // TOUT0   
    rGPBCON |= (1 << 0);
    rGPBDAT |= (1 << 0);
   
    return ;         
}*/

void Handle_Timer2()       // led irq
{
    rGPBDAT = 0x1E0 ^ rGPBDAT;
    //rGPBDAT = rGPBDAT ^ 0x001;
    ClearPending(BIT_TIMER2);

    return ;
}

void Handle_Timer3()       // buzzer irq
{
    rGPBDAT = rGPBDAT ^ 0x001;
    //rGPBDAT = 0x1E0 ^ rGPBDAT;
    ClearPending(BIT_TIMER3);

    return ;
}

int main()
{
    //LedInit();
    //BuzzerInit();
    Led_Buzzer_Init();
    Timer3Init();    //buzzer irq
    Timer2Init();      //led irq
   

    while(1)
    {
        ;
    }

    return 0;
}
搜索更多相关主题的帖子: include 蜂鸣器 定时器 
2014-03-21 00:37
klapset
Rank: 4
等 级:业余侠客
威 望:2
帖 子:71
专家分:234
注 册:2014-2-27
收藏
得分:20 
蜂鸣器的频率给多少?
2014-03-22 22:14
kindboy18
Rank: 2
等 级:论坛游民
威 望:1
帖 子:28
专家分:84
注 册:2014-1-24
收藏
得分:0 
1秒钟啊,每秒钟LED灯和蜂鸣器都会交替变化
2014-03-23 02:24
klapset
Rank: 4
等 级:业余侠客
威 望:2
帖 子:71
专家分:234
注 册:2014-2-27
收藏
得分:0 
回复 3楼 kindboy18
第一
有没有示波器,打下。
第二
看下寄存器配置对不对,光看这样代码,很难帮你
第三
以后发这种问题 顺便把MCU USER MANUAL对应的寄存器打出来以及DATASHEET
2014-03-24 17:02
快速回复:蜂鸣器遇到问题了
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.016669 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved