/****************************************************************************** 版权所有: 文件名称: pwm.c 文件版本: 01.00 创建作者: 创建日期: 2012-08-7 功能说明: pwm模块驱动程序,使用pwm2B 其它说明: 修改记录: */ /*------------------------------- 头文件 -------------------------------------- */ #include "bspconfig.h" #include "pwm.h" /*------------------------------- 宏定义 -------------------------------------- */ #if CFG_BSP_DEBUG #define _DEBUG_PWM #endif #define PWM_PM_REG MCF_PMM_PPMCR1 #define PWM_PM_INDEX 34 /*------------------------------ 全局变量 ------------------------------------- */ /*------------------------------ 外部函数 ------------------------------------- */ /****************************************************************************** 函数名称: init_pwm0 函数版本: 01.00 创建作者: 创建日期: 2012-08-1 函数说明: pwm模块初始化函数 参数说明: 无 返回值: 无 修改记录: */ void init_pwm0(void) { #if 0 PWM_PM_REG |= PWM_PM_INDEX; //打开PWM模块 MCF_PAD_PAR_SDHCH = MCF_PAD_PAR_SDHCH_PAR_DATA0_PWM_B2; //配置PWMB2管脚 MCF_PWM_SM2CR1 |= MCF_PWM_SM2CR1_PRSC(7) //128分频 | MCF_PWM_SM2CR1_LDFQ(0); //Load frequency. MCF_PWM_SM2CR2 |= MCF_PWM_SM2CR2_CLK_SEL(0) //选择外部总线时钟 | MCF_PWM_SM2CR2_FORCE //counter初始化值为init的 | MCF_PWM_SM2CR2_FORCE_SEL(2) //从子模块本地重载信号 | MCF_PWM_SM2CR2_INIT_SEL(0); //Local sync初始化 MCF_PWM_SM2INIT = MCF_PWM_SM2INIT_INIT(0x0000); //最低点 MCF_PWM_SM2VAL1 = MCF_PWM_SM2VAL1_VAL1(0x7A1); //最高点 MCF_PWM_SM2VAL4 = MCF_PWM_SM2VAL4_VAL4(0x28B); //上升沿 MCF_PWM_SM2VAL5 = MCF_PWM_SM2VAL5_VAL5(0x65B); //下降沿 MCF_PWM_MCR |= MCF_PWM_MCR_IPOL(4) //选择45值寄存器 | MCF_PWM_MCR_LDOK(4); //允许载入 MCF_PWM_OUTEN |= MCF_PWM_OUTEN_PWMB_EN(4); //允许输出波形 #endif } /****************************************************************************** 函数名称: pwm0On 函数版本: 01.00 创建作者: 创建日期: 2012-08-1 函数说明: 打开pwm 参数说明: 返回值: 无 修改记录: */ static void pwm0On(void) { // MCF_PAD_PAR_SDHCH = 0x2; //PWMB2用于PWM输出 // MCF_PWM_MCR |= MCF_PWM_MCR_RUN(4); // 使能PWM2 } /****************************************************************************** 函数名称: pwm0Off 函数版本: 01.00 创建作者: 创建日期: 2012-08-1 函数说明: 关闭pwm 参数说明: 返回值: 无 修改记录: */ static void pwm0Off(void) { // MCF_PWM_MCR |= MCF_PWM_MCR_RUN(0); // 屏蔽PWM2 // MCF_PAD_PAR_SDHCH = 0; //PWMB2用于GPIO输出 } /*------------------------------ 测试函数 ------------------------------------- */ #ifdef _DEBUG_PWM #include "ustimer.h" #include "rt.h" void pwm_test(void) { init_pwm0(); while(1) { rt_printf("PWM test start!\n\r"); rt_printf("\n\r"); pwm0On(); ustimer_delay(1*USTIMER_SEC); pwm0Off(); rt_printf("\n\r"); rt_printf("PWM test end!\n\r"); rt_printf("\n\r"); rt_printf("\n\r"); ustimer_delay(2*USTIMER_SEC); } } #endif /*------------------------------ 文件结束 ------------------------------------- */