From 0ca70d656bfa925459f3958de9b1685c7df7fad2 Mon Sep 17 00:00:00 2001 From: liyuanpeng Date: Fri, 13 Mar 2026 17:35:28 +0800 Subject: [PATCH] =?UTF-8?q?=E6=8F=90=E4=BA=A4rx=E7=9B=B8=E5=85=B3=E4=BB=A3?= =?UTF-8?q?=E7=A0=81=EF=BC=8C=E5=89=A5=E7=A6=BBscaler=E5=AF=84=E5=AD=98?= =?UTF-8?q?=E5=99=A8=E9=85=8D=E7=BD=AE=E7=94=B1=E4=B8=8A=E4=BD=8D=E6=9C=BA?= =?UTF-8?q?=E7=94=9F=E6=88=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/code/core_main.c | 46 +++++++++- .../project_case/RM692H5_120HZ_DSC3_1/ini.c | 68 +++++++-------- src/driver/include/drv_edp_rx.h | 84 +++++++++++++++++++ src/driver/include/drv_mipi_tx.h | 22 ++--- src/driver/source/drv_edp_rx.c | 15 ++++ src/driver/source/hal_edp_rx.c | 16 ++-- src/include/board_init.h | 46 ++++++++++ src/include/hal_edp_rx.h | 42 ++++++++-- 8 files changed, 282 insertions(+), 57 deletions(-) create mode 100644 src/driver/include/drv_edp_rx.h create mode 100644 src/driver/source/drv_edp_rx.c create mode 100644 src/include/board_init.h diff --git a/src/code/core_main.c b/src/code/core_main.c index 0fbc640..d35677d 100644 --- a/src/code/core_main.c +++ b/src/code/core_main.c @@ -1,7 +1,23 @@ #include "la_config.h" #include "hal_edp_rx.h" -RX_CB_Handle rx_cb_handle = {0}; +/********************RX 基本参数配置*******************/ +/* 输入帧结构 */ +#define INPUT_H_ACTIVE (1080) +#define INPUT_HFP (1080) +#define INPUT_V_ACTIVE (1080) +#define INPUT_VS (1080) +#define INPUT_VBP (1080) + +/* 输出帧结构 */ +#define OUTPUT_H_ACTIVE (1080) +#define OUTPUT_HS (1080) +#define OUTPUT_HBP (1080) +#define OUTPUT_V_ACTIVE (1080) +#define OUTPUT_VS (1080) +#define OUTPUT_VBP (1080) +#define OUTPUT_VFP (1080) +/*****************************************************/ /* SDP更新回调,用于获取second data packet */ void ap_set_backlight(SDP_Info sdp_info) @@ -28,6 +44,32 @@ RX_CB_Handle rx_cb_tabel = {ap_set_display_on ,false}, }; +/** +* @brief rx 初始化 +* @param none +* @retval none +*/ +static void app_rx_init(void) +{ + hal_rx_ctrl_handle rx_ctrl_handle = {0}; + /* 配置参数 */ + rx_ctrl_handle.base_info.hfp_in = INPUT_HFP; + rx_ctrl_handle.base_info.hact_in = INPUT_H_ACTIVE; + rx_ctrl_handle.base_info.vs_in = INPUT_VS; + rx_ctrl_handle.base_info.vbp_in = INPUT_VBP; + rx_ctrl_handle.base_info.vact_in = INPUT_V_ACTIVE; + rx_ctrl_handle.base_info.hs_post = OUTPUT_HS; + rx_ctrl_handle.base_info.hbp_post = OUTPUT_HBP; + rx_ctrl_handle.base_info.hact_post = OUTPUT_H_ACTIVE; + rx_ctrl_handle.base_info.vfp_post = OUTPUT_VFP; + rx_ctrl_handle.base_info.vs_post = OUTPUT_VS; + rx_ctrl_handle.base_info.vbp_post = OUTPUT_VBP; + rx_ctrl_handle.base_info.vact_post = OUTPUT_V_ACTIVE; + rx_ctrl_handle.rx_cb = &rx_cb_tabel; + + hal_rx_ctrl_init(rx_ctrl_handle); +} + const DPCD_Packet dpcd_packet_table[] = { //dprx_DPCD_16PM @@ -225,8 +267,8 @@ void main(void) { //------------------------------w818 && ddic initial... ini(); + app_rx_init(); hal_edp_rx_dpcd_init(dpcd_packet_table, sizeof(dpcd_packet_table)); - hal_edp_rx_cb_init(&rx_cb_tabel); gpio_init(); Sys_Matchine_Init(); //------------------------------interrupt initial.... diff --git a/src/code/project_case/RM692H5_120HZ_DSC3_1/ini.c b/src/code/project_case/RM692H5_120HZ_DSC3_1/ini.c index cf79b96..013f22d 100644 --- a/src/code/project_case/RM692H5_120HZ_DSC3_1/ini.c +++ b/src/code/project_case/RM692H5_120HZ_DSC3_1/ini.c @@ -92,42 +92,42 @@ extern void ini(void) wr_cfgreg(0xE80C, 0x00); // wr_cfgreg(0xE80D, 0xC3); // - //frambuff-porch +// //frambuff-porch - wr_cfgreg(0xE81C,0x05); // - wr_cfgreg(0xE81D,0x28); // - wr_cfgreg(0xE81E,0x0B); // - wr_cfgreg(0xE81F,0x34); // - wr_cfgreg(0xE820,0x00); // - wr_cfgreg(0xE821,0x48); // - wr_cfgreg(0xE822,0x00); // - wr_cfgreg(0xE823,0x0A); // - wr_cfgreg(0xE824,0x00); // - wr_cfgreg(0xE825,0x60); // - wr_cfgreg(0xE826,0x00); // - wr_cfgreg(0xE827,0x20); // - wr_cfgreg(0xE828,0x02); // - wr_cfgreg(0xE829,0x14); // -//--scaler-porch - wr_cfgreg(0xE80E,0x05); // - wr_cfgreg(0xE80F,0x00); // - wr_cfgreg(0xE810,0x0A); // - wr_cfgreg(0xE811,0xF0); // - wr_cfgreg(0xE812,0x14); // - wr_cfgreg(0xE813,0x00); // - wr_cfgreg(0xE814,0x20); // - wr_cfgreg(0xE815,0x00); // - wr_cfgreg(0xE816,0xA8); // - wr_cfgreg(0xE817,0x02); // - wr_cfgreg(0xE818,0x00); // - wr_cfgreg(0xE819,0x0A); // - wr_cfgreg(0xE81A,0x00); // - wr_cfgreg(0xE81B,0x46); // +// wr_cfgreg(0xE81C,0x05); // +// wr_cfgreg(0xE81D,0x28); // +// wr_cfgreg(0xE81E,0x0B); // +// wr_cfgreg(0xE81F,0x34); // +// wr_cfgreg(0xE820,0x00); // +// wr_cfgreg(0xE821,0x48); // +// wr_cfgreg(0xE822,0x00); // +// wr_cfgreg(0xE823,0x0A); // +// wr_cfgreg(0xE824,0x00); // +// wr_cfgreg(0xE825,0x60); // +// wr_cfgreg(0xE826,0x00); // +// wr_cfgreg(0xE827,0x20); // +// wr_cfgreg(0xE828,0x02); // +// wr_cfgreg(0xE829,0x14); // +// //--scaler-porch +// wr_cfgreg(0xE80E,0x05); // +// wr_cfgreg(0xE80F,0x00); // +// wr_cfgreg(0xE810,0x0A); // +// wr_cfgreg(0xE811,0xF0); // +// wr_cfgreg(0xE812,0x14); // +// wr_cfgreg(0xE813,0x00); // +// wr_cfgreg(0xE814,0x20); // +// wr_cfgreg(0xE815,0x00); // +// wr_cfgreg(0xE816,0xA8); // +// wr_cfgreg(0xE817,0x02); // +// wr_cfgreg(0xE818,0x00); // +// wr_cfgreg(0xE819,0x0A); // +// wr_cfgreg(0xE81A,0x00); // +// wr_cfgreg(0xE81B,0x46); // - wr_cfgreg(0xE82A, 0x05); // - wr_cfgreg(0xE82B, 0x28); // - wr_cfgreg(0xE82C, 0x0B); // - wr_cfgreg(0xE82D, 0x34); // +// wr_cfgreg(0xE82A, 0x05); // +// wr_cfgreg(0xE82B, 0x28); // +// wr_cfgreg(0xE82C, 0x0B); // +// wr_cfgreg(0xE82D, 0x34); // wr_cfgreg(0xe82e, 0x05);//hact after pixelmap wr_cfgreg(0xe82f, 0x00); diff --git a/src/driver/include/drv_edp_rx.h b/src/driver/include/drv_edp_rx.h new file mode 100644 index 0000000..da3156c --- /dev/null +++ b/src/driver/include/drv_edp_rx.h @@ -0,0 +1,84 @@ +/******************************************************************************* +* File: drv_edp_rx.h +* Description: edp rx椹卞姩灞 +* Version: V1.0 +* Date: 2026-3-13 +* Author: lyp + *******************************************************************************/ + +#ifndef __DRV_EDP_RX_H__ +#define __DRV_EDP_RX_H__ + +#include "typedef.h" +#include "define.h" +#include +#include "la_config.h" + +#ifndef EDP_RX_BASE +#define EDP_RX_BASE (0x80000000) +#endif + +#define EDP_RX ((EDP_RX_REG *)EDP_RX_BASE) + +typedef struct _EDP_RX_REG +{ + __I uint32_t sdp ; + __I uint32_t fpm ; + __I uint32_t dbv ; + __I uint32_t no_operation ; + + __I uint32_t reserved1 ; + __I uint32_t reserved2 ; + __I uint32_t reserved3 ; + __I uint32_t reserved4 ; + __I uint32_t reserved5 ; + + __I uint32_t err_flag ; + __I uint32_t aux_command ; + __I uint32_t aux_data0 ; + __I uint32_t aux_data4 ; + __I uint32_t aux_data8 ; + __I uint32_t aux_data12 ; + + __IO uint32_t edid_data0 ; + __IO uint32_t edid_data4 ; + __IO uint32_t edid_data8 ; + __IO uint32_t edid_data12 ; + __IO uint32_t edid_ack ; + __IO uint32_t dprx_interface_set ; + __O uint32_t aux_irq_clear ; + __IO uint32_t aux_irq_set ; + __IO uint32_t write_cco_trim_out ; + __I uint32_t read_cco_trim_in0 ; + __I uint32_t read_cco_trim_in1 ; + __IO uint32_t write_oscal_out ; + __I uint32_t read_oscal_in ; + __IO uint32_t write_cco_set0 ; + __IO uint32_t write_cco_set1 ; + __IO uint32_t write_cco_set2 ; + __IO uint32_t write_cco_set3 ; + __IO uint32_t write_cco_set4 ; + __IO uint32_t write_cco_set5 ; + __IO uint32_t write_cco_set6 ; +}EDP_RX_REG; + +/** + * @brief 涓婁綅鏈哄鐞嗗畬鐨勬暟鎹 + * @note init_address鏄瘎瀛樺櫒鍦板潃 + * init_value鏄瘎瀛樺櫒鍊 + */ +typedef struct _Board_Init +{ + uint32_t init_address; + uint8_t init_value; +}Board_Init; + +/** +* @brief 鍒濆鍖栨澘瀛愰厤缃 +* @param table_address: 涓婁綅鏈烘彁渚涚殑鍒濆鍖栨暟鎹〃澶 +* @param table_address: 涓婁綅鏈烘彁渚涚殑鏁版嵁琛ㄩ暱搴 +* @retval none +*/ +void drv_init_board(const Board_Init *table_address, uint32_t table_size); + +#endif \ No newline at end of file diff --git a/src/driver/include/drv_mipi_tx.h b/src/driver/include/drv_mipi_tx.h index eea7881..2623b0f 100644 --- a/src/driver/include/drv_mipi_tx.h +++ b/src/driver/include/drv_mipi_tx.h @@ -22,17 +22,17 @@ typedef struct _MIPI_TX_PORT0_REG { - __O uint32_t write_data ; - __IO uint8_t tx_enable ; - __IO uint8_t tx_control_L ; - __IO uint8_t tx_control_H ; - __I uint8_t tx_state ; - __IO uint32_t rd_lp_rx_data ; - __IO uint32_t rd_lp_rx_ecc ; - __O uint32_t fifo_set ; - __I uint32_t ISR ; - __IO uint32_t IMR ; - __O uint32_t ICR ; + __O uint32_t write_data ; + __IO uint8_t tx_enable ; + __IO uint8_t tx_control_L ; + __IO uint8_t tx_control_H ; + __I uint8_t tx_state ; + __IO uint32_t rd_lp_rx_data ; + __IO uint32_t rd_lp_rx_ecc ; + __O uint32_t fifo_set ; + __I uint32_t ISR ; + __IO uint32_t IMR ; + __O uint32_t ICR ; }MIPI_TX_PORT0_REG; diff --git a/src/driver/source/drv_edp_rx.c b/src/driver/source/drv_edp_rx.c new file mode 100644 index 0000000..10876c4 --- /dev/null +++ b/src/driver/source/drv_edp_rx.c @@ -0,0 +1,15 @@ +#include "drv_edp_rx.h" + +/** +* @brief 鍒濆鍖栨澘瀛愰厤缃 +* @param table_address: 涓婁綅鏈烘彁渚涚殑鍒濆鍖栨暟鎹〃澶 +* @param table_address: 涓婁綅鏈烘彁渚涚殑鏁版嵁闀垮害 +* @retval none +*/ +void drv_init_board(const Board_Init *table_address, uint32_t table_size) +{ + for(uint32_t i = 0; i < (table_size / sizeof(Board_Init)); i++) + { + wr_cfgreg(table_address[i].init_address,table_address[i].init_value); + } +} \ No newline at end of file diff --git a/src/driver/source/hal_edp_rx.c b/src/driver/source/hal_edp_rx.c index 6381255..7a0f7aa 100644 --- a/src/driver/source/hal_edp_rx.c +++ b/src/driver/source/hal_edp_rx.c @@ -7,8 +7,12 @@ *******************************************************************************/ #include "hal_edp_rx.h" +#include "drv_edp_rx.h" #include "typedef.h" #include "define.h" +#include "board_init.h"//涓婁綅鏈虹敓鎴愮殑鏂囦欢 + +#define SET_DPCD(dpcd_address, dpcd_value) (write_addr_UINT8(BASE_ADDR_DPCD + dpcd_address, dpcd_value)) #define EDP_INPUT_3_51Gbps //EDP_INPUT_3_51Gbps #define EDP_TRAIN_BY_TPS1 //濡傛灉TPS1 澶т簬15us,鍚敤姝ゅ畯锛屼竴鑸墜鏈哄簲鐢ㄥ惎鍔紝ipad搴旂敤涓嶅惎鐢 @@ -177,13 +181,15 @@ static void dprx_load_edp_bit_rate_cco(void) } /** -* @brief 娉ㄥ唽rx鐩稿叧鍥炶皟 -* @param RX_CB_Handle: rx鍥炶皟鍙傛暟缁撴瀯浣 +* @brief 娉ㄥ唽rx鐩稿叧鍙傛暟 +* @param rx_ctrl_handle: rx鍙傛暟缁撴瀯浣 * @retval true-娉ㄥ唽鎴愬姛锛沠alse-娉ㄥ唽澶辫触 */ -bool hal_edp_rx_cb_init(RX_CB_Handle *rx_cb_handle) +bool hal_rx_ctrl_init(hal_rx_ctrl_handle rx_ctrl_handle) { - + drv_init_board(board_init_table, sizeof(board_init_table)); + + return true; } bool hal_edp_rx_dpcd_init(const DPCD_Packet *table_address, uint32_t table_size) @@ -196,7 +202,7 @@ bool hal_edp_rx_dpcd_init(const DPCD_Packet *table_address, uint32_t table_size) for(uint32_t i = 0; i < (table_size / sizeof(DPCD_Packet)); i++) { - write_addr_UINT8(BASE_ADDR_DPCD + table_address[i].dpcd_address, table_address[i].dpcd_value); + SET_DPCD(table_address[i].dpcd_address, table_address[i].dpcd_value); } dprx_load_edp_bit_rate_cco(); diff --git a/src/include/board_init.h b/src/include/board_init.h new file mode 100644 index 0000000..6ddc903 --- /dev/null +++ b/src/include/board_init.h @@ -0,0 +1,46 @@ +/*璇ユ枃浠舵墦鍖呭悗涓嶄細鐣欏瓨锛屼笂浣嶆満鐐瑰嚮缂栬瘧鏃剁敓鎴愶紝缂栬瘧缁撴潫鍒犻櫎*/ +#ifndef __BOARD_INIT_H__ +#define __BOARD_INIT_H__ +#include "drv_edp_rx.h" + +const Board_Init board_init_table[] = +{ + //frambuff-porch + {0xE81C,0x05},// + {0xE81D,0x28},// + {0xE81E,0x0B},// + {0xE81F,0x34},// + {0xE820,0x00},// + {0xE821,0x48},// + {0xE822,0x00},// + {0xE823,0x0A},// + {0xE824,0x00},// + {0xE825,0x60},// + {0xE826,0x00},// + {0xE827,0x20},// + {0xE828,0x02},// + {0xE829,0x14},// + + //--scaler-porch + {0xE80E,0x05},// + {0xE80F,0x00},// + {0xE810,0x0A},// + {0xE811,0xF0},// + {0xE812,0x14},// + {0xE813,0x00},// + {0xE814,0x20},// + {0xE815,0x00},// + {0xE816,0xA8},// + {0xE817,0x02},// + {0xE818,0x00},// + {0xE819,0x0A},// + {0xE81A,0x00},// + {0xE81B,0x46},// + + {0xE82A, 0x05},// + {0xE82B, 0x28},// + {0xE82C, 0x0B},// + {0xE82D, 0x34},// +}; + +#endif \ No newline at end of file diff --git a/src/include/hal_edp_rx.h b/src/include/hal_edp_rx.h index 9f4d803..f225158 100644 --- a/src/include/hal_edp_rx.h +++ b/src/include/hal_edp_rx.h @@ -69,7 +69,6 @@ typedef struct _Sleep_Handle * @brief 鍞ら啋鍥炶皟娉ㄥ唽 * @note wake_cb鏄敜閱掑洖璋冨湴鍧 * execute_mode鏄墽琛屾柟寮忥細true-鍦ㄤ腑鏂噷绔嬪嵆鎵ц,false-鍔犲叆闃熷垪寮傛鎵ц - * 闇鍦ㄤ笂浣嶆満璁剧疆鍩烘澘reset鑴氭帴鍦ㄨ姱鐗囧叿浣撶鑴 */ typedef struct _WAKE_Handle { @@ -78,7 +77,7 @@ typedef struct _WAKE_Handle }WAKE_Handle; /** - * @brief rx鐩稿叧鍔熻兘鍥炶皟 + * @brief rx鍥炶皟 * @note */ typedef struct _RX_CB_Handle @@ -89,11 +88,44 @@ typedef struct _RX_CB_Handle }RX_CB_Handle; /** -* @brief 娉ㄥ唽rx鐩稿叧鍥炶皟 -* @param RX_CB_Handle: rx鍥炶皟鍙傛暟缁撴瀯浣 +* @brief scaler鍙傛暟 +* @param none +* @retval none +*/ +typedef struct _scaler_base_info +{ + uint32_t hfp_in; + uint32_t hact_in; + uint32_t vs_in; + uint32_t vbp_in; + uint32_t vact_in; + + uint32_t hs_post; + uint32_t hbp_post; + uint32_t hact_post; + uint32_t vfp_post; + uint32_t vs_post; + uint32_t vbp_post; + uint32_t vact_post; +}scaler_base_info; + +/** +* @brief rx 鍒濆鍖 +* @param none +* @retval none +*/ +typedef struct _hal_rx_ctrl_handle +{ + scaler_base_info base_info; /*sclaing up杞崲鍩烘湰淇℃伅 */ + RX_CB_Handle *rx_cb; /*rx鍥炶皟*/ +}hal_rx_ctrl_handle; + +/** +* @brief 娉ㄥ唽rx鐩稿叧鍙傛暟 +* @param rx_ctrl_handle: rx鍙傛暟缁撴瀯浣 * @retval true-娉ㄥ唽鎴愬姛锛沠alse-娉ㄥ唽澶辫触 */ -bool hal_edp_rx_cb_init(RX_CB_Handle *rx_cb_handle); +bool hal_rx_ctrl_init(hal_rx_ctrl_handle rx_ctrl_handle); /** * @brief 鍒濆鍖朌PCD瀵勫瓨鍣