Artifact [de1f6dc46d]

Artifact de1f6dc46d258beaec0f5bbc644f30be56ce44c3:


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