www.pudn.com > temp_control.rar > pwm.c


/*============================文件信息===========================*/ 
/*文   件   名:pwm.c                                            */ 
/*创   建   人:葛康                                             */ 
/*最后修改日期:2006年2月24日                                    */ 
/*文 件 描  述: 无                                              */ 
/*===============================================================*/ 
 
#include "AT91SAM7S64.h" 
#include "lib_AT91SAM7S64.h" 
 
 
/*****************************************************************/ 
/*函数名称:pwm_init                                             */ 
/*功能描述:初始化PWM的相关寄存器(只用到0通道和1通道)            */ 
/*输入参数:无                                                   */ 
/*输出参数:无                                                   */ 
/*****************************************************************/ 
void pwm_init(void) 
{ 
   AT91F_PWMC_CfgPMC ();                                      //使能PWMC时钟 
   AT91F_PIO_CfgPeriph(AT91C_BASE_PIOA, 
                       AT91C_PWMC_CHID0|AT91C_PWMC_CHID1, 
                       0);                                    //使能PWM通道0、通道1,并分配给外设A 
   *AT91C_PWMC_MR=0x00300030;                                 //通道0的时钟为MCK/DIVA,通道1的时钟为MCK/DIVB,既是48MHz/48=1MHz 
   AT91F_PWMC_StopChannel(AT91C_BASE_PWMC, 
                          AT91C_PWMC_CHID0|AT91C_PWMC_CHID1); //通道0、通道1禁止 
   AT91F_PWMC_CfgChannel(AT91C_BASE_PWMC,0,0x0B,3160,2000);    //通道0模式设置:左对齐,低电平启动 
   AT91F_PWMC_CfgChannel(AT91C_BASE_PWMC,1,0x0C,3160,2000);    //通道1模式设置:左对齐,低电平启动 
   AT91F_PWMC_StartChannel(AT91C_BASE_PWMC, 
                           AT91C_PWMC_CHID0|AT91C_PWMC_CHID1);//通道0、通道1使能      
} 
 
 
/*****************************************************************/ 
/*函数名称:pwm_period_update                                    */ 
/*功能描述:更新PWM波的周期                                      */ 
/*输入参数:更新周期period,通道i                                */ 
/*输出参数:无                                                   */ 
/*****************************************************************/ 
void pwm_period_update(unsigned int period,unsigned int i) 
{ 
   *AT91C_PWMC_CH0_CMR=0x0000040B;       //左对齐,低电平启动 
   *AT91C_PWMC_CH1_CMR=0x0000040C;       //左对齐,低电平启动  
   AT91F_PWMC_UpdateChannel(AT91C_BASE_PWMC,i,period); 
} 
 
 
/*****************************************************************/ 
/*函数名称:pwm_duty_update                                      */ 
/*功能描述:更新PWM波的占空比                                    */ 
/*输入参数:更新占空比duty,通道i                                */ 
/*输出参数:无                                                   */ 
/*****************************************************************/ 
void pwm_duty_update(unsigned int duty,unsigned int i) 
{  
   *AT91C_PWMC_CH0_CMR=0x0000000B;       //左对齐,低电平启动 
   *AT91C_PWMC_CH1_CMR=0x0000000C;       //左对齐,低电平启动 
   AT91F_PWMC_UpdateChannel(AT91C_BASE_PWMC,i,duty); 
}