mini2440硬件篇之PWM定时器

1.硬件原理

2440有5个16位定时器,其中0、1、2、3有PWM功能,有一根输出引脚,可以产生周期性高低电平变化。定时器4没有输出引脚。

2.芯片手册

3.mini2440电路图

4.S3C2440寄存器

定时器时钟源是PCLK,先通过2个预分频器TCFG0TCFG1降低频率,降频后就确定了定时器工作频率。初始设定值TCMPBn(用于比较反转输出电平)、TCNTBn。TCON控制定时器启动。TCMPBn的值装入TCMPn,TCNTBn的值装入TCNTn,每个定时器周期,TCNTn减1,可以通过TCNTOn读取计数值。当和TCMPn相等时,反转电平输出。减到0时,再次反转,如果TCON设置自动加载,则重复如上步骤。

pwm.h

/*******************************************************************

*Copyright(C),2011-2012,XXX.

*FileName:pwm.h

*Author:HuangYinqing

*Version:1.0

*Date::2012-04-22

*Description:脉宽调制蜂鸣器驱动.

*FunctionList:

*History:

******************************************************************/

#ifndef__PWM_H__

#define__PWM_H__

#definePRESCALER024

#defineMUX00x2

#definePWM_CLK(50000000/(PRESCALER0+1)/(2<<(MUX0+1)))

/*函数声明*/

voidPWMInit(unsignedlongulFreq);

voidPWMTest(void);

#endif

pwm.c

/*******************************************************************

*Copyright(C),2011-2012,XXX.

*FileName:pwm.c

*Author:HuangYinqing

*Version:1.0

*Date::2012-04-22

*Description:脉宽调制蜂鸣器驱动.

*FunctionList:

*History:

******************************************************************/

#include"common.h"

#include"core.h"

#include"drv.h"

/********************************************************************

函数功能:PWM初始化。

入口参数:无。

返回:无。

备注:定时器频率=PCLK/(预分频+1)/分频值;

预分频24,分频8,定时器频率250kHz

********************************************************************/

voidPWMInit(unsignedlongulFreq)

{

rGPBCON&=~(0x3<<0);

rGPBCON|=0x2<<0;

rTCFG0&=~(0xff<<0);

rTCFG0|=PRESCALER0<<0;//预分频24

rTCFG1&=~(0xf<<0);

rTCFG1|=MUX0<<0;//分频8

rTCNTB0=PWM_CLK/ulFreq;//周期

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

rTCON&=~0x1f;

rTCON|=(1<<0)|(1<<1)|(1<<3);//自动重载,手动加载,使能定时器

rTCON&=~(1<<1);//清除手动加载

}

/********************************************************************

函数功能:停止蜂鸣器。

入口参数:无。

返回:无。

备注:无。

********************************************************************/

voidBuzzerStop(void)

{

rGPBCON&=~3;

rGPBCON|=1;//==设置输出

rGPBDAT&=~1;

}

/********************************************************************

函数功能:设置蜂鸣器频率。

入口参数:

ulFreq:蜂鸣器频率。

返回:无。

备注:无。

********************************************************************/

voidPWMSetFreq(unsignedlongulFreq)

{

rTCNTB0=PWM_CLK/ulFreq;

rTCMPB0=rTCNTB0>>1;

}

/********************************************************************

函数功能:PWM测试函数。

入口参数:无。

返回:无。

备注:无。

********************************************************************/

voidPWMTest(void)

{

charucKey;

unsignedlongulFreq;

while(1)

{

ucKey=Uart0GetChar();

if(ucKey=='+')

{

if(ulFreq<2000)

{

ulFreq+=10;

PWMSetFreq(ulFreq);

}

}

if(ucKey=='-')

{

if(ulFreq>11)

{

ulFreq-=10;

PWMSetFreq(ulFreq);

}

}

if(ucKey==ESC_KEY)

{

BuzzerStop();

return;

}

}

}

time.h

/*******************************************************************

*Copyright(C),2011-2012,XXX.

*FileName:timer.h

*Author:HuangYinqing

*Version:1.0

*Date::2012-04-22

*Description:定时器4驱动.

*FunctionList:

*History:

******************************************************************/

#ifndef__TIMER_H__

#define__TIMER_H__

#definePRESCALER10xf9

#defineMUX40x2

/*定时器4计数*/

externvolatileunsignedlongg_ulTimer4Count;

/*函数声明*/

voidTimer4Init(void);

#endif

timer.c

/*******************************************************************

*Copyright(C),2011-2012,XXX.

*FileName:timer.c

*Author:HuangYinqing

*Version:1.0

*Date::2012-04-22

*Description:定时器4驱动.

*FunctionList:

*History:

***********

版权声明:aysz01 发表于 2024-07-01 18:42:52。
转载请注明:mini2440硬件篇之PWM定时器 | 电工学习网

暂无评论

暂无评论...