eew_7QI3Yq 发表于 2024-8-24 22:58

【瑞萨RA8D1开发板,基于M85内核的图形MCU测评】+MIPI接口屏幕测试

<div class='showpostmsg'><p>Mipi接口实际要是比我们的RGB接口复杂多了,关键目前我们MIPI接口就2lane导致很多的屏幕是选择不了的,所以官方这种用MIPI已经是为我们测试过了。接下来就跟着我们踩坑吧。</p>

<p > &nbsp;</p>

<p >我们先看下框图,实际就是在GLCDC的基础上拓展了一个MIPI芯片,所以开始初始化就得初始化我们的GLCDC的管脚,所以这些管脚外接功能就不能使用了,实际就是内部连接了。</p>

<p > &nbsp;</p>

<p >实际我们初始化的,我还是只初始化了我们引出的管脚,其他的管脚我未使用,我们其实无所谓这些,到mipi这边简化了。我理解565,666,888这些都能驱动屏幕。</p>

<p >之后还是要注意初始化SDRAM不然例程还是会有问题的。</p>

<p > &nbsp;</p>

<p >踩坑第一就是这个电源电压,我理解的一般MIPI屏幕都是1.8V通信,所以我先接的1.8V的电阻,然后不亮,才发现是要接3.3V。</p>

<p > &nbsp;</p>

<p >厂家原理图里面给的接口是3.3V。</p>

<p >接下来还是要修改里面的内容。首先还是得要厂家的驱屏参数。</p>

<p > &nbsp;</p>

<p >输入用的RGB888模式。</p>

<p > &nbsp;</p>

<p >输出参数需要对应屏幕参数。</p>

<p > &nbsp;</p>

<p >输出这边我们就不用管大小端了,模式注意下我们最高666输出,目前根据屏幕配置的RGB565。</p>

<p > &nbsp;</p>

<p >Mipi的配置简单点,基本都是默认,然后注意自己生成了一个回调函数,我们需要进行编写。</p>

<p >原本官方例程给了一个低功耗的操作,我这里直接删除,所以魔改了很多。</p>

<p > &nbsp;</p>

<p >然后就是配置这里,我们需要问屏厂要这个资料,所以说配置麻烦的很,尤其是这个你要对比多次在你驱动不起来的情况下。</p>

<p > &nbsp;</p>

<p >那个回调函数就是用来确定配置表是否发送到屏了。</p>

<p >成功驱动后的样子给看下:</p>

<p > &nbsp;</p>

<p >后面还有摄像头接口,屏幕也是加了触摸,我们还可以做很多东西。</p>

<p >主要代码给下:</p>

<pre>
<code>/***********************************************************************************************************************
* File Name    : mipi_dsi_ep.c
* Description: Contains data structures and functions setup LCD used in hal_entry.c.
**********************************************************************************************************************/
/***********************************************************************************************************************
* Copyright (c) 2023 - 2024 Renesas Electronics Corporation and/or its affiliates
*
* SPDX-License-Identifier: BSD-3-Clause
***********************************************************************************************************************/
//#include "gt911.h"
#include "mipi_dsi_ep.h"
#include "r_mipi_dsi.h"
#include "hal_data.h"
//#include "common_utils.h"
#include "board_sdram.h"


#define RESET_VALUE             (0x00)
/*******************************************************************************************************************//**
* @addtogroup mipi_dsi_ep
* @{
**********************************************************************************************************************/

/* User defined functions */
static void display_draw (uint32_t * framebuffer);
//static uint8_t mipi_dsi_set_display_time (void);
//static uint8_t process_input_data(void);
//void handle_error (fsp_err_t err,const char * err_str);
//void touch_screen_reset(void);
//static fsp_err_t wait_for_mipi_dsi_event (mipi_dsi_phy_status_t event);
//static void mipi_dsi_ulps_enter(void);
//static void mipi_dsi_ulps_exit(void);

/* Variables to store resolution information */
uint16_t g_hz_size, g_vr_size;
/* Variables used for buffer usage */
uint32_t g_buffer_size, g_hstride;
uint32_t * gp_single_buffer = NULL;
uint32_t * gp_double_buffer = NULL;
uint32_t * gp_frame_buffer= NULL;
uint8_t read_data            = RESET_VALUE;
uint16_t period_sec         = RESET_VALUE;
volatile mipi_dsi_phy_status_t g_phy_status;
//timer_info_t timer_info = { .clock_frequency = RESET_VALUE, .count_direction = RESET_VALUE, .period_counts = RESET_VALUE };
volatile bool g_vsync_flag = RESET_FLAG;
volatile bool g_message_sent = RESET_FLAG;
volatile bool g_ulps_flag = RESET_FLAG;
volatile bool g_irq_state = RESET_FLAG;
volatile bool g_timer_overflow = RESET_FLAG;
//coord_t touch_coordinates;

/* This table of commands was adapted from sample code provided by FocusLCD
* Page Link: https://focuslcds.com/product/4-5-tft-display-capacitive-tp-e45ra-mw276-c/
* File Link: https://focuslcds.com/content/E45RA-MW276-C_init_code.txt
*/

