⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pwm.c

📁 at91sam7s64温度控制程序
💻 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);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -