/*
* 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);
}