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); //死循环等待中断的发生
}
本实验通过定时器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); //死循环等待中断的发生
}
相关文章推荐
- .Linux-2.6.32.2内核在mini2440上的移植(十七)---移植PWM控制蜂鸣器驱动
- 【引用】Linux-2.6.32.2内核在mini2440上的移植(十七)---移植PWM控制蜂鸣器驱动
- Linux-2.6.32.2内核在mini2440上的移植(十七)---移植PWM控制蜂鸣器驱动
- Linux-2.6.32.2内核在mini2440上的移植(十七)---移植PWM控制蜂鸣器驱动
- linux-2.6.32在mini2440开发板上移植(18)之移植PWM蜂鸣器驱动
- mini2440 pwm蜂鸣器设备驱动开发源代码(宋宝华框架)
- Linux-2.6.32.2内核在mini2440上的移植(十七)---移植PWM控制蜂鸣器驱动 .
- OK6410之蜂鸣器驱动硬件分析---PWM定时器
- 利用S3C2440中的Timer0的PWM输出驱动蜂鸣器
- ARM11 硬件 PWM驱动蜂鸣器设备代码
- 基于ARM-contexA9-蜂鸣器pwm驱动开发
- ok6410 PWM 驱动蜂鸣器
- [S5PV210 Linux字符驱动之PWM蜂鸣器驱动
- OK6410之蜂鸣器驱动软件分析---PWM定时器
- 注释不错——mini2440驱动学习第五课———PWM
- 嵌入式Linux之我行——PWM在ARM Linux中的原理和蜂鸣器驱动实例开发
- idea6410的蜂鸣器驱动(非PWM)
- mini2440之PWM混杂驱动分析
- 基于ARM-contexA9-蜂鸣器pwm驱动开发
- 基于S3C2440的Linux-3.6.6移植 PWM蜂鸣器驱动