/*******************************************
开发坏境:CCSv5
程序功能:利用PWM模块产生占空比自动从0.1%到100%循环调节的PWM波
程序说明:使用PWM模块0,PWM发生器0,输出为PWM0管脚,PB6 利用PWM中断
********************************************/
#include <stdbool.h>
#include <stdint.h>
#include "inc/hw_ints.h"
#include "inc/hw_memmap.h"
#include "driverlib/gpio.h"
#include "driverlib/interrupt.h"
#include "driverlib/pin_map.h"
#include "driverlib/pwm.h"
#include "driverlib/sysctl.h"
unsigned int PWM_Value=1852; //PWM占空比调节
void PWM0IntHandler(void)
{
PWMGenIntClear(PWM0_BASE, PWM_GEN_0, PWM_INT_CNT_LOAD);
if((PWMPulseWidthGet(PWM0_BASE, PWM_OUT_0) + 64) <=
(PWMGenPeriodGet(PWM0_BASE, PWM_GEN_0) ))
{
PWMPulseWidthSet(PWM0_BASE, PWM_OUT_0,
PWMPulseWidthGet(PWM0_BASE, PWM_OUT_0) + 64);
}
else
{
PWMPulseWidthSet(PWM0_BASE, PWM_OUT_0, 64);
}
}
int main(void)
{
SysCtlClockSet(SYSCTL_SYSDIV_4 | SYSCTL_USE_PLL | SYSCTL_OSC_MAIN | SYSCTL_XTAL_16MHZ);
SysCtlPWMClockSet(SYSCTL_PWMDIV_1);
SysCtlPeripheralEnable(SYSCTL_PERIPH_PWM0);
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOB);
GPIOPinConfigure(GPIO_PB6_M0PWM0);
GPIOPinTypePWM(GPIO_PORTB_BASE, GPIO_PIN_6);
PWMGenConfigure(PWM0_BASE, PWM_GEN_0, PWM_GEN_MODE_DOWN | PWM_GEN_MODE_NO_SYNC);
PWMGenPeriodSet(PWM0_BASE, PWM_GEN_0, PWM_Value);//250HZ
PWMPulseWidthSet(PWM0_BASE, PWM_OUT_0, PWM_Value/2);//占空比0.1%
IntMasterEnable();
PWMIntEnable(PWM0_BASE, PWM_INT_GEN_0);
// Enable the PWM0 LOAD interrupt on PWM0.
PWMGenIntTrigEnable(PWM0_BASE, PWM_GEN_0, PWM_INT_CNT_LOAD);
IntEnable(INT_PWM0_0);
PWMOutputState(PWM0_BASE, PWM_OUT_0_BIT, true);
PWMGenEnable(PWM0_BASE, PWM_GEN_0);
while(1);
}