📄 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);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -