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

📄 main.c

📁 LUMINARY ARM的PWM代码(带死区控制)
💻 C
字号:
/****************************************Copyright (c)**************************************************
**                               Guangzhou ZHIYUAN electronics Co.,LTD.
**                                     
**                                 http://www.embedtools.com
**
**--------------File Info-------------------------------------------------------------------------------
** File Name:          Main.c
** Last modified Date: 2007-03-24
** Last Version:       1.0
** Description:        Use PWM0 & PWM1 to drive leds  使用PWM0和PWM1驱动LED
** 
**------------------------------------------------------------------------------------------------------
** Created By:         Steven Zhou 周绍刚
** Created date:       2007-03-24
** Version:            1.0
** Descriptions:       The original version 初始版本
**
**------------------------------------------------------------------------------------------------------
** Modified by:        Kang qinhua
** Modified date:      2008.01.19
** Version:            v1.1
** Description:
**
********************************************************************************************************/


#define HWREG(x)   (  *((volatile unsigned long *)(x)) )

#define SYSCTL_RCC              0x400fe060	                            // 运行模式时钟门控寄存器
#define SYSCTL_RCGC0            0x400fe100	                            // 运行模式时钟门控寄存器0
#define SYSCTL_RCGC2	    	0x400fe108	                            // 运行模式时钟门控寄存器2
#define SYSCTL_RCC_USE_PWMDIV   0x00100000                              // PWM分频系数
#define SYSCTL_PERIPH_GPIOD     0x20000008                              // GPIO D在系统控制器中的地址
#define SYSCTL_PERIPH_PWM       0x00100000                              // PWM在系统控制器中的地址

#define GPIO_PORTD_BASE         0x40007000                              // GPIO D的基地址
#define GPIO_O_DIR              0x00000400                              // 方向寄存器
#define GPIO_O_AFSEL            0x00000420                              // 模式选择寄存器

#define PWM_BASE                0x40028000                              // PWM的基地址
#define PWM_GEN_0_OFFSET        0x00000040                              // PWM发生器0的偏移地址
#define PWM_O_X_CTL             0x00000000                              // PWM发生器0控制寄存器
#define PWM_O_X_GENA            0x00000020                              // PWM发生器0发生寄存器A
#define PWM_O_X_GENB            0x00000024                              // PWM发生器0发生寄存器B
#define PWM_O_X_CMPA            0x00000018                              // PWM发生器0比较寄存器A
#define PWM_O_X_CMPB            0x0000001C                              // PWM发生器0比较寄存器B
#define PWM_O_ENABLE            0x00000008                              // PWM发生器0使能寄存器
#define PWM_O_X_LOAD            0x00000010                              // PWM发生器0装载寄存器

#define PWM_GEN_MODE_UP_DOWN    0x00000002                              // 上下计数模式
#define PWM_GEN_ACT_ZERO        0x2                                     // 设置输出为0
#define PWM_GEN_ACT_ONE         0x3                                     // 设置输出为1
#define PWM_GEN_ACT_ZERO_SHIFT  0                                       // 设置输出为0时的移位数
#define PWM_GEN_ACT_A_UP_SHIFT  4                                       // 设置A向上时的移位数
#define PWM_GEN_ACT_A_DN_SHIFT  6                                       // 设置A向下时的移位数
#define PWM_GEN_ACT_B_UP_SHIFT  8                                       // 设置B向上时的移位数
#define PWM_GEN_ACT_B_DN_SHIFT  10                                      // 设置B向下时的移位数



/*********************************************************************************************************
** Function name:			main
**
** Descriptions:			Main function of the project 工程的主函数
**
** Input parameters:		None 无
** Returned value:		    None 无
**         
** Used global variables:	None 无
** Calling modules:		    SysCtlClockSet,SysCtlPWMClockSet,SysCtlPeripheralEnable,GPIOPinTypePWM,
**                          GPIOPadConfigSet,PWMGenConfigure,PWMGenPeriodSet,PWMPulseWidthSet,
**                          PWMOutputState,PWMGenEnable 
**
** Created by:				Steven Zhou 周绍刚
** Created Date:			2007-01-18
**-------------------------------------------------------------------------------------------------------
** Modified by:             Kang qinhua
** Modified date:           2008.01.19
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
int main(void)
{
 	HWREG(SYSCTL_RCC) &= (~SYSCTL_RCC_USE_PWMDIV);   				    // PWM时钟源1分频
																
    HWREG(SYSCTL_RCGC2) |= SYSCTL_PERIPH_GPIOD;       				    // 使能PD口外设 

 	HWREG(SYSCTL_RCGC0) |= SYSCTL_PERIPH_PWM;      					    // 使能PWM外设
	
	HWREG(GPIO_PORTD_BASE + GPIO_O_DIR)   |= 0x00000003;     		    // 设置PD0,PD1为输出
	HWREG(GPIO_PORTD_BASE + GPIO_O_AFSEL) |= 0x00000003;  			    // 选择硬件功能,即PWM
    
													  				    // 设置PWM发生器0为上下计数方式,两路PWM不同步 
	HWREG(PWM_BASE + PWM_GEN_0_OFFSET + PWM_O_X_CTL ) &= (~0x0000003F);
    HWREG(PWM_BASE + PWM_GEN_0_OFFSET + PWM_O_X_CTL ) |= PWM_GEN_MODE_UP_DOWN;
    HWREG(PWM_BASE + PWM_GEN_0_OFFSET + PWM_O_X_GENA) &=(~0x00000FFF);
    HWREG(PWM_BASE + PWM_GEN_0_OFFSET + PWM_O_X_GENA) |=((PWM_GEN_ACT_ONE<<PWM_GEN_ACT_A_UP_SHIFT)|
                                                         (PWM_GEN_ACT_ZERO<<PWM_GEN_ACT_A_DN_SHIFT));
    HWREG(PWM_BASE + PWM_GEN_0_OFFSET + PWM_O_X_GENB) &=(~0x00000FFF);    
	HWREG(PWM_BASE + PWM_GEN_0_OFFSET + PWM_O_X_GENB) |=((PWM_GEN_ACT_ONE<<PWM_GEN_ACT_B_UP_SHIFT)|
                                                        (PWM_GEN_ACT_ZERO <<PWM_GEN_ACT_B_DN_SHIFT));

	HWREG(PWM_BASE + PWM_GEN_0_OFFSET + PWM_O_X_LOAD) = 60000/2;	    // 设置两路PWM的共同周期 
        
	HWREG(PWM_BASE + PWM_GEN_0_OFFSET + PWM_O_X_CMPA) = (60000-50000)/2;// 分别设置两路PWM的匹配值
    HWREG(PWM_BASE + PWM_GEN_0_OFFSET + PWM_O_X_CMPB) = (60000-10000)/2;

   	HWREG(PWM_BASE + PWM_O_ENABLE) |= 0x00000003;   				    // 使能PWM0和PWM1
             
	HWREG(PWM_BASE + PWM_GEN_0_OFFSET + PWM_O_X_CTL ) |= 0x00000001;    // 使能PWM发生器0

	while(1);
}

⌨️ 快捷键说明

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