mirror of
https://github.com/espressif/esp-idf.git
synced 2025-08-21 16:55:33 +00:00
feat(mipi_dsi): update low level functions to include underrun interrupt
This commit is contained in:
@@ -14,6 +14,7 @@
|
||||
#include "hal/lcd_types.h"
|
||||
|
||||
#define MIPI_DSI_LL_GET_BRG(bus_id) (bus_id == 0 ? &MIPI_DSI_BRIDGE : NULL)
|
||||
#define MIPI_DSI_LL_EVENT_UNDERRUN (1 << 0)
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
@@ -35,6 +36,46 @@ static inline void mipi_dsi_brg_ll_enable(dsi_brg_dev_t *dev, bool en)
|
||||
dev->en.dsi_en = en;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Enable DSI bridge interrupt for specific event mask
|
||||
*
|
||||
* @param dev Pointer to the DSI bridge controller register base address
|
||||
* @param mask Event mask
|
||||
* @param enable True to enable, False to disable
|
||||
*/
|
||||
static inline void mipi_dsi_brg_ll_enable_interrupt(dsi_brg_dev_t *dev, uint32_t mask, bool enable)
|
||||
{
|
||||
if (enable) {
|
||||
dev->int_ena.val |= mask;
|
||||
} else {
|
||||
dev->int_ena.val &= ~mask;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Clear DSI bridge interrupt for specific event mask
|
||||
*
|
||||
* @param dev Pointer to the DSI bridge controller register base address
|
||||
* @param mask Event mask
|
||||
*/
|
||||
__attribute__((always_inline))
|
||||
static inline void mipi_dsi_brg_ll_clear_interrupt_status(dsi_brg_dev_t *dev, uint32_t mask)
|
||||
{
|
||||
dev->int_clr.val = mask;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Get interrupt status for DSI bridge
|
||||
*
|
||||
* @param dev Pointer to the DSI bridge controller register base address
|
||||
* @return Interrupt status
|
||||
*/
|
||||
__attribute__((always_inline))
|
||||
static inline uint32_t mipi_dsi_brg_ll_get_interrupt_status(dsi_brg_dev_t *dev)
|
||||
{
|
||||
return dev->int_st.val;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Set the number of 64-bit words in one dma burst transfer
|
||||
*
|
||||
@@ -242,7 +283,7 @@ static inline void mipi_dsi_brg_ll_enable_ref_clock(dsi_brg_dev_t *dev, bool en)
|
||||
* @param dev Pointer to the DSI bridge controller register base address
|
||||
* @param controller Flow controller
|
||||
*/
|
||||
static inline void mipi_dsi_brg_ll_set_flow_controller(dsi_brg_dev_t* dev, mipi_dsi_ll_flow_controller_t controller)
|
||||
static inline void mipi_dsi_brg_ll_set_flow_controller(dsi_brg_dev_t *dev, mipi_dsi_ll_flow_controller_t controller)
|
||||
{
|
||||
dev->dma_flow_ctrl.dsi_dma_flow_controller = controller;
|
||||
}
|
||||
@@ -255,9 +296,21 @@ static inline void mipi_dsi_brg_ll_set_flow_controller(dsi_brg_dev_t* dev, mipi_
|
||||
* @param dev Pointer to the DSI bridge controller register base address
|
||||
* @param number Number of blocks
|
||||
*/
|
||||
static inline void mipi_dsi_brg_ll_set_multi_block_number(dsi_brg_dev_t* dev, uint32_t number)
|
||||
static inline void mipi_dsi_brg_ll_set_multi_block_number(dsi_brg_dev_t *dev, uint32_t number)
|
||||
{
|
||||
dev->dma_flow_ctrl.dma_flow_multiblk_num = number;
|
||||
dev->dma_frame_interval.dma_multiblk_en = number > 1;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Get the FIFO depth of the DSI bridge
|
||||
*
|
||||
* @param dev Pointer to the DSI bridge controller register base address
|
||||
* @return FIFO depth
|
||||
*/
|
||||
static inline uint32_t mipi_dsi_brg_ll_get_fifo_depth(dsi_brg_dev_t *dev)
|
||||
{
|
||||
return dev->fifo_flow_status.raw_buf_depth;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -266,7 +319,7 @@ static inline void mipi_dsi_brg_ll_set_multi_block_number(dsi_brg_dev_t* dev, ui
|
||||
* @param dev Pointer to the DSI bridge controller register base address
|
||||
* @param std YUV-RGB conversion standard
|
||||
*/
|
||||
static inline void mipi_dsi_brg_ll_set_yuv_convert_std(dsi_brg_dev_t* dev, lcd_yuv_conv_std_t std)
|
||||
static inline void mipi_dsi_brg_ll_set_yuv_convert_std(dsi_brg_dev_t *dev, lcd_yuv_conv_std_t std)
|
||||
{
|
||||
switch (std) {
|
||||
case LCD_YUV_CONV_STD_BT601:
|
||||
|
Reference in New Issue
Block a user