您的位置:首页 > 其它

mini2440 PWM驱动蜂鸣器

2011-09-26 13:41 405 查看
PWM(Pulse Width Modulation)——脉宽调制,它是利用微控制器的数字输出来对模拟电路进行控制的一种非常有效的技术,广泛应用于测量、通信、功率控制与变换等许多领域。

本实验通过定时器TIMER0的pwm功能驱动GPB0管口的蜂鸣器。需要设置GPB0的GPBCON为TOU0功能,设置定时器为5秒定时,当rTCMPB0 = rTCNTB0时进行反转电平,实现高低电平转换,驱动蜂鸣器发生。具体实验代码如下:

#define GLOBAL_CLK 1

#include <stdlib.h>

#include <string.h>

#include "def.h"

#include "option.h"

#include "2440addr.h"

#include "2440lib.h"

#include "2440slib.h"

#include "mmu.h"

#include "profile.h"

#include "memtest.h"

void clock_init()

{

rLOCKTIME = 0x00ffffff;

rCLKDIVN = 0x03;

//以下在mmu_init()函数中已经对其初设置这里无需设置

rMPLLCON = 0x5c0040;

}

void beep_init(void)//蜂鸣器初始化

{

rGPBCON =0x2;// 设置GPB0为TOU0模式

rGPBUP |=(1<<0);//禁止GPB0上拉功能

}

void inter_init()//中断初始化函数

{

rINTMSK &=~(1<<10); //屏蔽Timer0以外的中断源

rINTMOD &=~(1<<10);//把Timer0中断设为IRQ模式

}

void Timer0_init()//定时器初始化

{

rTCFG0=119;//设置TCG0

rTCFG1 &=(0x2<<0);//8分频

rTCNTB0=25000;//设置TCNTB0数据

rTCMPB0 = rTCNTB0>>1; // 50% 即占空比

rTCON |=(1<<1);//将TCNTBn和TCMPBn的值分别写入TCNTn和TCNPn

rTCON=0x9;//将Timer0设为自动装载并开启Timer0

}

static void __irq Timer0_ISR(void) //TIMER0发生时的中断处理函数

{

rSRCPND |=(1<<10);//清除Timer0中断器标记位

rINTPND |=(1<<10);//清除总中断器标记位

}

void Main(void)

{

MMU_Init();//初始化内存,实现内存地址重定向

clock_init();

beep_init();//初始化蜂鸣器

inter_init();//中断初始化

Timer0_init();//配置定时器

pISR_TIMER0 = (U32)Timer0_ISR;//将中断服务函数的地址传给对应的中断向量表位置

while(1); //死循环等待中断的发生

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: