modules/display: Add support for Python backlight controllers.

This commit is contained in:
iabdalkader 2023-10-27 10:37:37 +02:00
parent dd8e82fa95
commit 391ec443f6
10 changed files with 45 additions and 209 deletions

View File

@ -209,13 +209,6 @@
#define OMV_SPI_DISPLAY_RST_PIN (&omv_pin_D12_GPIO)
#define OMV_SPI_DISPLAY_BL_PIN (&omv_pin_A5_GPIO)
#define OMV_DISPLAY_BL_DAC (DAC)
#define OMV_DISPLAY_BL_DAC_CHANNEL (DAC_CHANNEL_2)
#define OMV_DISPLAY_BL_DAC_CLK_ENABLE() __HAL_RCC_DAC_CLK_ENABLE()
#define OMV_DISPLAY_BL_DAC_CLK_DISABLE() __HAL_RCC_DAC_CLK_DISABLE()
#define OMV_DISPLAY_BL_DAC_FORCE_RESET() __HAL_RCC_DAC_FORCE_RESET()
#define OMV_DISPLAY_BL_DAC_RELEASE_RESET() __HAL_RCC_DAC_RELEASE_RESET()
// FIR Lepton
#define OMV_FIR_LEPTON_I2C_BUS (FIR_I2C_ID)
#define OMV_FIR_LEPTON_I2C_BUS_SPEED (FIR_I2C_SPEED)

View File

@ -209,13 +209,6 @@
#define OMV_SPI_DISPLAY_RST_PIN (&omv_pin_D12_GPIO)
#define OMV_SPI_DISPLAY_BL_PIN (&omv_pin_A5_GPIO)
#define OMV_DISPLAY_BL_DAC (DAC)
#define OMV_DISPLAY_BL_DAC_CHANNEL (DAC_CHANNEL_2)
#define OMV_DISPLAY_BL_DAC_CLK_ENABLE() __HAL_RCC_DAC_CLK_ENABLE()
#define OMV_DISPLAY_BL_DAC_CLK_DISABLE() __HAL_RCC_DAC_CLK_DISABLE()
#define OMV_DISPLAY_BL_DAC_FORCE_RESET() __HAL_RCC_DAC_FORCE_RESET()
#define OMV_DISPLAY_BL_DAC_RELEASE_RESET() __HAL_RCC_DAC_RELEASE_RESET()
// FIR Lepton
#define OMV_FIR_LEPTON_I2C_BUS (FIR_I2C_ID)
#define OMV_FIR_LEPTON_I2C_BUS_SPEED (FIR_I2C_SPEED)

View File

@ -310,13 +310,6 @@
#define OMV_SPI_DISPLAY_RST_PIN (&omv_pin_D12_GPIO)
#define OMV_SPI_DISPLAY_BL_PIN (&omv_pin_A5_GPIO)
#define OMV_DISPLAY_BL_DAC (DAC1)
#define OMV_DISPLAY_BL_DAC_CHANNEL (DAC_CHANNEL_2)
#define OMV_DISPLAY_BL_DAC_CLK_ENABLE() __HAL_RCC_DAC12_CLK_ENABLE()
#define OMV_DISPLAY_BL_DAC_CLK_DISABLE() __HAL_RCC_DAC12_CLK_DISABLE()
#define OMV_DISPLAY_BL_DAC_FORCE_RESET() __HAL_RCC_DAC12_FORCE_RESET()
#define OMV_DISPLAY_BL_DAC_RELEASE_RESET() __HAL_RCC_DAC12_RELEASE_RESET()
// FIR Lepton
#define OMV_FIR_LEPTON_I2C_BUS (FIR_I2C_ID)
#define OMV_FIR_LEPTON_I2C_BUS_SPEED (FIR_I2C_SPEED)

View File

@ -314,13 +314,6 @@
#define OMV_SPI_DISPLAY_BL_PIN (&omv_pin_A5_GPIO)
#define OMV_SPI_DISPLAY_TRIPLE_BUFFER (1)
#define OMV_DISPLAY_BL_DAC (DAC1)
#define OMV_DISPLAY_BL_DAC_CHANNEL (DAC_CHANNEL_2)
#define OMV_DISPLAY_BL_DAC_CLK_ENABLE() __HAL_RCC_DAC12_CLK_ENABLE()
#define OMV_DISPLAY_BL_DAC_CLK_DISABLE() __HAL_RCC_DAC12_CLK_DISABLE()
#define OMV_DISPLAY_BL_DAC_FORCE_RESET() __HAL_RCC_DAC12_FORCE_RESET()
#define OMV_DISPLAY_BL_DAC_RELEASE_RESET() __HAL_RCC_DAC12_RELEASE_RESET()
// FIR Lepton
#define OMV_FIR_LEPTON_I2C_BUS (FIR_I2C_ID)
#define OMV_FIR_LEPTON_I2C_BUS_SPEED (FIR_I2C_SPEED)

View File

@ -355,15 +355,6 @@
#define OMV_RGB_DISPLAY_DISP_PIN (&omv_pin_G9_GPIO)
#define OMV_RGB_DISPLAY_BL_PIN (&omv_pin_B0_TIM3)
#define OMV_DISPLAY_BL_TIM (TIM3)
#define OMV_DISPLAY_BL_TIM_FREQ (100000)
#define OMV_DISPLAY_BL_TIM_CHANNEL (TIM_CHANNEL_3)
#define OMV_DISPLAY_BL_TIM_CLK_ENABLE() __HAL_RCC_TIM3_CLK_ENABLE()
#define OMV_DISPLAY_BL_TIM_CLK_DISABLE() __HAL_RCC_TIM3_CLK_DISABLE()
#define OMV_DISPLAY_BL_TIM_FORCE_RESET() __HAL_RCC_TIM3_FORCE_RESET()
#define OMV_DISPLAY_BL_TIM_RELEASE_RESET() __HAL_RCC_TIM3_RELEASE_RESET()
#define OMV_DISPLAY_BL_TIM_PCLK_FREQ() HAL_RCC_GetPCLK1Freq()
// SPI LCD Interface
#define OMV_SPI_DISPLAY_CONTROLLER (SPI2_ID)
#define OMV_SPI_DISPLAY_MOSI_PIN (&omv_pin_B15_SPI2)
@ -376,13 +367,6 @@
#define OMV_SPI_DISPLAY_BL_PIN (&omv_pin_A5_GPIO)
#define OMV_SPI_DISPLAY_TRIPLE_BUFFER (1)
#define OMV_DISPLAY_BL_DAC (DAC1)
#define OMV_DISPLAY_BL_DAC_CHANNEL (DAC_CHANNEL_2)
#define OMV_DISPLAY_BL_DAC_CLK_ENABLE() __HAL_RCC_DAC12_CLK_ENABLE()
#define OMV_DISPLAY_BL_DAC_CLK_DISABLE() __HAL_RCC_DAC12_CLK_DISABLE()
#define OMV_DISPLAY_BL_DAC_FORCE_RESET() __HAL_RCC_DAC12_FORCE_RESET()
#define OMV_DISPLAY_BL_DAC_RELEASE_RESET() __HAL_RCC_DAC12_RELEASE_RESET()
// HDMI CEC/DDC I/O
#define OMV_DISPLAY_CEC_ENABLE (1)
#define OMV_DISPLAY_DDC_ENABLE (1)

View File

