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

📄 pwm.c

📁 LPC214X的固件
💻 C
字号:
#include <LPC214X.H>                        /* LPC214x definitions */

//-------- <<< Use Configuration Wizard in Context Menu >>> -----------------
//
//

/*
// <e> 使用PWM
//   <h> PWM通道
//     <o1.1>  PWM 1  通道
//     <o1.2>  PWM 2  通道
//     <o1.3>  PWM 3  通道
//     <o1.4>  PWM 4  通道
//     <o1.5>  PWM 5  通道
//     <o1.6>  PWM 6  通道
//  </h>
//   <h> 测试PWM
//     <o2.0>  测试PWM
//   </h>
// </e>
*/


#define PWM_SWITCH            1
#define PWM_CHANNELS          0x007E 
#define PWM_TEST              0

#define uint8 unsigned char
#define uint32 unsigned int

#if PWM_SWITCH
#define PWM_MINI_PLUS 120
int iaPWMCode[7] = {PWM_MINI_PLUS*10,PWM_MINI_PLUS*5,PWM_MINI_PLUS*2,PWM_MINI_PLUS*3,PWM_MINI_PLUS*4,PWM_MINI_PLUS*5,PWM_MINI_PLUS*6};
							  
/*
********************************************************************************************************
** 函数名称: Delay
** 功能描述: 软件延时函数
*******************************************************************************************************
*/

#if PWM_TEST
void Delay(uint8 dly)
{
    uint32 i;
    
    for(; dly != 0; dly--)
        for(i = 0; i < 0xFFF; i++);
}
#endif
/*
*******************************************************************************************************
** 函数名:    UpDataPWM 
** 功能描述:  更新PWM匹配值,脉宽.
*******************************************************************************************************
*/

void UpDataPWM(void){
    PWMMR1   = iaPWMCode[1];		// 设置PWM1输出1/2占空比
    PWMMR2   = iaPWMCode[2];		// 设置PWM2输出1/3占空比
    PWMMR3   = iaPWMCode[3];		// 设置PWM3输出1/4占空比
    PWMMR4   = iaPWMCode[4];		// 设置PWM4输出1/5占空比
    PWMMR5   = iaPWMCode[5];		// 设置PWM5输出1/6占空比
    PWMMR6   = iaPWMCode[6];		// 设置PWM6输出1/7空比
    PWMLER   = 0x7F;		    // 更新匹配值后,必须锁存
}     


/*
*******************************************************************************************************
** 函数名:    SetPWMTC 
** 功能描述:  设置PWM周期.
*******************************************************************************************************
*/

void SetPWMTCPWM(void){
    PWMMR0   = iaPWMCode[0];    // 设置PWM输出周期
    PWMLER   = 0x7F;		    // 更新匹配值后,必须锁存
}     


/*
*********************************************************************************************************
** 函数名称 :InitPWM
** 函数功能 :初始化PWM
*********************************************************************************************************
*/
void InitPWM (void){
    
    //  在这里选择PWM通道的输出
    #if (PWM_CHANNELS & (1 << 1))
    PINSEL0  &= ~(0x03 << 0);		// P0.0选择PWM1功能,功能选择码:10,功能选择位:BIT1:0,所在功能选择寄存器PINSEL0
    PINSEL0  |= 0x02 << 0;		    // P0.0选择PWM1功能,功能选择码:10
    #endif
    #if (PWM_CHANNELS & (1 << 2))
    PINSEL0  &= ~(0x03 << 14);		// P0.7选择PWM2功能,功能选择码:10,功能选择位:BIT15:14,所在功能选择寄存器PINSEL0
    PINSEL0  |= 0x02 << 14;		    // P0.7选择PWM2功能,功能选择码:10
    #endif
    #if (PWM_CHANNELS & (1 << 3))
    PINSEL0  &= ~(0x03 << 2);		// P0.1选择PWM3功能,功能选择码:10,功能选择位:BIT3:2,所在功能选择寄存器PINSEL0
    PINSEL0  |= 0x02 << 2;		    // P0.1选择PWM3功能,功能选择码:10
    #endif
    #if (PWM_CHANNELS & (1 << 4))
    PINSEL0  &= ~(0x03 << 16);		// P0.8选择PWM4功能,功能选择码:10,功能选择位:BIT17:16,所在功能选择寄存器PINSEL0
    PINSEL0  |= 0x02 << 16;		    // P0.8选择PWM4功能,功能选择码:10
    #endif
    #if (PWM_CHANNELS & (1 << 5))
    PINSEL1  &= ~(0x03 << 10);		// P0.21选择PWM5功能,功能选择码:01,功能选择位:BIT11:10,所在功能选择寄存器PINSEL1
    PINSEL1  |= 0x01 << 10;		    // P0.21选择PWM5功能,功能选择码:01
    #endif
    #if (PWM_CHANNELS & (1 << 6))
    PINSEL0  &= ~(0x03 << 18);		// P0.9选择PWM6功能,功能选择码:10,功能选择位:BIT19:18,所在功能选择寄存器PINSEL0
    PINSEL0  |= 0x02 << 18;		    // P0.9选择PWM6功能,功能选择码:10
    #endif
        
    /* PWM初始化 */
    PWMPR    = 0x00;		    // 分频器寄存器.  不分频,计数频率为Fpclk. 
    PWMMCR   = 0x02;;			// PWM匹配寄存器. 设置PWMMR匹配时复位PWMTC.3n+0数位设置中断,3n+1数位设置复位,3n+2数位停止.
    PWMPCR   = 0x7E00;			// PWM控制寄存器. 允许PWM输出,单边PWM. BIT9~BIT14使能PWM输出.BIT2~6设置PWM工作模式.
    
    SetPWMTCPWM();
    UpDataPWM();    
    
    PWMLER   = 0x7E;			// PWM锁存使能寄存器.   PWM0和PWM2匹配锁存 (BIT0~BIT6:使能PWM匹配0锁存器~使能PWM匹配6锁存器)
    PWMTCR   = 0x02;            // PWM定时器控制寄存器. 复位PWMTC ( BIT0: 计数器使能 BIT1:计数器复位 BIT3:PWM使能 )
    PWMTCR   = 0x09;            // PWM定时器控制寄存器. 启动PWM输出

}
#if PWM_TEST
int main(void){
	int i; 
    InitPWM();
	while(1){
	    for(i = 0; i<iaPWMCode[0]; i++){
	        iaPWMCode[1] = i;
	        iaPWMCode[2] = i;
	        iaPWMCode[3] = i;
	        iaPWMCode[4] = i;
	        iaPWMCode[5] = i;
	        iaPWMCode[6] = i;
	        UpDataPWM();
	        Delay(1);
	    }
	}
	return 0;
}
#endif
#endif

⌨️ 快捷键说明

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