-
Notifications
You must be signed in to change notification settings - Fork 158
Expand file tree
/
Copy pathlcd.h
More file actions
39 lines (34 loc) · 1.52 KB
/
lcd.h
File metadata and controls
39 lines (34 loc) · 1.52 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
static void _lcd_backlight_init()
{
rcc_periph_clock_enable(get_rcc_from_pin(BACKLIGHT_TIM.pin));
GPIO_setup_input(BACKLIGHT_TIM.pin, ITYPE_FLOAT);
// Configure Backlight PWM
rcc_periph_clock_enable(get_rcc_from_port(BACKLIGHT_TIM.tim));
timer_set_mode(BACKLIGHT_TIM.tim, TIM_CR1_CKD_CK_INT,
TIM_CR1_CMS_EDGE, TIM_CR1_DIR_UP);
timer_set_period(BACKLIGHT_TIM.tim, 0x2CF);
timer_set_prescaler(BACKLIGHT_TIM.tim, 0);
timer_generate_event(BACKLIGHT_TIM.tim, TIM_EGR_UG);
timer_set_oc_mode(BACKLIGHT_TIM.tim, TIM_OCx(BACKLIGHT_TIM.ch), TIM_OCM_PWM1);
timer_enable_oc_preload(BACKLIGHT_TIM.tim, TIM_OCx(BACKLIGHT_TIM.ch));
timer_set_oc_polarity_high(BACKLIGHT_TIM.tim, TIM_OCx(BACKLIGHT_TIM.ch));
timer_enable_oc_output(BACKLIGHT_TIM.tim, TIM_OCx(BACKLIGHT_TIM.ch));
timer_enable_preload(BACKLIGHT_TIM.tim);
}
static void _lcd_backlight_brightness(unsigned brightness)
{
timer_disable_counter(BACKLIGHT_TIM.tim);
if (brightness == 0) {
// Turn off Backlight
GPIO_setup_input(BACKLIGHT_TIM.pin, ITYPE_FLOAT);
} else if (brightness > 9) {
// Turn on Backlight full
GPIO_setup_output(BACKLIGHT_TIM.pin, OTYPE_PUSHPULL);
GPIO_pin_set(BACKLIGHT_TIM.pin);
} else {
GPIO_setup_output_af(BACKLIGHT_TIM.pin, OTYPE_PUSHPULL, BACKLIGHT_TIM.tim);
u32 duty_cycle = 720 * brightness / 10;
timer_set_oc_value(BACKLIGHT_TIM.tim, TIM_OCx(BACKLIGHT_TIM.ch), duty_cycle);
timer_enable_counter(BACKLIGHT_TIM.tim);
}
}