【瑞萨RA8D1开发板,基于M85内核的图形MCU测评】+MIPI接口屏幕测试
<div class='showpostmsg'><p>Mipi接口实际要是比我们的RGB接口复杂多了,关键目前我们MIPI接口就2lane导致很多的屏幕是选择不了的,所以官方这种用MIPI已经是为我们测试过了。接下来就跟着我们踩坑吧。</p><p > </p>
<p >我们先看下框图,实际就是在GLCDC的基础上拓展了一个MIPI芯片,所以开始初始化就得初始化我们的GLCDC的管脚,所以这些管脚外接功能就不能使用了,实际就是内部连接了。</p>
<p > </p>
<p >实际我们初始化的,我还是只初始化了我们引出的管脚,其他的管脚我未使用,我们其实无所谓这些,到mipi这边简化了。我理解565,666,888这些都能驱动屏幕。</p>
<p >之后还是要注意初始化SDRAM不然例程还是会有问题的。</p>
<p > </p>
<p >踩坑第一就是这个电源电压,我理解的一般MIPI屏幕都是1.8V通信,所以我先接的1.8V的电阻,然后不亮,才发现是要接3.3V。</p>
<p > </p>
<p >厂家原理图里面给的接口是3.3V。</p>
<p >接下来还是要修改里面的内容。首先还是得要厂家的驱屏参数。</p>
<p > </p>
<p >输入用的RGB888模式。</p>
<p > </p>
<p >输出参数需要对应屏幕参数。</p>
<p > </p>
<p >输出这边我们就不用管大小端了,模式注意下我们最高666输出,目前根据屏幕配置的RGB565。</p>
<p > </p>
<p >Mipi的配置简单点,基本都是默认,然后注意自己生成了一个回调函数,我们需要进行编写。</p>
<p >原本官方例程给了一个低功耗的操作,我这里直接删除,所以魔改了很多。</p>
<p > </p>
<p >然后就是配置这里,我们需要问屏厂要这个资料,所以说配置麻烦的很,尤其是这个你要对比多次在你驱动不起来的情况下。</p>
<p > </p>
<p >那个回调函数就是用来确定配置表是否发送到屏了。</p>
<p >成功驱动后的样子给看下:</p>
<p > </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->cmd_id)
{
mipi_dsi_cmd_t msg =
{
.channel = 0,
.cmd_id = p_entry->cmd_id,
.flags = p_entry->flags,
.tx_len = p_entry->size,
.p_tx_buffer = p_entry->buffer,
};
if (MIPI_DSI_DISPLAY_CONFIG_DATA_DELAY_FLAG == msg.cmd_id)
{
R_BSP_SoftwareDelay (table->size, BSP_DELAY_UNITS_MILLISECONDS);
}
else
{
g_message_sent = false;
/* Send a command to the peripheral device */
err = R_MIPI_DSI_Command (&g_mipi_dsi0_ctrl, &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 (&g_timer0_ctrl, &timer_info);
/* Handle error */
// handle_error(err, "** GPT InfoGet API failed ** \r\n");
/* Start video mode */
err = R_GLCDC_Start(&g_display_ctrl);
/* Handle error */
// handle_error(err, "** GLCDC Start API failed ** \r\n");
/* Enable external interrupt */
// err = R_ICU_ExternalIrqEnable(&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 (&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 (&StatusRegister, &touch_coordinates,
// sizeof(touch_coordinates)/sizeof(touch_coordinates));
// handle_error (err, "** gt911_get_status function failed ** \r\n");
//
// if (StatusRegister & GT911_BUFFER_STATUS_READY)
// {
// touch_flag = SET_FLAG;
//
// /* Reset display time when touch is detected */
// err = R_GPT_Reset (&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 (&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 < g_vr_size; y++)
{
for (uint32_t x = 0; x < 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(&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(&g_display_ctrl, &g_display_cfg);
/* Handle error */
// handle_error(err, "** GLCDC driver initialization FAILED ** \r\n");
/* Initialize GPT module */
// err = R_GPT_Open(&g_timer0_ctrl, &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(&g_i2c_master_ctrl, &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(&g_external_irq_ctrl, &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->event)
{
case MIPI_DSI_EVENT_SEQUENCE_0:
{
if (MIPI_DSI_SEQUENCE_STATUS_DESCRIPTORS_FINISHED == p_args->tx_status)
{
g_message_sent = SET_FLAG;
}
break;
}
case MIPI_DSI_EVENT_PHY:
{
g_phy_status |= p_args->phy_status;
break;
}
default:
{
break;
}
}
}
/*******************************************************************************************************************//**
* @} (end addtogroup mipi_dsi_ep)
**********************************************************************************************************************/
</code></pre>
<p> </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> <p>谢谢分享,期待后续!</p>
页:
[1]