DSI (MIPI DSI) 模块支持1-lane或者2-lane的DSI屏幕, 目前带宽支持240/288/336/384/480Mbps几种配置, 标准参考MIPI协议版本V1.1(55x不支持Video模式)
{
.freq = DSI_FREQ_288MHZ,
.color_mode = LCDC_PIXEL_FORMAT_RGB888,
.cfg = {
.dsi = {
.Init = {
.AutomaticClockLaneControl = DSI_AUTO_CLK_LANE_CTRL_DISABLE,
.NumberOfLanes = DSI_TWO_DATA_LANES,
.TXEscapeCkdiv = 0x2,
},
.CmdCfg = {
.VirtualChannelID = 0,
.CommandSize = 0xFFFF,
.TEAcknowledgeRequest = DSI_TE_ACKNOWLEDGE_ENABLE,
.ColorCoding = DSI_RGB888,
},
.PhyTimings = {
.ClockLaneHS2LPTime = 35,
.ClockLaneLP2HSTime = 35,
.DataLaneHS2LPTime = 35,
.DataLaneLP2HSTime = 35,
.DataLaneMaxReadTime = 0,
.StopWaitTime = 10,
},
.HostTimeouts = {
.TimeoutCkdiv = 1,
.HighSpeedTransmissionTimeout = 0,
.LowPowerReceptionTimeout = 0,
.HighSpeedReadTimeout = 0,
.LowPowerReadTimeout = 0,
.HighSpeedWriteTimeout = 0,
.LowPowerWriteTimeout = 0,
.BTATimeout = 0,
},
.LPCmd = {
.LPGenShortWriteNoP = DSI_LP_GSW0P_ENABLE,
.LPGenShortWriteOneP = DSI_LP_GSW1P_ENABLE,
.LPGenShortWriteTwoP = DSI_LP_GSW2P_ENABLE,
.LPGenShortReadNoP = DSI_LP_GSR0P_ENABLE,
.LPGenShortReadOneP = DSI_LP_GSR1P_ENABLE,
.LPGenShortReadTwoP = DSI_LP_GSR2P_ENABLE,
.LPGenLongWrite = DSI_LP_GLW_ENABLE,
.LPDcsShortWriteNoP = DSI_LP_DSW0P_ENABLE,
.LPDcsShortWriteOneP = DSI_LP_DSW1P_ENABLE,
.LPDcsShortReadNoP = DSI_LP_DSR0P_ENABLE,
.LPDcsLongWrite = DSI_LP_DLW_DISABLE,
.LPMaxReadPacket = DSI_LP_MRDP_ENABLE,
.AcknowledgeRequest = DSI_ACKNOWLEDGE_DISABLE,
},
.vsyn_delay_us = 1000,
},
},
};
__ROM_USED void LCDC1_IRQHandler(void)
{
ENTER_INTERRUPT();
LEAVE_INTERRUPT();
}
{
LOG_I("Send layer buffer done.");
}
{
...
...
}
void RM69090_SetRegion(
LCDC_HandleTypeDef *hlcdc, uint16_t x0, uint16_t y0, uint16_t x1, uint16_t y1)
{
uint8_t parameter[4];
parameter[0] = (x0) >> 8;
parameter[1] = (x0) & 0xFF;
parameter[2] = (x1) >> 8;
parameter[3] = (x1) & 0xFF;
parameter[0] = (y0) >> 8;
parameter[1] = (y0) & 0xFF;
parameter[2] = (y1) >> 8;
parameter[3] = (y1) & 0xFF;
}
static void main(int argc, char **argv)
{
uint8_t *p_framebuffer = (uint8_t *) 0x60020000;
Poweron_LCD_Board();
memset(&hlcdc_rm69090, 0, sizeof(hlcdc_rm69090));
hlcdc_rm69090.
bg.b = 255;
HAL_LCDC_ResetLCD(&hlcdc_rm69090, LCDC_RESX_NEG_PULSE, 20);
RM69090_Init_Seq(&hlcdc_rm69090);
{
uint32_t rd_data = 0;
LOG_I("rm69090 id is %d",rd_data);
}
memset(p_framebuffer, 0xE0, 100*100*2);
RM69090_SetRegion(&hlcdc_rm69090, 100, 100, 199, 199);
HAL_LCDC_DSI_StartPatialWrite(&hlcdc_rm69090, 0x2c, (SetRegion_cb_t)RM69090_SetRegion);
}