📄 pwm.c
字号:
/********************************************************************************************************
* 文 件 名 : PWM.c
* 程 序 员 : (CaiJie) hnclcj@gmail.com
* (c) Copyright 2007-2007, CaiJie
* All Rights Reserved
* 创建日期 : 2007-10-15
* 说 明 :
* 修改日期 :
* 修改版本 :
* 说 明 :
********************************************************************************************************/
#define PWM_GLOBALS
#include "includes.h"
#if PWM_MODULES_EN > 0
/********************************************************************************************************
* 功 能 : 初始PWM
* 入 口 : 无
* 出 口 : 无
* 说 明 :
* 1) 快速PWM模式,OCR1A为TOP
* 2) 比较匹配清零,在TOP时置位
* 3) 时钟1分频
* 4) 关T1匹配中断,
********************************************************************************************************/
void PWMInit (void)
{
if(ESCBuf.Dm.PWMMode == 0){
OCR1A = 999;
ESCBuf.Dm.PWMTop = 999;
}else{
OCR1A = 499;
ESCBuf.Dm.PWMTop = 499;
}
PWMSetDucy(999,0);
TCCR1A = MASKBIT( TCCR1A,BIT(COM1A1)|BIT(COM1A0)|BIT(COM1B1)|BIT(COM1B0),
BIT(WGM11)|BIT(WGM10)); // OCR1A为TOP 先清多个位再置多个位
TCCR1B = MASKBIT( TCCR1B,BIT(CS12)|BIT(CS11)|BIT(CS10),
BIT(CS10)|BIT(WGM13)|BIT(WGM12));
CLRMASK( TIMSK1, BIT(OCIE1B)|BIT(OCIE1A)); // 关匹配中断,溢出中断,输入捕获中断
PWMStop();
}
/********************************************************************************************************
* 功 能 : 打开PWM输出
* 入 口 : 无
* 出 口 : 无
********************************************************************************************************/
void PWMOpen (void)
{
SETMASK( TCCR1A, (BIT(COM1B0)|BIT(COM1B1)));
}
/**************************************************************************************************
* 功 能 : 停止PWM
* 入口参数 : 无
* 出口参数 : 无
* 说 明 :
********************************************************************************************************/
void PWMStop (void)
{
CLRMASK( TCCR1A, (BIT(COM1B0)|BIT(COM1B1)));
}
/**************************************************************************************************
* 功 能 : 设置PWM占空比
* 入口参数 : 无
* 出口参数 : 无
* 说 明 :
********************************************************************************************************/
void PWMSetDucy (INT16U Top, INT16U DutyCycle)
{
DutyCycle = (INT16U)(((INT32U)DutyCycle*OCR1A)/Top);
OCR1B = DutyCycle;
}
#endif
/********************************************************************************************************
* End of File
********************************************************************************************************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -