mirror of
https://github.com/openmv/openmv.git
synced 2025-11-04 14:49:50 +08:00
ports/stm32: Add byte reversal support to lcd screen.
This commit is contained in:
parent
d44738f94c
commit
e68d002bb7
@ -43,6 +43,7 @@ static enum {
|
|||||||
|
|
||||||
static bool lcd_triple_buffer = false;
|
static bool lcd_triple_buffer = false;
|
||||||
static bool lcd_bgr = false;
|
static bool lcd_bgr = false;
|
||||||
|
static bool lcd_byte_reverse = false;
|
||||||
|
|
||||||
static enum {
|
static enum {
|
||||||
LCD_DISPLAY_QVGA,
|
LCD_DISPLAY_QVGA,
|
||||||
@ -282,6 +283,7 @@ static void spi_lcd_callback(SPI_HandleTypeDef *hspi)
|
|||||||
OMV_SPI_LCD_CS_HIGH();
|
OMV_SPI_LCD_CS_HIGH();
|
||||||
OMV_SPI_LCD_RS_OFF();
|
OMV_SPI_LCD_RS_OFF();
|
||||||
spi_tx_cb_state_memory_write_first = false;
|
spi_tx_cb_state_memory_write_first = false;
|
||||||
|
if (!lcd_byte_reverse) {
|
||||||
OMV_SPI_LCD_CONTROLLER->spi->Init.DataSize = SPI_DATASIZE_16BIT;
|
OMV_SPI_LCD_CONTROLLER->spi->Init.DataSize = SPI_DATASIZE_16BIT;
|
||||||
#if defined(MCU_SERIES_H7)
|
#if defined(MCU_SERIES_H7)
|
||||||
OMV_SPI_LCD_CONTROLLER->spi->Instance->CFG1 =
|
OMV_SPI_LCD_CONTROLLER->spi->Instance->CFG1 =
|
||||||
@ -295,6 +297,7 @@ static void spi_lcd_callback(SPI_HandleTypeDef *hspi)
|
|||||||
OMV_SPI_LCD_CONTROLLER->spi->Instance->CR1 =
|
OMV_SPI_LCD_CONTROLLER->spi->Instance->CR1 =
|
||||||
(OMV_SPI_LCD_CONTROLLER->spi->Instance->CR1 & ~SPI_CR1_DFF_Msk) | SPI_DATASIZE_16BIT;
|
(OMV_SPI_LCD_CONTROLLER->spi->Instance->CR1 & ~SPI_CR1_DFF_Msk) | SPI_DATASIZE_16BIT;
|
||||||
#endif
|
#endif
|
||||||
|
}
|
||||||
OMV_SPI_LCD_CS_LOW();
|
OMV_SPI_LCD_CS_LOW();
|
||||||
}
|
}
|
||||||
HAL_SPI_Transmit_DMA(OMV_SPI_LCD_CONTROLLER->spi, (uint8_t *) addr, count);
|
HAL_SPI_Transmit_DMA(OMV_SPI_LCD_CONTROLLER->spi, (uint8_t *) addr, count);
|
||||||
@ -1360,6 +1363,7 @@ STATIC mp_obj_t py_lcd_init(uint n_args, const mp_obj_t *args, mp_map_t *kw_args
|
|||||||
if ((refresh_rate < 30) || (120 < refresh_rate)) mp_raise_msg(&mp_type_ValueError, MP_ERROR_TEXT("Invalid Refresh Rate!"));
|
if ((refresh_rate < 30) || (120 < refresh_rate)) mp_raise_msg(&mp_type_ValueError, MP_ERROR_TEXT("Invalid Refresh Rate!"));
|
||||||
bool triple_buffer = py_helper_keyword_int(n_args, args, 4, kw_args, MP_OBJ_NEW_QSTR(MP_QSTR_triple_buffer), false);
|
bool triple_buffer = py_helper_keyword_int(n_args, args, 4, kw_args, MP_OBJ_NEW_QSTR(MP_QSTR_triple_buffer), false);
|
||||||
bool bgr = py_helper_keyword_int(n_args, args, 5, kw_args, MP_OBJ_NEW_QSTR(MP_QSTR_bgr), false);
|
bool bgr = py_helper_keyword_int(n_args, args, 5, kw_args, MP_OBJ_NEW_QSTR(MP_QSTR_bgr), false);
|
||||||
|
bool byte_reverse = py_helper_keyword_int(n_args, args, 6, kw_args, MP_OBJ_NEW_QSTR(MP_QSTR_byte_reverse), false);
|
||||||
spi_config_init(w, h, refresh_rate, triple_buffer, bgr);
|
spi_config_init(w, h, refresh_rate, triple_buffer, bgr);
|
||||||
#ifdef OMV_SPI_LCD_BL_PIN
|
#ifdef OMV_SPI_LCD_BL_PIN
|
||||||
spi_lcd_set_backlight(255); // to on state
|
spi_lcd_set_backlight(255); // to on state
|
||||||
@ -1369,6 +1373,7 @@ STATIC mp_obj_t py_lcd_init(uint n_args, const mp_obj_t *args, mp_map_t *kw_args
|
|||||||
lcd_type = LCD_SHIELD;
|
lcd_type = LCD_SHIELD;
|
||||||
lcd_triple_buffer = triple_buffer;
|
lcd_triple_buffer = triple_buffer;
|
||||||
lcd_bgr = bgr;
|
lcd_bgr = bgr;
|
||||||
|
lcd_byte_reverse = byte_reverse;
|
||||||
lcd_resolution = 0;
|
lcd_resolution = 0;
|
||||||
lcd_refresh = refresh_rate;
|
lcd_refresh = refresh_rate;
|
||||||
break;
|
break;
|
||||||
@ -1449,6 +1454,13 @@ STATIC mp_obj_t py_lcd_bgr()
|
|||||||
}
|
}
|
||||||
STATIC MP_DEFINE_CONST_FUN_OBJ_0(py_lcd_bgr_obj, py_lcd_bgr);
|
STATIC MP_DEFINE_CONST_FUN_OBJ_0(py_lcd_bgr_obj, py_lcd_bgr);
|
||||||
|
|
||||||
|
STATIC mp_obj_t py_lcd_byte_reverse()
|
||||||
|
{
|
||||||
|
if (lcd_type == LCD_NONE) return mp_const_none;
|
||||||
|
return mp_obj_new_int(lcd_byte_reverse);
|
||||||
|
}
|
||||||
|
STATIC MP_DEFINE_CONST_FUN_OBJ_0(py_lcd_byte_reverse_obj, py_lcd_byte_reverse);
|
||||||
|
|
||||||
STATIC mp_obj_t py_lcd_framesize()
|
STATIC mp_obj_t py_lcd_framesize()
|
||||||
{
|
{
|
||||||
if ((lcd_type == LCD_NONE) || (lcd_type == LCD_SHIELD)) return mp_const_none;
|
if ((lcd_type == LCD_NONE) || (lcd_type == LCD_SHIELD)) return mp_const_none;
|
||||||
@ -1780,6 +1792,7 @@ STATIC const mp_rom_map_elem_t globals_dict_table[] = {
|
|||||||
{ MP_ROM_QSTR(MP_QSTR_type), MP_ROM_PTR(&py_lcd_type_obj) },
|
{ MP_ROM_QSTR(MP_QSTR_type), MP_ROM_PTR(&py_lcd_type_obj) },
|
||||||
{ MP_ROM_QSTR(MP_QSTR_triple_buffer), MP_ROM_PTR(&py_lcd_triple_buffer_obj) },
|
{ MP_ROM_QSTR(MP_QSTR_triple_buffer), MP_ROM_PTR(&py_lcd_triple_buffer_obj) },
|
||||||
{ MP_ROM_QSTR(MP_QSTR_bgr), MP_ROM_PTR(&py_lcd_bgr_obj) },
|
{ MP_ROM_QSTR(MP_QSTR_bgr), MP_ROM_PTR(&py_lcd_bgr_obj) },
|
||||||
|
{ MP_ROM_QSTR(MP_QSTR_byte_reverse), MP_ROM_PTR(&py_lcd_byte_reverse_obj) },
|
||||||
{ MP_ROM_QSTR(MP_QSTR_framesize), MP_ROM_PTR(&py_lcd_framesize_obj) },
|
{ MP_ROM_QSTR(MP_QSTR_framesize), MP_ROM_PTR(&py_lcd_framesize_obj) },
|
||||||
{ MP_ROM_QSTR(MP_QSTR_refresh), MP_ROM_PTR(&py_lcd_refresh_obj) },
|
{ MP_ROM_QSTR(MP_QSTR_refresh), MP_ROM_PTR(&py_lcd_refresh_obj) },
|
||||||
{ MP_ROM_QSTR(MP_QSTR_get_backlight), MP_ROM_PTR(&py_lcd_get_backlight_obj) },
|
{ MP_ROM_QSTR(MP_QSTR_get_backlight), MP_ROM_PTR(&py_lcd_get_backlight_obj) },
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user