crashtest-r0ket/lcd/backlight.c

45 lines
1.1 KiB
C

/*
* Based on microbuilders PWM example.
*/
#include "lpc134x.h"
#include "sysdefs.h"
uint32_t brightness = 100;
void backlightInit(void) {
/* Enable the clock for CT16B1 */
SCB_SYSAHBCLKCTRL |= (SCB_SYSAHBCLKCTRL_CT16B1);
/* Configure PIO1.10 as Timer1_16 MAT1 Output */
IOCON_PIO1_10 &= ~IOCON_PIO1_10_FUNC_MASK;
IOCON_PIO1_10 |= IOCON_PIO1_10_FUNC_CT16B1_MAT1;
/* Set default duty cycle (MR1) */
TMR_TMR16B1MR1 = (0xFFFF * (100 - brightness)) / 100;
/* External Match Register Settings for PWM */
TMR_TMR16B1EMR = TMR_TMR16B1EMR_EMC1_TOGGLE | TMR_TMR16B1EMR_EM1;
/* enable Timer1 */
TMR_TMR16B1TCR = TMR_TMR16B1TCR_COUNTERENABLE_ENABLED;
/* Enable PWM1 */
TMR_TMR16B1PWMC = TMR_TMR16B1PWMC_PWM1_ENABLED;
}
int backlightSetBrightness(uint32_t percentage) {
if ((percentage < 1) || (percentage > 100)) {
/* brightness must be a value between 1 and 100 */
return -1;
}
/* Set Duty Cycle (MR1) */
TMR_TMR16B1MR1 = (0xFFFF * (100 - (brightness = percentage))) / 100;
return 0;
}
uint32_t backlightGetBrightness(void) {
return brightness;
}