const lcd_table_setting_t g_lcd_init_focuslcd[] =
{
{6,{0xFF, 0x77, 0x01, 0x00, 0x00, 0x13}, MIPI_DSI_CMD_ID_DCS_LONG_WRITE,      MIPI_DSI_CMD_FLAG_LOW_POWER},      // Change to Page 1 CMD
{2,{0xEF, 0x08},                         MIPI_DSI_CMD_ID_DCS_SHORT_WRITE_1_PARAM, MIPI_DSI_CMD_FLAG_LOW_POWER},      // Output SDA
// {2,{0x21, 0x01},                         MIPI_DSI_CMD_ID_DCS_SHORT_WRITE_1_PARAM, MIPI_DSI_CMD_FLAG_LOW_POWER},      // DE = 1 Active

{6,{0xFF, 0x77, 0x01, 0x00, 0x00, 0x10}, MIPI_DSI_CMD_ID_DCS_LONG_WRITE,      MIPI_DSI_CMD_FLAG_LOW_POWER},

{3,{0xC0, 0x63, 0x00},                   MIPI_DSI_CMD_ID_DCS_LONG_WRITE,         MIPI_DSI_CMD_FLAG_LOW_POWER},      // Resolution setting 480 X 800
{3,{0xC1, 0x10, 0x02},                   MIPI_DSI_CMD_ID_DCS_LONG_WRITE, MIPI_DSI_CMD_FLAG_LOW_POWER},      // Inversion setting
{3,{0xC2, 0x31, 0x02},                         MIPI_DSI_CMD_ID_DCS_LONG_WRITE, MIPI_DSI_CMD_FLAG_LOW_POWER},      // BT 15

{2,{0xCC, 0x10},                         MIPI_DSI_CMD_ID_DCS_SHORT_WRITE_1_PARAM, MIPI_DSI_CMD_FLAG_LOW_POWER},      // VGL=DDVDL+VCL-VCIP,VGH=2DDVDH-DDVDL

{17,{0xB0, 0xC0, 0x0C, 0x92, 0x0C, 0x10, 0x05, 0x02, 0x0D, 0x07, 0x21, 0x04, 0x53, 0x11, 0x6A, 0x32, 0x1F},                         MIPI_DSI_CMD_ID_DCS_LONG_WRITE, MIPI_DSI_CMD_FLAG_LOW_POWER},      // avdd +5.2v,avee-5.2v
{17,{0xB1, 0xC0, 0x87, 0xCF, 0x0C, 0x10, 0x06, 0x00, 0x03, 0x08, 0x1D, 0x06, 0x54, 0x12, 0xE6, 0xEC, 0x0F},                         MIPI_DSI_CMD_ID_DCS_LONG_WRITE, MIPI_DSI_CMD_FLAG_LOW_POWER},      // avdd +5.2v,avee-5.2v

{6,{0xFF, 0x77, 0x01, 0x00, 0x00, 0x11},                         MIPI_DSI_CMD_ID_DCS_LONG_WRITE, MIPI_DSI_CMD_FLAG_LOW_POWER},      // VGL=DDVDL+VCL-VCIP,VGH=2DDVDH-DDVDL

{2,{0xB0, 0x5D},                         MIPI_DSI_CMD_ID_DCS_SHORT_WRITE_1_PARAM, MIPI_DSI_CMD_FLAG_LOW_POWER},      // Set VGH clamp level
{2,{0xB1, 0x62},                         MIPI_DSI_CMD_ID_DCS_SHORT_WRITE_1_PARAM, MIPI_DSI_CMD_FLAG_LOW_POWER},      // Set VGL clamp level
{2,{0xB2, 0x82},                         MIPI_DSI_CMD_ID_DCS_SHORT_WRITE_1_PARAM, MIPI_DSI_CMD_FLAG_LOW_POWER},      // Set VREG1
{2,{0xB3, 0x80},                         MIPI_DSI_CMD_ID_DCS_SHORT_WRITE_1_PARAM, MIPI_DSI_CMD_FLAG_LOW_POWER},      // Set VREG2
{2,{0xB5, 0x42},                         MIPI_DSI_CMD_ID_DCS_SHORT_WRITE_1_PARAM, MIPI_DSI_CMD_FLAG_LOW_POWER},      // Flicker MSB
{2,{0xB7, 0x85},                         MIPI_DSI_CMD_ID_DCS_SHORT_WRITE_1_PARAM, MIPI_DSI_CMD_FLAG_LOW_POWER},      // Flicker LSB
{2,{0xB8, 0x20},                         MIPI_DSI_CMD_ID_DCS_SHORT_WRITE_1_PARAM, MIPI_DSI_CMD_FLAG_LOW_POWER},      // Timing Adjust
{2,{0xC0, 0x09},                         MIPI_DSI_CMD_ID_DCS_SHORT_WRITE_1_PARAM, MIPI_DSI_CMD_FLAG_LOW_POWER},      // Timing Adjust
{2,{0xC1, 0x78},                         MIPI_DSI_CMD_ID_DCS_SHORT_WRITE_1_PARAM, MIPI_DSI_CMD_FLAG_LOW_POWER},      // Timing Adjust
{2,{0xC2, 0x78},                         MIPI_DSI_CMD_ID_DCS_SHORT_WRITE_1_PARAM, MIPI_DSI_CMD_FLAG_LOW_POWER},      // Timing Adjust
{2,{0xD0, 0x88},                         MIPI_DSI_CMD_ID_DCS_SHORT_WRITE_1_PARAM, MIPI_DSI_CMD_FLAG_LOW_POWER},      // Positive Gamma Control 1
{2,{0xEE, 0x42},                         MIPI_DSI_CMD_ID_DCS_SHORT_WRITE_1_PARAM, MIPI_DSI_CMD_FLAG_LOW_POWER},      // Positive Gamma Control 2
{100,   {0},                                 MIPI_DSI_DISPLAY_CONFIG_DATA_DELAY_FLAG,   (mipi_dsi_cmd_flag_t)0},         // Delay 5msec

{4,{0xE0, 0x00, 0x00, 0x02},                         MIPI_DSI_CMD_ID_DCS_LONG_WRITE, MIPI_DSI_CMD_FLAG_LOW_POWER},      // Positive Gamma Control 3
{12,{0xE1, 0x04, 0xA0, 0x06, 0xA0, 0x05, 0xA0, 0x07, 0xA0, 0x00, 0x44, 0x44},                         MIPI_DSI_CMD_ID_DCS_LONG_WRITE, MIPI_DSI_CMD_FLAG_LOW_POWER},      // Positive Gamma Control 4
{13,{0xE2, 0x00, 0x00, 0x33, 0x33, 0x01, 0xA0, 0x00, 0x00, 0x01, 0xA0, 0x00, 0x00},                         MIPI_DSI_CMD_ID_DCS_LONG_WRITE, MIPI_DSI_CMD_FLAG_LOW_POWER},      // Positive Gamma Control 4
{5,{0xE3, 0x00, 0x00, 0x33, 0x33},                         MIPI_DSI_CMD_ID_DCS_LONG_WRITE, MIPI_DSI_CMD_FLAG_LOW_POWER},      // Positive Gamma Control 5
{3,{0xE4, 0x44, 0x44},                         MIPI_DSI_CMD_ID_DCS_LONG_WRITE, MIPI_DSI_CMD_FLAG_LOW_POWER},      // Positive Gamma Control 6
{17,{0xE5, 0x0C, 0x30, 0xA0, 0xA0, 0x0E, 0x32, 0xA0, 0xA0, 0x08, 0x2C, 0xA0, 0xA0, 0x0A, 0x2E, 0xA0, 0xA0},                         MIPI_DSI_CMD_ID_DCS_LONG_WRITE, MIPI_DSI_CMD_FLAG_LOW_POWER},      // Positive Gamma Control 7
{5,{0xE6, 0x00, 0x00, 0x33, 0x33},                         MIPI_DSI_CMD_ID_DCS_LONG_WRITE, MIPI_DSI_CMD_FLAG_LOW_POWER},      // Positive Gamma Control 8
{3,{0xE7, 0x44, 0x44},                         MIPI_DSI_CMD_ID_DCS_LONG_WRITE, MIPI_DSI_CMD_FLAG_LOW_POWER},      // Positive Gamma Control 9
{17,{0xE8, 0x0D, 0x31, 0xA0, 0xA0, 0x0F, 0x33, 0xA0, 0xA0, 0x09, 0x2D, 0xA0, 0xA0, 0x0B, 0x2F, 0xA0, 0xA0},                         MIPI_DSI_CMD_ID_DCS_LONG_WRITE, MIPI_DSI_CMD_FLAG_LOW_POWER},      // Positive Gamma Control 10
{7,{0xEB, 0x00, 0x01, 0xE4, 0x44, 0x88, 0x00},                         MIPI_DSI_CMD_ID_DCS_LONG_WRITE, MIPI_DSI_CMD_FLAG_LOW_POWER},      // Positive Gamma Control 11
{17,{0xED, 0xFF, 0xF5, 0x47, 0x6F, 0x0B, 0xA1, 0xA2, 0xBF, 0xFB, 0x2A, 0x1A, 0xB0, 0xF6, 0x74, 0x5F, 0xFF},                         MIPI_DSI_CMD_ID_DCS_LONG_WRITE, MIPI_DSI_CMD_FLAG_LOW_POWER},      // Positive Gamma Control 12
{7,{0xEF, 0x08, 0x08, 0x08, 0x40, 0x3F, 0x64},                         MIPI_DSI_CMD_ID_DCS_LONG_WRITE, MIPI_DSI_CMD_FLAG_LOW_POWER},      // Positive Gamma Control 13
{6,{0xFF, 0x77, 0x01, 0x00, 0x00, 0x13},                         MIPI_DSI_CMD_ID_DCS_LONG_WRITE, MIPI_DSI_CMD_FLAG_LOW_POWER},      // Positive Gamma Control 14
{3,{0xE8, 0x00, 0x0E},                         MIPI_DSI_CMD_ID_DCS_LONG_WRITE, MIPI_DSI_CMD_FLAG_LOW_POWER},
{6,{0xFF, 0x77, 0x01, 0x00, 0x00, 0x00},                         MIPI_DSI_CMD_ID_DCS_LONG_WRITE, MIPI_DSI_CMD_FLAG_LOW_POWER},
{2,{0x11, 0x00},                         MIPI_DSI_CMD_ID_DCS_SHORT_WRITE_0_PARAM, MIPI_DSI_CMD_FLAG_LOW_POWER},      // Positive Gamma Control 15
{200,   {0},                                 MIPI_DSI_DISPLAY_CONFIG_DATA_DELAY_FLAG,   (mipi_dsi_cmd_flag_t)0},         // Delay 5msec

{6,{0xFF, 0x77, 0x01, 0x00, 0x00, 0x13},                         MIPI_DSI_CMD_ID_DCS_LONG_WRITE, MIPI_DSI_CMD_FLAG_LOW_POWER},

{3,{0xE8, 0x00, 0x0C},                         MIPI_DSI_CMD_ID_DCS_LONG_WRITE, MIPI_DSI_CMD_FLAG_LOW_POWER},      // Negative Gamma Correction 1
{10,   {0},                                 MIPI_DSI_DISPLAY_CONFIG_DATA_DELAY_FLAG,   (mipi_dsi_cmd_flag_t)0},         // Delay 5msec
{3,{0xE8, 0x00, 0x00},                         MIPI_DSI_CMD_ID_DCS_LONG_WRITE, MIPI_DSI_CMD_FLAG_LOW_POWER},      // Negative Gamma Correction 1

{6,{0xFF, 0x77, 0x01, 0x00, 0x00, 0x00},                         MIPI_DSI_CMD_ID_DCS_LONG_WRITE, MIPI_DSI_CMD_FLAG_LOW_POWER},      // Negative Gamma Correction 1

{2,{0x3A, 0x70},                         MIPI_DSI_CMD_ID_DCS_SHORT_WRITE_1_PARAM, MIPI_DSI_CMD_FLAG_LOW_POWER},      // Negative Gamma Correction 1
{2,{0x29, 0x00},                         MIPI_DSI_CMD_ID_DCS_SHORT_WRITE_0_PARAM,       MIPI_DSI_CMD_FLAG_LOW_POWER},// Display on
{50,   {0},                                 MIPI_DSI_DISPLAY_CONFIG_DATA_DELAY_FLAG,   (mipi_dsi_cmd_flag_t)0},

{0x00, {0},                              MIPI_DSI_DISPLAY_CONFIG_DATA_END_OF_TABLE, (mipi_dsi_cmd_flag_t)0},         // End of table

// {2,{0xc1, 0x04},                         MIPI_DSI_CMD_ID_DCS_SHORT_WRITE_1_PARAM, MIPI_DSI_CMD_FLAG_LOW_POWER},      // Negative Gamma Correction 2
// {2,{0xc2, 0x0b},                         MIPI_DSI_CMD_ID_DCS_SHORT_WRITE_1_PARAM, MIPI_DSI_CMD_FLAG_LOW_POWER},      // Negative Gamma Correction 3
// {2,{0xc3, 0x0f},                         MIPI_DSI_CMD_ID_DCS_SHORT_WRITE_1_PARAM, MIPI_DSI_CMD_FLAG_LOW_POWER},      // Negative Gamma Correction 4
// {2,{0xc4, 0x09},                         MIPI_DSI_CMD_ID_DCS_SHORT_WRITE_1_PARAM, MIPI_DSI_CMD_FLAG_LOW_POWER},      // Negative Gamma Correction 5
// {2,{0xc5, 0x18},                         MIPI_DSI_CMD_ID_DCS_SHORT_WRITE_1_PARAM, MIPI_DSI_CMD_FLAG_LOW_POWER},      // Negative Gamma Correction 6
// {2,{0xc6, 0x07},                         MIPI_DSI_CMD_ID_DCS_SHORT_WRITE_1_PARAM, MIPI_DSI_CMD_FLAG_LOW_POWER},      // Negative Gamma Correction 7
// {2,{0xc7, 0x08},                         MIPI_DSI_CMD_ID_DCS_SHORT_WRITE_1_PARAM, MIPI_DSI_CMD_FLAG_LOW_POWER},      // Negative Gamma Correction 8
// {2,{0xc8, 0x05},                         MIPI_DSI_CMD_ID_DCS_SHORT_WRITE_1_PARAM, MIPI_DSI_CMD_FLAG_LOW_POWER},      // Negative Gamma Correction 9
// {2,{0xc9, 0x09},                         MIPI_DSI_CMD_ID_DCS_SHORT_WRITE_1_PARAM, MIPI_DSI_CMD_FLAG_LOW_POWER},      // Negative Gamma Correction 10
// {2,{0xca, 0x07},                         MIPI_DSI_CMD_ID_DCS_SHORT_WRITE_1_PARAM, MIPI_DSI_CMD_FLAG_LOW_POWER},      // Negative Gamma Correction 11
// {2,{0xcb, 0x05},                         MIPI_DSI_CMD_ID_DCS_SHORT_WRITE_1_PARAM, MIPI_DSI_CMD_FLAG_LOW_POWER},      // Negative Gamma Correction 12
// {2,{0xcc, 0x0c},                         MIPI_DSI_CMD_ID_DCS_SHORT_WRITE_1_PARAM, MIPI_DSI_CMD_FLAG_LOW_POWER},      // Negative Gamma Correction 13
// {2,{0xcd, 0x2d},                         MIPI_DSI_CMD_ID_DCS_SHORT_WRITE_1_PARAM, MIPI_DSI_CMD_FLAG_LOW_POWER},      // Negative Gamma Correction 14
// {2,{0xce, 0x28},                         MIPI_DSI_CMD_ID_DCS_SHORT_WRITE_1_PARAM, MIPI_DSI_CMD_FLAG_LOW_POWER},      // Negative Gamma Correction 15
// {2,{0xcf, 0x00},                         MIPI_DSI_CMD_ID_DCS_SHORT_WRITE_1_PARAM, MIPI_DSI_CMD_FLAG_LOW_POWER},      // Negative Gamma Correction 16
//
// {6,{0xFF, 0xFF, 0x98, 0x06, 0x04, 0x06}, MIPI_DSI_CMD_ID_DCS_LONG_WRITE,      MIPI_DSI_CMD_FLAG_LOW_POWER},      // Change to Page 6 CMD for GIP timing
// {2,{0x00, 0x21},                         MIPI_DSI_CMD_ID_DCS_SHORT_WRITE_1_PARAM, MIPI_DSI_CMD_FLAG_LOW_POWER},      // GIP Control 1
// {2,{0x01, 0x09},                         MIPI_DSI_CMD_ID_DCS_SHORT_WRITE_1_PARAM, MIPI_DSI_CMD_FLAG_LOW_POWER},      // GIP Control 1
// {2,{0x02, 0x00},                         MIPI_DSI_CMD_ID_DCS_SHORT_WRITE_1_PARAM, MIPI_DSI_CMD_FLAG_LOW_POWER},      // GIP Control 1
// {2,{0x03, 0x00},                         MIPI_DSI_CMD_ID_DCS_SHORT_WRITE_1_PARAM, MIPI_DSI_CMD_FLAG_LOW_POWER},      // GIP Control 1
// {2,{0x04, 0x01},                         MIPI_DSI_CMD_ID_DCS_SHORT_WRITE_1_PARAM, MIPI_DSI_CMD_FLAG_LOW_POWER},      // GIP Control 1
// {2,{0x05, 0x01},                         MIPI_DSI_CMD_ID_DCS_SHORT_WRITE_1_PARAM, MIPI_DSI_CMD_FLAG_LOW_POWER},      // GIP Control 1
// {2,{0x06, 0x80},                         MIPI_DSI_CMD_ID_DCS_SHORT_WRITE_1_PARAM, MIPI_DSI_CMD_FLAG_LOW_POWER},      // GIP Control 1
// {2,{0x07, 0x05},                         MIPI_DSI_CMD_ID_DCS_SHORT_WRITE_1_PARAM, MIPI_DSI_CMD_FLAG_LOW_POWER},      // GIP Control 1
// {2,{0x08, 0x02},                         MIPI_DSI_CMD_ID_DCS_SHORT_WRITE_1_PARAM, MIPI_DSI_CMD_FLAG_LOW_POWER},      // GIP Control 1
// {2,{0x09, 0x80},                         MIPI_DSI_CMD_ID_DCS_SHORT_WRITE_1_PARAM, MIPI_DSI_CMD_FLAG_LOW_POWER},      // GIP Control 1
// {2,{0x0a, 0x00},                         MIPI_DSI_CMD_ID_DCS_SHORT_WRITE_1_PARAM, MIPI_DSI_CMD_FLAG_LOW_POWER},      // GIP Control 1
// {2,{0x0b, 0x00},                         MIPI_DSI_CMD_ID_DCS_SHORT_WRITE_1_PARAM, MIPI_DSI_CMD_FLAG_LOW_POWER},      // GIP Control 1
// {2,{0x0c, 0x0a},                         MIPI_DSI_CMD_ID_DCS_SHORT_WRITE_1_PARAM, MIPI_DSI_CMD_FLAG_LOW_POWER},      // GIP Control 1
// {2,{0x0d, 0x0a},                         MIPI_DSI_CMD_ID_DCS_SHORT_WRITE_1_PARAM, MIPI_DSI_CMD_FLAG_LOW_POWER},      // GIP Control 1
// {2,{0x0e, 0x00},                         MIPI_DSI_CMD_ID_DCS_SHORT_WRITE_1_PARAM, MIPI_DSI_CMD_FLAG_LOW_POWER},      // GIP Control 1
// {2,{0x0f, 0x00},                         MIPI_DSI_CMD_ID_DCS_SHORT_WRITE_1_PARAM, MIPI_DSI_CMD_FLAG_LOW_POWER},      // GIP Control 1
// {2,{0x10, 0xe0},                         MIPI_DSI_CMD_ID_DCS_SHORT_WRITE_1_PARAM, MIPI_DSI_CMD_FLAG_LOW_POWER},      // GIP Control 1
// {2,{0x11, 0xe4},                         MIPI_DSI_CMD_ID_DCS_SHORT_WRITE_1_PARAM, MIPI_DSI_CMD_FLAG_LOW_POWER},      // GIP Control 1
// {2,{0x12, 0x04},                         MIPI_DSI_CMD_ID_DCS_SHORT_WRITE_1_PARAM, MIPI_DSI_CMD_FLAG_LOW_POWER},      // GIP Control 1
// {2,{0x13, 0x00},                         MIPI_DSI_CMD_ID_DCS_SHORT_WRITE_1_PARAM, MIPI_DSI_CMD_FLAG_LOW_POWER},      // GIP Control 1
// {2,{0x14, 0x00},                         MIPI_DSI_CMD_ID_DCS_SHORT_WRITE_1_PARAM, MIPI_DSI_CMD_FLAG_LOW_POWER},      // GIP Control 1
// {2,{0x15, 0xc0},                         MIPI_DSI_CMD_ID_DCS_SHORT_WRITE_1_PARAM, MIPI_DSI_CMD_FLAG_LOW_POWER},      // GIP Control 1
// {2,{0x16, 0x08},                         MIPI_DSI_CMD_ID_DCS_SHORT_WRITE_1_PARAM, MIPI_DSI_CMD_FLAG_LOW_POWER},      // GIP Control 1
// {2,{0x17, 0x00},                         MIPI_DSI_CMD_ID_DCS_SHORT_WRITE_1_PARAM, MIPI_DSI_CMD_FLAG_LOW_POWER},      // GIP Control 1
// {2,{0x18, 0x00},                         MIPI_DSI_CMD_ID_DCS_SHORT_WRITE_1_PARAM, MIPI_DSI_CMD_FLAG_LOW_POWER},      // GIP Control 1
// {2,{0x19, 0x00},                         MIPI_DSI_CMD_ID_DCS_SHORT_WRITE_1_PARAM, MIPI_DSI_CMD_FLAG_LOW_POWER},      // GIP Control 1
// {2,{0x1a, 0x00},                         MIPI_DSI_CMD_ID_DCS_SHORT_WRITE_1_PARAM, MIPI_DSI_CMD_FLAG_LOW_POWER},      // GIP Control 1
// {2,{0x1b, 0x00},                         MIPI_DSI_CMD_ID_DCS_SHORT_WRITE_1_PARAM, MIPI_DSI_CMD_FLAG_LOW_POWER},      // GIP Control 1
// {2,{0x1c, 0x00},                         MIPI_DSI_CMD_ID_DCS_SHORT_WRITE_1_PARAM, MIPI_DSI_CMD_FLAG_LOW_POWER},      // GIP Control 1
// {2,{0x1d, 0x00},                         MIPI_DSI_CMD_ID_DCS_SHORT_WRITE_1_PARAM, MIPI_DSI_CMD_FLAG_LOW_POWER},      // GIP Control 1
//
// {2,{0x20, 0x01},                         MIPI_DSI_CMD_ID_DCS_SHORT_WRITE_1_PARAM, MIPI_DSI_CMD_FLAG_LOW_POWER},      // GIP Control 2
// {2,{0x21, 0x23},                         MIPI_DSI_CMD_ID_DCS_SHORT_WRITE_1_PARAM, MIPI_DSI_CMD_FLAG_LOW_POWER},      // GIP Control 2
// {2,{0x22, 0x45},                         MIPI_DSI_CMD_ID_DCS_SHORT_WRITE_1_PARAM, MIPI_DSI_CMD_FLAG_LOW_POWER},      // GIP Control 2
// {2,{0x23, 0x67},                         MIPI_DSI_CMD_ID_DCS_SHORT_WRITE_1_PARAM, MIPI_DSI_CMD_FLAG_LOW_POWER},      // GIP Control 2
// {2,{0x24, 0x01},                         MIPI_DSI_CMD_ID_DCS_SHORT_WRITE_1_PARAM, MIPI_DSI_CMD_FLAG_LOW_POWER},      // GIP Control 2
// {2,{0x25, 0x23},                         MIPI_DSI_CMD_ID_DCS_SHORT_WRITE_1_PARAM, MIPI_DSI_CMD_FLAG_LOW_POWER},      // GIP Control 2
// {2,{0x26, 0x45},                         MIPI_DSI_CMD_ID_DCS_SHORT_WRITE_1_PARAM, MIPI_DSI_CMD_FLAG_LOW_POWER},      // GIP Control 2
// {2,{0x27, 0x67},                         MIPI_DSI_CMD_ID_DCS_SHORT_WRITE_1_PARAM, MIPI_DSI_CMD_FLAG_LOW_POWER},      // GIP Control 2
//
// {2,{0x30, 0x01},                         MIPI_DSI_CMD_ID_DCS_SHORT_WRITE_1_PARAM, MIPI_DSI_CMD_FLAG_LOW_POWER},      // GIP Control 3
// {2,{0x31, 0x11},                         MIPI_DSI_CMD_ID_DCS_SHORT_WRITE_1_PARAM, MIPI_DSI_CMD_FLAG_LOW_POWER},      // GIP Control 3
// {2,{0x32, 0x00},                         MIPI_DSI_CMD_ID_DCS_SHORT_WRITE_1_PARAM, MIPI_DSI_CMD_FLAG_LOW_POWER},      // GIP Control 3
// {2,{0x33, 0xee},                         MIPI_DSI_CMD_ID_DCS_SHORT_WRITE_1_PARAM, MIPI_DSI_CMD_FLAG_LOW_POWER},      // GIP Control 3
// {2,{0x34, 0xff},                         MIPI_DSI_CMD_ID_DCS_SHORT_WRITE_1_PARAM, MIPI_DSI_CMD_FLAG_LOW_POWER},      // GIP Control 3
// {2,{0x35, 0xcb},                         MIPI_DSI_CMD_ID_DCS_SHORT_WRITE_1_PARAM, MIPI_DSI_CMD_FLAG_LOW_POWER},      // GIP Control 3
// {2,{0x36, 0xda},                         MIPI_DSI_CMD_ID_DCS_SHORT_WRITE_1_PARAM, MIPI_DSI_CMD_FLAG_LOW_POWER},      // GIP Control 3
// {2,{0x37, 0xad},                         MIPI_DSI_CMD_ID_DCS_SHORT_WRITE_1_PARAM, MIPI_DSI_CMD_FLAG_LOW_POWER},      // GIP Control 3
// {2,{0x38, 0xbc},                         MIPI_DSI_CMD_ID_DCS_SHORT_WRITE_1_PARAM, MIPI_DSI_CMD_FLAG_LOW_POWER},      // GIP Control 3
// {2,{0x39, 0x76},                         MIPI_DSI_CMD_ID_DCS_SHORT_WRITE_1_PARAM, MIPI_DSI_CMD_FLAG_LOW_POWER},      // GIP Control 3
// {2,{0x3a, 0x67},                         MIPI_DSI_CMD_ID_DCS_SHORT_WRITE_1_PARAM, MIPI_DSI_CMD_FLAG_LOW_POWER},      // GIP Control 3
// {2,{0x3b, 0x22},                         MIPI_DSI_CMD_ID_DCS_SHORT_WRITE_1_PARAM, MIPI_DSI_CMD_FLAG_LOW_POWER},      // GIP Control 3
// {2,{0x3c, 0x22},                         MIPI_DSI_CMD_ID_DCS_SHORT_WRITE_1_PARAM, MIPI_DSI_CMD_FLAG_LOW_POWER},      // GIP Control 3
// {2,{0x3d, 0x22},                         MIPI_DSI_CMD_ID_DCS_SHORT_WRITE_1_PARAM, MIPI_DSI_CMD_FLAG_LOW_POWER},      // GIP Control 3
// {2,{0x3e, 0x22},                         MIPI_DSI_CMD_ID_DCS_SHORT_WRITE_1_PARAM, MIPI_DSI_CMD_FLAG_LOW_POWER},      // GIP Control 3
// {2,{0x3f, 0x22},                         MIPI_DSI_CMD_ID_DCS_SHORT_WRITE_1_PARAM, MIPI_DSI_CMD_FLAG_LOW_POWER},      // GIP Control 3
// {2,{0x40, 0x22},                         MIPI_DSI_CMD_ID_DCS_SHORT_WRITE_1_PARAM, MIPI_DSI_CMD_FLAG_LOW_POWER},      // GIP Control 3
//
// {2,{0x53, 0x10},                         MIPI_DSI_CMD_ID_DCS_SHORT_WRITE_1_PARAM, MIPI_DSI_CMD_FLAG_LOW_POWER},      // GOUT VGLO Control
// {2,{0x54, 0x10},                         MIPI_DSI_CMD_ID_DCS_SHORT_WRITE_1_PARAM, MIPI_DSI_CMD_FLAG_LOW_POWER},      // GOUT VGHO Control
//
// {6,{0xFF, 0xFF, 0x98, 0x06, 0x04, 0x07}, MIPI_DSI_CMD_ID_DCS_LONG_WRITE,      MIPI_DSI_CMD_FLAG_LOW_POWER},      // Change to Page 7 CMD for Normal command
// {2,{0x18, 0x1d},                         MIPI_DSI_CMD_ID_DCS_SHORT_WRITE_1_PARAM, MIPI_DSI_CMD_FLAG_LOW_POWER},      // VREG1/2OUT ENABLE
// {2,{0x26, 0xb2},                         MIPI_DSI_CMD_ID_DCS_SHORT_WRITE_1_PARAM, MIPI_DSI_CMD_FLAG_LOW_POWER},
// {2,{0x02, 0x77},                         MIPI_DSI_CMD_ID_DCS_SHORT_WRITE_1_PARAM, MIPI_DSI_CMD_FLAG_LOW_POWER},
// {2,{0xe1, 0x79},                         MIPI_DSI_CMD_ID_DCS_SHORT_WRITE_1_PARAM, MIPI_DSI_CMD_FLAG_LOW_POWER},
// {2,{0x17, 0x22},                         MIPI_DSI_CMD_ID_DCS_SHORT_WRITE_1_PARAM, MIPI_DSI_CMD_FLAG_LOW_POWER},      // VGL_REG Disable
//
// {6,{0xFF, 0xFF, 0x98, 0x06, 0x04, 0x00}, MIPI_DSI_CMD_ID_DCS_LONG_WRITE,      MIPI_DSI_CMD_FLAG_LOW_POWER},      // Change to Page 0 CMD for Normal command
// {120, {0},                                 MIPI_DSI_DISPLAY_CONFIG_DATA_DELAY_FLAG,   (mipi_dsi_cmd_flag_t)0},         // Sleep out command may not be issued within 120 ms of GPIO HW reset. Wait to ensure timing maintained.
// {2,{0x11, 0x00},                         MIPI_DSI_CMD_ID_DCS_SHORT_WRITE_0_PARAM,       MIPI_DSI_CMD_FLAG_LOW_POWER},// Sleep-Out
// {5,   {0},                                 MIPI_DSI_DISPLAY_CONFIG_DATA_DELAY_FLAG,   (mipi_dsi_cmd_flag_t)0},         // Delay 5msec
// {2,{0x29, 0x00},                         MIPI_DSI_CMD_ID_DCS_SHORT_WRITE_0_PARAM,       MIPI_DSI_CMD_FLAG_LOW_POWER},// Display on
// {2,{0x3a, 0x70},                         MIPI_DSI_CMD_ID_DCS_SHORT_WRITE_1_PARAM, MIPI_DSI_CMD_FLAG_LOW_POWER},      // 24-bit / pixel
//
// {0x00, {0},                              MIPI_DSI_DISPLAY_CONFIG_DATA_END_OF_TABLE, (mipi_dsi_cmd_flag_t)0},         // End of table
};

