在dm385中需要使用dvo2输出RGB888信号到lcd
遇到的问题是dvo2的数据线没有输出,但是同步信号输出正常。
请大家一起帮忙分析一下,谢谢!
我使用的sdk是dvrrdk4.0
This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
在dm385中需要使用dvo2输出RGB888信号到lcd
遇到的问题是dvo2的数据线没有输出,但是同步信号输出正常。
请大家一起帮忙分析一下,谢谢!
我使用的sdk是dvrrdk4.0
您好, 之前你用其他的格式比如YUV 16bit之类的,能够正常输出吗? 先确认下pinmux这块是否已经正确配置?
在dvr_rdk/ti_tools/hdvpss/dvr_rdk_hdvpss/packages/ti/psp/platforms/ti8107/src/vps_platformTI8107.c中进行了相关设置
REG32(CSL_TI8107_CTRL_MODULE_BASE + 0x0AB8) = 0x1; /* vout0_fid_mux1 */
REG32(CSL_TI8107_CTRL_MODULE_BASE + 0x0ABC) = 0x1; /* vout0_clk */
REG32(CSL_TI8107_CTRL_MODULE_BASE + 0x0AC0) = 0x1; /* vout0_hsync */
REG32(CSL_TI8107_CTRL_MODULE_BASE + 0x0AC4) = 0x1; /* vout0_vsync */
REG32(CSL_TI8107_CTRL_MODULE_BASE + 0x0AC8) = 0x1; /* vout0_avid */
REG32(CSL_TI8107_CTRL_MODULE_BASE + 0x0ACC) = 0x1; /* vout0_b_cb_c[2] */
REG32(CSL_TI8107_CTRL_MODULE_BASE + 0x0AD0) = 0x1; /* vout0_b_cb_c[3] */
REG32(CSL_TI8107_CTRL_MODULE_BASE + 0x0AD4) = 0x1; /* vout0_b_cb_c[4] */
REG32(CSL_TI8107_CTRL_MODULE_BASE + 0x0AD8) = 0x1; /* vout0_b_cb_c[5] */
REG32(CSL_TI8107_CTRL_MODULE_BASE + 0x0ADC) = 0x1; /* vout0_b_cb_c[6] */
REG32(CSL_TI8107_CTRL_MODULE_BASE + 0x0AE0) = 0x1; /* vout0_b_cb_c[7] */
REG32(CSL_TI8107_CTRL_MODULE_BASE + 0x0AE4) = 0x1; /* vout0_b_cb_c[8] */
REG32(CSL_TI8107_CTRL_MODULE_BASE + 0x0AE8) = 0x1; /* vout0_b_cb_c[9] */
REG32(CSL_TI8107_CTRL_MODULE_BASE + 0x0AEC) = 0x1; /* vout0_g_y_yc[2] */
REG32(CSL_TI8107_CTRL_MODULE_BASE + 0x0AF0) = 0x1; /* vout0_g_y_yc[3] */
REG32(CSL_TI8107_CTRL_MODULE_BASE + 0x0AF4) = 0x1; /* vout0_g_y_yc[4] */
REG32(CSL_TI8107_CTRL_MODULE_BASE + 0x0AF8) = 0x1; /* vout0_g_y_yc[5] */
REG32(CSL_TI8107_CTRL_MODULE_BASE + 0x0AFC) = 0x1; /* vout0_g_y_yc[6] */
REG32(CSL_TI8107_CTRL_MODULE_BASE + 0x0B00) = 0x1; /* vout0_g_y_yc[7] */
REG32(CSL_TI8107_CTRL_MODULE_BASE + 0x0B04) = 0x1; /* vout0_g_y_yc[8] */
REG32(CSL_TI8107_CTRL_MODULE_BASE + 0x0B08) = 0x1; /* vout0_g_y_yc[9] */
REG32(CSL_TI8107_CTRL_MODULE_BASE + 0x0B0C) = 0x1; /* vout0_r_cr[2] */
REG32(CSL_TI8107_CTRL_MODULE_BASE + 0x0B10) = 0x1; /* vout0_r_cr[3] */
REG32(CSL_TI8107_CTRL_MODULE_BASE + 0x0B14) = 0x1; /* vout0_r_cr[4] */
REG32(CSL_TI8107_CTRL_MODULE_BASE + 0x0B18) = 0x1; /* vout0_r_cr[5] */
REG32(CSL_TI8107_CTRL_MODULE_BASE + 0x0B1C) = 0x1; /* vout0_r_cr[6] */
REG32(CSL_TI8107_CTRL_MODULE_BASE + 0x0B20) = 0x1; /* vout0_r_cr[7] */
REG32(CSL_TI8107_CTRL_MODULE_BASE + 0x0B24) = 0x1; /* vout0_r_cr[8] */
REG32(CSL_TI8107_CTRL_MODULE_BASE + 0x0B28) = 0x1; /* vout0_r_cr[9] */
是的,使用的VOUT0引脚
VOUT[0]_B_CB_C2 ~ VOUT[0]_B_CB_C9
VOUT[0]_R_CR2 ~ VOUT[0]_R_CR_C9
VOUT[0]_G_Y_YC[2] ~ VOUT[0]_G_Y_YC[9]
1. pinmux还是请去回读一下pinmux寄存器看看是否是你预期要改的值。因为可能在代码的其他位置被覆盖掉了
2. 除了H/Vsync, pixel clk出来了吗?
运行完环境和程序后
使用如下命令读出pinmux寄存器,我觉得引脚复用应该没有问题
0x48140acc: 00000001
0x48140ad0: 00000001
0x48140ad4: 00000001
0x48140ad8: 00000001
0x48140adc: 00000001
0x48140ae0: 00000001
0x48140ae4: 00000001
0x48140ae8: 00000001
0x48140aec: 00000001
0x48140af0: 00000001
0x48140af4: 00000001
0x48140af8: 00000001
0x48140afc: 00000001
0x48140b00: 00000001
0x48140b04: 00000001
0x48140b08: 00000001
0x48140b0c: 00000001
0x48140b10: 00000001
0x48140b14: 00000001
0x48140b18: 00000001
0x48140b1c: 00000001
你好;
你可以查一下 / sys/devices /platform/vpss/display 下面的状态信息是正常的吗?
输出的分辨率信息,时序信息;
再打印出display link 的模块的状态信息,刷新数据的信息,看是否有问题在里面。
还有就是使用color bar寄存器让DVO2自行生成测试彩条看看。如果能有彩条正常输出的话应该是DVO本身配置正常,而显示内容没有正常送到DVO了
请问dm385的dvo2在rdk程序中是不是使用SYSTEM_LINK_ID_DISPLAY_0
也就是说hdmi dvo2 以及hdcomp是共用一个linkId对吗?
hdmi和dvo2可以输出不同分辨率视频吗
不可以输出不同的分辨率,因为是用的同一个时钟源;
hdmi 和 hdcomp 是 tied输出的 dctrlTriDisplayConfig->vencInfo.tiedVencs = (VPS_DC_VENC_HDMI | VPS_DC_VENC_HDCOMP);
你可以看一下system_dctrl.c 文件;
hdmi 的输出对应是 SYSTEM_LINK_ID_DISPLAY_0
DVO2 对应的是输出 SYSTEM_LINK_ID_DISPLAY_1
刚才上面说错了,应当是这样的:hdmi 和dvo2 可以输出不用的分辨率视频,hdcomp和那个tied 到一起,就必须和tied的信号保持相同的分辨率输出
我从rdk4.0代码中看SYSTEM_LINK_ID_DISPLAY_1指的是标清输出接口
sorry ,刚才看了源代码,在程序里面确实是配置SYSTEM_LINK_ID_DISPLAY_1为sd接口的输出了;
既然这样,又回到了上述问题
dvo2没有和hdmi tied,是不是就可以输出不同的分辨率了
quan wang5 说:既然这样,又回到了上述问题
dvo2没有和hdmi tied,是不是就可以输出不同的分辨率了
可以输出不同的分辨率;
你程序还需要修改,要不然变成了hdmi输出或者是dvo2输出
#if defined(TI_8107_BUILD)
if( vdDevId == VDIS_DEV_HDMI)
{
displayId = gVdisModuleContext.displayId[0];
}
else if(( vdDevId == VDIS_DEV_HDCOMP) || ( vdDevId == VDIS_DEV_DVO2))
{
displayId = gVdisModuleContext.displayId[0];
}
else if(vdDevId == VDIS_DEV_SD)
{
displayId = gVdisModuleContext.displayId[1];
}
else
{
displayId = SYSTEM_LINK_ID_INVALID;
}
#endif这样子的话使用SYSTEM_LINK_ID_DISPLAY_0会导致on-chip hdmi dvo2 hdcomp都输出视频?
现在遇到的问题是使用SYSTEM_LINK_ID_DISPLAY_0
让dvo2输出SYSTEM_STD_XGA_60分辨率,同步信号和时钟都是正常的,但是数据信号(24bitRGB)没有任何输出
引脚复用是正确的。
在代码中我只能绑定HDMI和HDCOMP
如果绑定HDMI和DVO2程序会报错退出
关于DVO2的输出,你看一下hdvpss的手册:DVRRDK_04.00.00.03/ti_tools/hdvpss/dvr_rdk_hdvpss/docs/HDVPSS_UserGuide.pdf
你可以把display 0 从hdmi 接口输出,修改为dvo2输出,也可以把display 1 由sd 的输出修改为dvo2的输出;
你重点看一下下面两个文件中对hdvpss的输出配置,可以直接修改
DVRRDK_04.00.00.03/dvr_rdk/mcfw/src_bios6/links_m3vpss/system/system_dctrl.c
DVRRDK_04.00.00.03/dvr_rdk/mcfw/src_bios6/links_m3vpss/display/displayLink_drv.c
我修改了这个配置,DVO2现在有输出了,
但是颜色空间有问题,而且采集的视频不能显示到输出的LCD上面
Vps_DcConfig gSystem_dctrlTriDisplayConfig = {
VPS_DC_USERSETTINGS, /* Use Case */
/* Edge information */
{
{VPS_DC_BP0_INPUT_PATH, VPS_DC_HDCOMP_MUX},
{VPS_DC_HDCOMP_MUX, VPS_DC_CIG_PIP_INPUT},
{VPS_DC_CIG_PIP_OUTPUT, VPS_DC_HDMI_BLEND},
{VPS_DC_CIG_PIP_OUTPUT, VPS_DC_DVO2_BLEND},
{VPS_DC_SEC1_INPUT_PATH, VPS_DC_SDVENC_MUX},
{VPS_DC_SDVENC_MUX, VPS_DC_SDVENC_BLEND},
{VPS_DC_GRPX0_INPUT_PATH, VPS_DC_HDMI_BLEND},
{VPS_DC_GRPX0_INPUT_PATH, VPS_DC_DVO2_BLEND},
{VPS_DC_GRPX2_INPUT_PATH, VPS_DC_SDVENC_BLEND},
} ,
9,
/* VENC information */
{
/* Mode information */
{
{VPS_DC_VENC_HDMI, {FVID2_STD_1080P_60}
}
, /* 1080p30 is mode
* is overwritten
* later inside
* System_displayCtrlInit
* System_displayCtrlInit
*/
{VPS_DC_VENC_DVO2, {FVID2_STD_1080P_60}
}
, /* 1080p30 is mode
* is overwritten
* later inside
* System_displayCtrlInit
*/
{VPS_DC_VENC_SD, {FVID2_STD_NTSC}
}
}
,
(VPS_DC_VENC_HDMI | VPS_DC_VENC_DVO2), /* Tied VENC bit
* mask */
3u /* Number of VENCs */
}
};
你上面这样配置,看起来还是有问题;
你参考一下这个:
/* Edge information */
{
{VPS_DC_BP0_INPUT_PATH, VPS_DC_VCOMP_MUX},
{VPS_DC_VCOMP_MUX, VPS_DC_VCOMP},
{VPS_DC_CIG_NON_CONSTRAINED_OUTPUT, VPS_DC_HDMI_BLEND},
{VPS_DC_BP1_INPUT_PATH, VPS_DC_HDCOMP_MUX},
{VPS_DC_HDCOMP_MUX, VPS_DC_CIG_PIP_INPUT},
{VPS_DC_CIG_PIP_OUTPUT, VPS_DC_DVO2_BLEND},
{VPS_DC_GRPX0_INPUT_PATH, VPS_DC_HDMI_BLEND},
{VPS_DC_GRPX1_INPUT_PATH, VPS_DC_DVO2_BLEND},
{VPS_DC_MAIN_INPUT_PATH, VPS_DC_VCOMP},
{VPS_DC_AUX_INPUT_PATH, VPS_DC_VCOMP_MUX},
},默认是这样的,你可以通过display来指定输出到hdmi或者是dvo2的;
static inline Void DisplayLink_CreateParams_Init(DisplayLink_CreateParams *prm)
{
memset(prm, 0, sizeof(*prm));
prm->numInputQueues = 1;
prm->activeQueue = 0;
prm->forceFieldSeparatedInputMode = FALSE;
memset(prm->inQueParams,0,sizeof(prm->inQueParams));
prm->displayId = DISPLAY_LINK_DISPLAY_AUTO_SELECT;
}quan wang5 说:你上面的配置,应该是没有tied的对吧
上面的输出配置是没有做tied的,我这里是把dvo2输出到lcd 屏幕上面去的,不需要做tied的处理