/* * pwm.c * * Created on: Feb 24, 2015 * Author: Ross */ #include "board.h" #include "splear.h" #define SCT_PWM LPC_SCT #define SCT_PWM_PIN_OUT 1 /* COUT1 Generate square wave */ #define SCT_PWM_PIN_LED 0 /* COUT0 [index 2] Controls LED */ #define SCT_PWM_OUT 1 /* Index of OUT PWM */ #define SCT_PWM_LED 2 /* Index of LED PWM */ #define SCT_PWM_RATE 10000 /* PWM frequency 10 KHz */ static void pwmInitPins() { /* Enable SWM clock before altering SWM */ Chip_Clock_EnablePeriphClock(SYSCTL_CLOCK_SWM); /* Connect SCT output 0 to LED pin PIO7, SCT output 1 to SPL PWM Output PIO8 */ Chip_SWM_MovablePinAssign(SWM_CTOUT_1_O, HW_PWM); Chip_SWM_MovablePinAssign(SWM_CTOUT_0_O, HW_LED); Chip_Clock_DisablePeriphClock(SYSCTL_CLOCK_SWM); } void pwmInit() { /* Initialize the SCT as PWM and set frequency */ Chip_SCTPWM_Init(SCT_PWM); Chip_SCTPWM_SetRate(SCT_PWM, SCT_PWM_RATE); /* Map the PWM output pins */ pwmInitPins(); /* Use SCT0_OUT1 pin */ Chip_SCTPWM_SetOutPin(SCT_PWM, SCT_PWM_OUT, SCT_PWM_PIN_OUT); Chip_SCTPWM_SetOutPin(SCT_PWM, SCT_PWM_LED, SCT_PWM_PIN_LED); /* Start with 0% duty cycle */ Chip_SCTPWM_SetDutyCycle(SCT_PWM, SCT_PWM_OUT, 0); Chip_SCTPWM_SetDutyCycle(SCT_PWM, SCT_PWM_LED, 0); /* Start output */ Chip_SCTPWM_Start(SCT_PWM); } void pwmSet_LED(int v, int scale) { Chip_SCTPWM_SetDutyCycle(SCT_PWM, SCT_PWM_LED, (Chip_SCTPWM_GetTicksPerCycle(SCT_PWM) * v) / scale); } void pwmSet_OUT(int v, int scale) { Chip_SCTPWM_SetDutyCycle(SCT_PWM, SCT_PWM_OUT, (Chip_SCTPWM_GetTicksPerCycle(SCT_PWM) * v) / scale); }