/*******************************************************************************************************************//**
* @brief Initialize LCD
*
* @paramtableLCD Controller Initialization structure.
* @retval   None.
**********************************************************************************************************************/
void mipi_dsi_push_table (const lcd_table_setting_t *table)
{
    fsp_err_t err = FSP_SUCCESS;
    const lcd_table_setting_t *p_entry = table;

    while (MIPI_DSI_DISPLAY_CONFIG_DATA_END_OF_TABLE != p_entry-&gt;cmd_id)
    {
      mipi_dsi_cmd_t msg =
      {
          .channel = 0,
          .cmd_id = p_entry-&gt;cmd_id,
          .flags = p_entry-&gt;flags,
          .tx_len = p_entry-&gt;size,
          .p_tx_buffer = p_entry-&gt;buffer,
      };

      if (MIPI_DSI_DISPLAY_CONFIG_DATA_DELAY_FLAG == msg.cmd_id)
      {
            R_BSP_SoftwareDelay (table-&gt;size, BSP_DELAY_UNITS_MILLISECONDS);
      }
      else
      {
            g_message_sent = false;
            /* Send a command to the peripheral device */
            err = R_MIPI_DSI_Command (&amp;g_mipi_dsi0_ctrl, &amp;msg);
//            handle_error(err, "** MIPI DSI Command API failed ** \r\n");
            /* Wait */
            while (!g_message_sent);
      }
      p_entry++;
    }
}