@ -69,6 +69,13 @@ STATIC mp_obj_t py_display_deinit(mp_obj_t self_in) {
if (display_p->deinit != NULL) {
display_p->deinit(self);
}
if (self->bl_controller != mp_const_none) {
mp_obj_t dest[2];
mp_load_method_maybe(self->bl_controller, MP_QSTR_deinit, dest);
if (dest[0] != MP_OBJ_NULL) {
mp_call_method_n_kw(0, 0, dest);
}
}
return mp_const_none;
}
STATIC MP_DEFINE_CONST_FUN_OBJ_1(py_display_deinit_obj, py_display_deinit);
@ -86,17 +93,27 @@ STATIC MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(py_display_clear_obj, 1, 2, py_displa
STATIC mp_obj_t py_display_backlight(uint n_args, const mp_obj_t *args) {
py_display_obj_t *self = MP_OBJ_TO_PTR(args[0]);
if (n_args > 1) {
uint32_t intensity = mp_obj_get_int(args[1]);
if ((intensity < 0) || (255 < intensity)) {
mp_raise_msg(&mp_type_ValueError, MP_ERROR_TEXT("0 <= intensity <= 255!"));
if (intensity > 100) {
mp_raise_msg(&mp_type_ValueError, MP_ERROR_TEXT("Intensity ranges between 0 (off) and 100 (full on)"));
}
py_display_p_t *display_p = (py_display_p_t *) MP_OBJ_TYPE_GET_SLOT(self->base.type, protocol);
if (display_p->set_backlight != NULL) {
display_p->set_backlight(self, intensity);
if (self->bl_controller != mp_const_none) {
// If the display has a backlight controller set, call it first.
mp_obj_t dest[3];
mp_load_method(self->bl_controller, MP_QSTR_backlight, dest);
dest[2] = args[1];
mp_call_method_n_kw(1, 0, dest);
} else {
// Otherwise, if the display protocol's set_backlight is set, call it.
py_display_p_t *display_p = (py_display_p_t *) MP_OBJ_TYPE_GET_SLOT(self->base.type, protocol);
if (display_p->set_backlight != NULL) {
display_p->set_backlight(self, intensity);
} else {
mp_raise_msg(&mp_type_ValueError, MP_ERROR_TEXT("Display does not support backlight control."));
}
}
self->intensity = intensity;
} else {
return mp_obj_new_int(self->intensity);
}

View File

@ -52,6 +52,7 @@ typedef struct _py_display_obj_t {
bool display_on;
bool portrait;
mp_obj_t controller;
mp_obj_t bl_controller;
#if defined(OMV_SPI_DISPLAY_CONTROLLER)
omv_spi_t spi_bus;
bool spi_tx_running;

View File

@ -288,53 +288,12 @@ static void spi_display_clear(py_display_obj_t *self, bool display_off) {
}
}
#ifdef OMV_DISPLAY_BL_DAC
static DAC_HandleTypeDef lcd_dac_handle;
#endif
#ifdef OMV_SPI_DISPLAY_BL_PIN
static void spi_display_set_backlight(py_display_obj_t *self, uint32_t intensity) {
#ifdef OMV_DISPLAY_BL_DAC
if ((self->intensity < 255) && (255 <= intensity)) {
#else
if ((self->intensity < 1) && (1 <= intensity)) {
#endif
omv_gpio_write(OMV_SPI_DISPLAY_BL_PIN, 1);
omv_gpio_deinit(OMV_SPI_DISPLAY_BL_PIN);
} else if ((0 < self->intensity) && (intensity <= 0)) {
omv_gpio_config(OMV_SPI_DISPLAY_BL_PIN, OMV_GPIO_MODE_OUTPUT, OMV_GPIO_PULL_NONE, OMV_GPIO_SPEED_LOW, -1);
omv_gpio_write(OMV_SPI_DISPLAY_BL_PIN, 0);
}
#ifdef OMV_DISPLAY_BL_DAC
if (((self->intensity <= 0) || (255 <= self->intensity)) && (0 < intensity) && (intensity < 255)) {
omv_gpio_config(OMV_SPI_DISPLAY_BL_PIN, OMV_GPIO_MODE_ANALOG, OMV_GPIO_PULL_NONE, OMV_GPIO_SPEED_LOW, -1);
DAC_ChannelConfTypeDef lcd_dac_channel_handle;
lcd_dac_handle.Instance = OMV_DISPLAY_BL_DAC;
lcd_dac_channel_handle.DAC_Trigger = DAC_TRIGGER_NONE;
lcd_dac_channel_handle.DAC_OutputBuffer = DAC_OUTPUTBUFFER_ENABLE;
#if defined(MCU_SERIES_H7)
lcd_dac_channel_handle.DAC_SampleAndHold = DAC_SAMPLEANDHOLD_DISABLE;
lcd_dac_channel_handle.DAC_ConnectOnChipPeripheral = DAC_CHIPCONNECT_DISABLE;
lcd_dac_channel_handle.DAC_UserTrimming = DAC_TRIMMING_FACTORY;
#endif
HAL_DAC_Init(&lcd_dac_handle);
HAL_DAC_ConfigChannel(&lcd_dac_handle, &lcd_dac_channel_handle, OMV_DISPLAY_BL_DAC_CHANNEL);
HAL_DAC_Start(&lcd_dac_handle, OMV_DISPLAY_BL_DAC_CHANNEL);
HAL_DAC_SetValue(&lcd_dac_handle, OMV_DISPLAY_BL_DAC_CHANNEL, DAC_ALIGN_8B_R, intensity);
} else if ((0 < self->intensity) && (self->intensity < 255) && ((intensity <= 0) || (255 <= intensity))) {
HAL_DAC_Stop(&lcd_dac_handle, OMV_DISPLAY_BL_DAC_CHANNEL);
HAL_DAC_DeInit(&lcd_dac_handle);
} else if ((0 < self->intensity) && (self->intensity < 255) && (0 < intensity) && (intensity < 255)) {
HAL_DAC_SetValue(&lcd_dac_handle, OMV_DISPLAY_BL_DAC_CHANNEL, DAC_ALIGN_8B_R, intensity);
}
#endif
self->intensity = intensity;
omv_gpio_config(OMV_SPI_DISPLAY_BL_PIN, OMV_GPIO_MODE_OUTPUT, OMV_GPIO_PULL_NONE, OMV_GPIO_SPEED_LOW, -1);
omv_gpio_write(OMV_SPI_DISPLAY_BL_PIN, !!intensity);
}
#endif // OMV_SPI_DISPLAY_BL_PIN
#endif
static void spi_display_deinit(py_display_obj_t *self) {
if (self->triple_buffer) {
@ -345,14 +304,13 @@ static void spi_display_deinit(py_display_obj_t *self) {
omv_spi_deinit(&self->spi_bus);
omv_gpio_deinit(OMV_SPI_DISPLAY_RS_PIN);
omv_gpio_deinit(OMV_SPI_DISPLAY_RST_PIN);
#ifdef OMV_SPI_DISPLAY_BL_PIN
spi_display_set_backlight(self, 255);
omv_gpio_deinit(OMV_SPI_DISPLAY_BL_PIN);
#endif
}
mp_obj_t spi_display_make_new(const mp_obj_type_t *type, size_t n_args, size_t n_kw, const mp_obj_t *all_args) {
enum { ARG_width, ARG_height, ARG_refresh, ARG_bgr, ARG_byte_swap, ARG_triple_buffer };
enum { ARG_width, ARG_height, ARG_refresh, ARG_bgr, ARG_byte_swap, ARG_triple_buffer, ARG_backlight };
static const mp_arg_t allowed_args[] = {
{ MP_QSTR_width, MP_ARG_INT, {.u_int = 128 } },
{ MP_QSTR_height, MP_ARG_INT, {.u_int = 160 } },
@ -360,6 +318,7 @@ mp_obj_t spi_display_make_new(const mp_obj_type_t *type, size_t n_args, size_t n
{ MP_QSTR_bgr, MP_ARG_BOOL, {.u_bool = false} },
{ MP_QSTR_byte_swap, MP_ARG_BOOL, {.u_bool = false} },
{ MP_QSTR_triple_buffer, MP_ARG_BOOL, {.u_bool = LCD_TRIPLE_BUFFER_DEFAULT} },
{ MP_QSTR_backlight, MP_ARG_OBJ | MP_ARG_KW_ONLY, {.u_rom_obj = MP_ROM_NONE} },
};
// Parse args.
@ -386,6 +345,7 @@ mp_obj_t spi_display_make_new(const mp_obj_type_t *type, size_t n_args, size_t n
self->triple_buffer = args[ARG_triple_buffer].u_bool;
self->bgr = args[ARG_bgr].u_bool;
self->byte_swap = args[ARG_byte_swap].u_bool;
self->bl_controller = args[ARG_backlight].u_obj;
omv_spi_config_t spi_config;
omv_spi_default_config(&spi_config, OMV_SPI_DISPLAY_CONTROLLER);
@ -426,10 +386,6 @@ mp_obj_t spi_display_make_new(const mp_obj_type_t *type, size_t n_args, size_t n
fb_alloc_mark_permanent();
}
#ifdef OMV_SPI_DISPLAY_BL_PIN
spi_display_set_backlight(self, 255);
#endif
return MP_OBJ_FROM_PTR(self);
}

View File

@ -55,9 +55,6 @@ typedef struct _display_state {
#ifdef OMV_DSI_DISPLAY_CONTROLLER
DSI_HandleTypeDef hdsi;
#endif
#ifdef OMV_DISPLAY_BL_TIM
TIM_HandleTypeDef htim;
#endif
LTDC_LayerCfgTypeDef framebuffer_layers[FRAMEBUFFER_COUNT];
} display_state_t;
@ -485,56 +482,10 @@ static void display_clear(py_display_obj_t *self, bool off) {
#ifdef OMV_DISPLAY_BL_PIN
static void display_set_backlight(py_display_obj_t *self, uint32_t intensity) {
#ifdef OMV_DISPLAY_BL_TIM
if ((self->intensity < 255) && (255 <= intensity)) {
#else
if ((self->intensity < 1) && (1 <= intensity)) {
#endif
omv_gpio_config(OMV_DISPLAY_BL_PIN, OMV_GPIO_MODE_OUTPUT, OMV_GPIO_PULL_NONE, OMV_GPIO_SPEED_LOW, -1);
omv_gpio_write(OMV_DISPLAY_BL_PIN, 1);
} else if ((0 < self->intensity) && (intensity <= 0)) {
omv_gpio_write(OMV_DISPLAY_BL_PIN, 0);
omv_gpio_deinit(OMV_DISPLAY_BL_PIN);
}
#ifdef OMV_DISPLAY_BL_TIM
int tclk = OMV_DISPLAY_BL_TIM_PCLK_FREQ() * 2;
int period = (tclk / OMV_DISPLAY_BL_TIM_FREQ) - 1;
if (((self->intensity <= 0) || (255 <= self->intensity)) && (0 < intensity) && (intensity < 255)) {
omv_gpio_config(OMV_DISPLAY_BL_PIN, OMV_GPIO_MODE_ALT, OMV_GPIO_PULL_NONE, OMV_GPIO_SPEED_LOW, -1);
display.htim.Instance = OMV_DISPLAY_BL_TIM;
display.htim.Init.Prescaler = 0;
display.htim.Init.CounterMode = TIM_COUNTERMODE_UP;
display.htim.Init.Period = period;
display.htim.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
display.htim.Init.RepetitionCounter = 0;
display.htim.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
TIM_OC_InitTypeDef lcd_tim_oc_handle;
lcd_tim_oc_handle.Pulse = (period * intensity) / 255;
lcd_tim_oc_handle.OCMode = TIM_OCMODE_PWM1;
lcd_tim_oc_handle.OCPolarity = TIM_OCPOLARITY_HIGH;
lcd_tim_oc_handle.OCNPolarity = TIM_OCNPOLARITY_HIGH;
lcd_tim_oc_handle.OCFastMode = TIM_OCFAST_DISABLE;
lcd_tim_oc_handle.OCIdleState = TIM_OCIDLESTATE_RESET;
lcd_tim_oc_handle.OCNIdleState = TIM_OCNIDLESTATE_RESET;
HAL_TIM_PWM_Init(&display.htim);
HAL_TIM_PWM_ConfigChannel(&display.htim, &lcd_tim_oc_handle, OMV_DISPLAY_BL_TIM_CHANNEL);
HAL_TIM_PWM_Start(&display.htim, OMV_DISPLAY_BL_TIM_CHANNEL);
} else if ((0 < self->intensity) && (self->intensity < 255) && ((intensity <= 0) || (255 <= intensity))) {
HAL_TIM_PWM_Stop(&display.htim, OMV_DISPLAY_BL_TIM_CHANNEL);
HAL_TIM_PWM_DeInit(&display.htim);
} else if ((0 < self->intensity) && (self->intensity < 255) && (0 < intensity) && (intensity < 255)) {
__HAL_TIM_SET_COMPARE(&display.htim, OMV_DISPLAY_BL_TIM_CHANNEL, (period * intensity) / 255);
}
#endif
self->intensity = intensity;
omv_gpio_config(OMV_DISPLAY_BL_PIN, OMV_GPIO_MODE_OUTPUT, OMV_GPIO_PULL_NONE, OMV_GPIO_SPEED_LOW, -1);
omv_gpio_write(OMV_DISPLAY_BL_PIN, !!intensity);
}
#endif // OMV_DISPLAY_BL_PIN
#endif
#ifdef OMV_DSI_DISPLAY_CONTROLLER
int display_dsi_write(py_display_obj_t *self, uint8_t cmd, uint8_t *args, size_t n_args, bool dcs) {
@ -591,18 +542,18 @@ static void display_deinit(py_display_obj_t *self) {
}
}
fb_alloc_free_till_mark_past_mark_permanent();
#ifdef OMV_DISPLAY_BL_PIN
if (self->display_on) {
// back to default state
display_set_backlight(self, 0);
}
#endif // OMV_DISPLAY_BL_PIN
omv_gpio_deinit(OMV_DISPLAY_BL_PIN);
#endif
fb_alloc_free_till_mark_past_mark_permanent();
}
mp_obj_t display_make_new(const mp_obj_type_t *type, size_t n_args, size_t n_kw, const mp_obj_t *all_args) {
enum { ARG_framesize, ARG_refresh, ARG_display_on, ARG_triple_buffer, ARG_portrait, ARG_channel, ARG_controller };
enum {
ARG_framesize, ARG_refresh, ARG_display_on, ARG_triple_buffer,
ARG_portrait, ARG_channel, ARG_controller, ARG_backlight
};
static const mp_arg_t allowed_args[] = {
{ MP_QSTR_framesize, MP_ARG_INT, {.u_int = DISPLAY_RESOLUTION_FWVGA } },
{ MP_QSTR_refresh, MP_ARG_INT | MP_ARG_KW_ONLY, {.u_int = 60 } },
@ -611,6 +562,7 @@ mp_obj_t display_make_new(const mp_obj_type_t *type, size_t n_args, size_t n_kw,
{ MP_QSTR_portrait, MP_ARG_BOOL | MP_ARG_KW_ONLY, {.u_bool = false} },
{ MP_QSTR_channel, MP_ARG_INT | MP_ARG_KW_ONLY, {.u_int = 0 } },
{ MP_QSTR_controller, MP_ARG_OBJ | MP_ARG_KW_ONLY, {.u_rom_obj = MP_ROM_NONE} },
{ MP_QSTR_backlight, MP_ARG_OBJ | MP_ARG_KW_ONLY, {.u_rom_obj = MP_ROM_NONE} },
};
// Parse args.
@ -647,6 +599,7 @@ mp_obj_t display_make_new(const mp_obj_type_t *type, size_t n_args, size_t n_kw,
self->height = display_modes[self->framesize].vactive;
}
self->controller = args[ARG_controller].u_obj;
self->bl_controller = args[ARG_backlight].u_obj;
// Store state to access it from IRQ handlers or callbacks
display.self = self;
@ -672,12 +625,6 @@ mp_obj_t display_make_new(const mp_obj_type_t *type, size_t n_args, size_t n_kw,
}
#endif
#ifdef OMV_DISPLAY_BL_PIN
if (self->display_on) {
display_set_backlight(self, 255); // to on state
}
#endif // OMV_DISPLAY_BL_PIN
return MP_OBJ_FROM_PTR(self);
}

View File

@ -289,12 +289,6 @@ void HAL_TIM_PWM_MspInit(TIM_HandleTypeDef *htim) {
}
#endif // (OMV_XCLK_SOURCE == OMV_XCLK_TIM)
#if defined(OMV_DISPLAY_BL_TIM)
if (htim->Instance == OMV_DISPLAY_BL_TIM) {
OMV_DISPLAY_BL_TIM_CLK_ENABLE();
}
#endif
#if defined(OMV_BUZZER_TIM)
if (htim->Instance == OMV_BUZZER_TIM) {
OMV_BUZZER_TIM_CLK_ENABLE();
@ -303,14 +297,6 @@ void HAL_TIM_PWM_MspInit(TIM_HandleTypeDef *htim) {
}
void HAL_TIM_PWM_MspDeInit(TIM_HandleTypeDef *htim) {
#if defined(OMV_DISPLAY_BL_TIM)
if (htim->Instance == OMV_DISPLAY_BL_TIM) {
OMV_DISPLAY_BL_TIM_FORCE_RESET();
OMV_DISPLAY_BL_TIM_RELEASE_RESET();
OMV_DISPLAY_BL_TIM_CLK_DISABLE();
}
#endif
#if defined(OMV_BUZZER_TIM)
if (htim->Instance == OMV_BUZZER_TIM) {
OMV_BUZZER_TIM_FORCE_RESET();
@ -660,11 +646,6 @@ void HAL_LTDC_MspInit(LTDC_HandleTypeDef *hltdc) {
omv_gpio_config(OMV_RGB_DISPLAY_DISP_PIN, OMV_GPIO_MODE_OUTPUT, OMV_GPIO_PULL_NONE, OMV_GPIO_SPEED_LOW, -1);
omv_gpio_write(OMV_RGB_DISPLAY_DISP_PIN, 0);
#endif
#if defined(OMV_RGB_DISPLAY_BL_PIN)
omv_gpio_config(OMV_RGB_DISPLAY_BL_PIN, OMV_GPIO_MODE_OUTPUT, OMV_GPIO_PULL_NONE, OMV_GPIO_SPEED_LOW, -1);
omv_gpio_write(OMV_RGB_DISPLAY_BL_PIN, 0);
#endif
}
void HAL_LTDC_MspDeInit(LTDC_HandleTypeDef *hltdc) {
@ -714,31 +695,9 @@ void HAL_LTDC_MspDeInit(LTDC_HandleTypeDef *hltdc) {
#if defined(OMV_RGB_DISPLAY_DISP_PIN)
omv_gpio_deinit(OMV_RGB_DISPLAY_DISP_PIN);
#endif
#if defined(OMV_RGB_DISPLAY_BL_PIN)
omv_gpio_deinit(OMV_RGB_DISPLAY_BL_PIN);
#endif
}
#endif
void HAL_DAC_MspInit(DAC_HandleTypeDef *hdac) {
#if defined(OMV_DISPLAY_BL_DAC)
if (hdac->Instance == OMV_DISPLAY_BL_DAC) {
OMV_DISPLAY_BL_DAC_CLK_ENABLE();
}
#endif
}
void HAL_DAC_MspDeInit(DAC_HandleTypeDef *hdac) {
#if defined(OMV_DISPLAY_BL_DAC)
if (hdac->Instance == OMV_DISPLAY_BL_DAC) {
OMV_DISPLAY_BL_DAC_FORCE_RESET();
OMV_DISPLAY_BL_DAC_RELEASE_RESET();
OMV_DISPLAY_BL_DAC_CLK_DISABLE();
}
#endif
}
void HAL_MspDeInit(void) {
}