/*******************************************************************************************************************//**
* @brief      Start video mode and draw color bands on the LCD screen
*
* @paramNone.
* @retval   None.
**********************************************************************************************************************/
void mipi_dsi_start_display(void)
{
    fsp_err_t err = FSP_SUCCESS;

    /* Get LCDC configuration */
    g_hz_size = (g_display_cfg.input.hsize);
    g_vr_size = (g_display_cfg.input.vsize);
    g_hstride = (g_display_cfg.input.hstride);

    /* Initialize buffer pointers */
    g_buffer_size = (uint32_t) (g_hz_size * g_vr_size * BYTES_PER_PIXEL);
    gp_single_buffer = (uint32_t*) g_display_cfg.input.p_base;

    /* Double buffer for drawing color bands with good quality */
    gp_double_buffer = gp_single_buffer + g_buffer_size;

    /* Get timer information */
//    err = R_GPT_InfoGet (&amp;g_timer0_ctrl, &amp;timer_info);
    /* Handle error */
//    handle_error(err, "** GPT InfoGet API failed ** \r\n");

    /* Start video mode */
    err = R_GLCDC_Start(&amp;g_display_ctrl);
    /* Handle error */
//    handle_error(err, "** GLCDC Start API failed ** \r\n");

    /* Enable external interrupt */
//    err = R_ICU_ExternalIrqEnable(&amp;g_external_irq_ctrl);
    /* Handle error */
//    handle_error(err, "** ICU ExternalIrqEnable API failed ** \r\n");

    /* Swap the active framebuffer */
   gp_frame_buffer = (gp_frame_buffer == gp_single_buffer) ? gp_double_buffer : gp_single_buffer;

   /* Display color bands on LCD screen */
   display_draw (gp_frame_buffer);

   /* Now that the framebuffer is ready, update the GLCDC buffer pointer on the next Vsync */
   err = R_GLCDC_BufferChange (&amp;g_display_ctrl, (uint8_t*) gp_frame_buffer, DISPLAY_FRAME_LAYER_1);

    while (true)
    {


       //                handle_error (err, "** GLCD BufferChange API failed ** \r\n");
//      uint8_t StatusRegister = RESET_VALUE;
//      bool touch_flag = RESET_FLAG;
//
//      /* User selects time to enter ULPS*/
//      err = mipi_dsi_set_display_time ();
//      handle_error (err, "** mipi_dsi_set_display_time function failed ** \r\n");
//
//      if (g_irq_state)
//      {
//            g_irq_state = RESET_FLAG;
//            /* Get buffer status from gt911 device */
//            memset(touch_coordinates, 0, sizeof(touch_coordinates));
//            err = gt911_get_status (&amp;StatusRegister, &amp;touch_coordinates,
//                                    sizeof(touch_coordinates)/sizeof(touch_coordinates));
//            handle_error (err, "** gt911_get_status function failed ** \r\n");
//
//            if (StatusRegister &amp; GT911_BUFFER_STATUS_READY)
//            {
//                touch_flag = SET_FLAG;
//
//                /* Reset display time when touch is detected */
//                err = R_GPT_Reset (&amp;g_timer0_ctrl);
//                g_timer_overflow = RESET_FLAG;
//                handle_error (err, "** GPT Reset API failed ** \r\n");
//            }
//      }
//      if (g_ulps_flag)
//      {
//            if (touch_flag)
//            {
//                /* Exit Ultra-low Power State (ULPS) and turn on the backlight */
//                mipi_dsi_ulps_exit();
//            }
//      }
//      else
//      {
//            if (!g_timer_overflow)
//            {
//                /* Swap the active framebuffer */
//                gp_frame_buffer = (gp_frame_buffer == gp_single_buffer) ? gp_double_buffer : gp_single_buffer;
//
//                /* Display color bands on LCD screen */
//                display_draw (gp_frame_buffer);
//
//                /* Now that the framebuffer is ready, update the GLCDC buffer pointer on the next Vsync */
//                err = R_GLCDC_BufferChange (&amp;g_display_ctrl, (uint8_t*) gp_frame_buffer, DISPLAY_FRAME_LAYER_1);
//                handle_error (err, "** GLCD BufferChange API failed ** \r\n");
//
//                /* Wait for a Vsync event */
//                g_vsync_flag = RESET_FLAG;
//                while (RESET_FLAG == g_vsync_flag);
//            }
//            else
//            {
//                /* Enter Ultra-low Power State (ULPS) and turn off the backlight */
//                mipi_dsi_ulps_enter();
//            }
//      }
    }
}



/*******************************************************************************************************************//**
* @brief      User-defined function to draw the current display to a framebuffer.
*
* @paramframebuffer    Pointer to frame buffer.
* @retval   None.
**********************************************************************************************************************/
static void display_draw (uint32_t * framebuffer)
{
    /* Draw buffer */
    uint32_t color= {BLUE, LIME, RED, BLACK, WHITE, YELLOW, AQUA, MAGENTA};
    uint16_t bit_width = g_hz_size / COLOR_BAND_COUNT;
    for (uint32_t y = 0; y &lt; g_vr_size; y++)
    {
      for (uint32_t x = 0; x &lt; g_hz_size; x ++)
      {
            uint32_t bit       = x / bit_width;
            framebuffer = color ;
      }
      framebuffer += g_hstride;
    }
}


/*******************************************************************************************************************//**
* @brief      This function is used initialize related module and start display operation.
*
* @paramnone
* @retval   none
**********************************************************************************************************************/
void mipi_dsi_entry(void)
{
    fsp_err_t          err      = FSP_SUCCESS;
    fsp_pack_version_t version    = {RESET_VALUE};

    /* version get API for FLEX pack information */
//    R_FSP_VersionGet(&amp;version);

    /* Project information printed on the Console */
//    APP_PRINT(BANNER_INFO, EP_VERSION, version.version_id_b.major, version.version_id_b.minor, version.version_id_b.patch);
//    APP_PRINT(EP_INFO);
//    APP_PRINT(MIPI_DSI_MENU);

    /* Initialize SDRAM. */
    bsp_sdram_init();

    /* Initialize GLCDC module */
    err = R_GLCDC_Open(&amp;g_display_ctrl, &amp;g_display_cfg);
    /* Handle error */
//    handle_error(err, "** GLCDC driver initialization FAILED ** \r\n");

    /* Initialize GPT module */
//    err = R_GPT_Open(&amp;g_timer0_ctrl, &amp;g_timer0_cfg);
    /* Handle error */
//    handle_error(err, "** R_GPT_Open API failed ** \r\n");

    /* LCD reset */
//    touch_screen_reset();

    /* Initialize IIC MASTER module */
//    err = R_IIC_MASTER_Open(&amp;g_i2c_master_ctrl, &amp;g_i2c_master_cfg);
    /* Handle error */
//    handle_error(err, "** IIC MASTER Open API failed ** \r\n");

    /* Initialize LCD. */
    mipi_dsi_push_table(g_lcd_init_focuslcd);

    /* Initialize ICU module */
//    err = R_ICU_ExternalIrqOpen(&amp;g_external_irq_ctrl, &amp;g_external_irq_cfg);
    /* Handle error */
//    handle_error(err, "** ICU ExternalIrqOpen API failed ** \r\n");

    /* Start display 8-color bars */
    mipi_dsi_start_display();
}
void mipi_dsi0_callback(mipi_dsi_callback_args_t *p_args)
{
    switch (p_args-&gt;event)
    {
      case MIPI_DSI_EVENT_SEQUENCE_0:
      {
            if (MIPI_DSI_SEQUENCE_STATUS_DESCRIPTORS_FINISHED == p_args-&gt;tx_status)
            {
                g_message_sent = SET_FLAG;
            }
            break;
      }
      case MIPI_DSI_EVENT_PHY:
      {
            g_phy_status |= p_args-&gt;phy_status;
            break;
      }
      default:
      {
            break;
      }

    }
}
/*******************************************************************************************************************//**
* @} (end addtogroup mipi_dsi_ep)
**********************************************************************************************************************/
</code></pre>

<p>&nbsp;</p>
</div><script>                                        var loginstr = '<div class="locked">查看本帖全部内容,请<a href="javascript:;"   style="color:#e60000" class="loginf">登录</a>或者<a href="https://bbs.eeworld.com.cn/member.php?mod=register_eeworld.php&action=wechat" style="color:#e60000" target="_blank">注册</a></div>';
                                       
                                        if(parseInt(discuz_uid)==0){
                                                                                                (function($){
                                                        var postHeight = getTextHeight(400);
                                                        $(".showpostmsg").html($(".showpostmsg").html());
                                                        $(".showpostmsg").after(loginstr);
                                                        $(".showpostmsg").css({height:postHeight,overflow:"hidden"});
                                                })(jQuery);
                                        }                </script><script type="text/javascript">(function(d,c){var a=d.createElement("script"),m=d.getElementsByTagName("script"),eewurl="//counter.eeworld.com.cn/pv/count/";a.src=eewurl+c;m.parentNode.insertBefore(a,m)})(document,523)</script>

freebsder 发表于 2024-8-29 15:10

<p>谢谢分享,期待后续!</p>
页: [1]
查看完整版本: 【瑞萨RA8D1开发板,基于M85内核的图形MCU测评】+MIPI接口屏幕测试