完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
本帖最后由 一只耳朵怪 于 2018-5-31 11:16 编辑
我现在让DM368输出colorbar到电视上显示, 使用pRGB格式输出时, colorbar的显示是正常的, 如下所示: 寄存器的配置如下: static void davinci_enc_set_prgb(struct vid_enc_mode_info *mode_info) [ u32 reg; if ((strcmp(mode_info->name, VID_ENC_STD_480P_60) == 0) || (strcmp(mode_info->name, VID_ENC_STD_576P_50) == 0)) [ enableDigitalOutput(0); ] else // 720p, 1080i [ enableDigitalOutput(1); ] dispc_reg_out(VENC_VIDCTL, 0x141); dispc_reg_out(VENC_DCLKCTL, 0); dispc_reg_out(VENC_DCLKPTN0, 0); /* Set the OSD Divisor to 1. */ dispc_reg_out(VENC_OSDCLK0, 0); dispc_reg_out(VENC_OSDCLK1, 1); /* Clear composite mode register */ dispc_reg_out(VENC_CVBS, 0); /* DM365 pinmux */ dispc_reg_out(VENC_CLKCTL, 0x11); davinci_cfg_reg(DM365_VOUT_HVSYNC); davinci_cfg_reg(DM365_VOUT_COUTL_EN); davinci_cfg_reg(DM365_VOUT_COUTH_EN); reg = __raw_readl(IO_ADDRESS(0x01c40004)); //pin mux 1 reg &= ~(3 << 18); reg |= (2 << 18); reg &= ~(3 << 20); reg |= (1 << 20); __raw_writel(reg, IO_ADDRESS(0x01c40004)); reg = __raw_readl(IO_ADDRESS(0x01c40010)); //pin mux 4 reg |= (0xf << 10); reg |= 0xff; __raw_writel(reg, IO_ADDRESS(0x01c40010)); reg = __raw_readl(IO_ADDRESS(0x01c40004)); printk("pinmux1:0x%08xn", reg); osd_write_left_margin(mode_info->left_margin - get_venc_xoff()); osd_write_upper_margin(mode_info->upper_margin); /* Set VIDCTL to select VCLKE = 1, VCLKZ =0, SYDIR = 0 (set o/p), DOMD = 0 */ dispc_reg_merge(VENC_VIDCTL, 1 << VENC_VIDCTL_VCLKE_SHIFT, VENC_VIDCTL_VCLKE); dispc_reg_merge(VENC_VIDCTL, 0 << VENC_VIDCTL_VCLKZ_SHIFT, VENC_VIDCTL_VCLKZ); dispc_reg_merge(VENC_VIDCTL, 0 << VENC_VIDCTL_SYDIR_SHIFT, VENC_VIDCTL_SYDIR); dispc_reg_merge(VENC_VIDCTL, 0 << VENC_VIDCTL_YCDIR_SHIFT, VENC_VIDCTL_YCDIR); dispc_reg_merge(VENC_DCLKCTL, 1 << VENC_DCLKCTL_DCKEC_SHIFT, VENC_DCLKCTL_DCKEC); dispc_reg_out(VENC_DCLKPTN0, 0x1); davinci_enc_set_display_timing(mode_info); if ((strcmp(mode_info->name, VID_ENC_STD_480P_60) == 0) || (strcmp(mode_info->name, VID_ENC_STD_576P_50) == 0)) [ dispc_reg_out(VENC_SYNCCTL, (VENC_SYNCCTL_SYEV | VENC_SYNCCTL_SYEH | VENC_SYNCCTL_HPL | VENC_SYNCCTL_VPL)); ] else // 720p, 1080i [ dispc_reg_out(VENC_SYNCCTL, (VENC_SYNCCTL_SYEV | VENC_SYNCCTL_SYEH)); ] /* Configure VMOD. No change in VENC bit */ if (!mode_info->interlaced) [ dispc_reg_out(VENC_VMOD, 0x2011); ] else [ dispc_reg_out(VENC_VMOD, 0x2211); ] dispc_reg_out(VENC_LCDOUT, 0x1); ] 当让DM368输出colorbar到电视上显示, 使用YUV422格式输出时, colorbar的颜色显示不对, 白色的变成黑色了, 黄色变成了棕色, 如下所示: 寄存器的配置如下: static void davinci_enc_set_ycbcr16(struct vid_enc_mode_info *mode_info) [ u32 reg; if ((strcmp(mode_info->name, VID_ENC_STD_480P_60) == 0) || (strcmp(mode_info->name, VID_ENC_STD_576P_50) == 0)) [ enableDigitalOutput(0); ] else // 720p, 1080i [ enableDigitalOutput(1); ] dispc_reg_out(VENC_VIDCTL, 0x141); dispc_reg_out(VENC_DCLKCTL, 0); dispc_reg_out(VENC_DCLKPTN0, 0); /* Set the OSD Divisor to 1. */ dispc_reg_out(VENC_OSDCLK0, 0); dispc_reg_out(VENC_OSDCLK1, 1); /* Clear composite mode register */ dispc_reg_out(VENC_CVBS, 0); /* DM365 pinmux */ dispc_reg_out(VENC_CLKCTL, 0x11); davinci_cfg_reg(DM365_VOUT_HVSYNC); davinci_cfg_reg(DM365_VOUT_COUTL_EN); davinci_cfg_reg(DM365_VOUT_COUTH_EN); reg = __raw_readl(IO_ADDRESS(0x01c40004)); //pin mux 1 reg &= ~(3 << 20); reg |= (1 << 20); __raw_writel(reg, IO_ADDRESS(0x01c40004)); reg = __raw_readl(IO_ADDRESS(0x01c40004)); printk("pinmux1:0x%08xn", reg); osd_write_left_margin(mode_info->left_margin - get_venc_xoff()); osd_write_upper_margin(mode_info->upper_margin); /* Set VIDCTL to select VCLKE = 1, VCLKZ =0, SYDIR = 0 (set o/p), DOMD = 0 */ dispc_reg_merge(VENC_VIDCTL, 1 << VENC_VIDCTL_VCLKE_SHIFT, VENC_VIDCTL_VCLKE); dispc_reg_merge(VENC_VIDCTL, 0 << VENC_VIDCTL_VCLKZ_SHIFT, VENC_VIDCTL_VCLKZ); dispc_reg_merge(VENC_VIDCTL, 0 << VENC_VIDCTL_SYDIR_SHIFT, VENC_VIDCTL_SYDIR); dispc_reg_merge(VENC_VIDCTL, 0 << VENC_VIDCTL_YCDIR_SHIFT, VENC_VIDCTL_YCDIR); dispc_reg_merge(VENC_DCLKCTL, 1 << VENC_DCLKCTL_DCKEC_SHIFT, VENC_DCLKCTL_DCKEC); dispc_reg_out(VENC_DCLKPTN0, 0x1); davinci_enc_set_display_timing(mode_info); if ((strcmp(mode_info->name, VID_ENC_STD_480P_60) == 0) || (strcmp(mode_info->name, VID_ENC_STD_576P_50) == 0)) [ dispc_reg_out(VENC_SYNCCTL, (VENC_SYNCCTL_SYEV | VENC_SYNCCTL_SYEH | VENC_SYNCCTL_HPL | VENC_SYNCCTL_VPL)); ] else // 720p, 1080i [ dispc_reg_out(VENC_SYNCCTL, (VENC_SYNCCTL_SYEV | VENC_SYNCCTL_SYEH)); ] /* Configure VMOD. No change in VENC bit */ if (!mode_info->interlaced) [ dispc_reg_out(VENC_VMOD, 0x0011); ] else [ dispc_reg_out(VENC_VMOD, 0x0211); ] dispc_reg_out(VENC_LCDOUT, 0x1); ] 请问下是什么原因导致颜色显示不正常的? 有哪些寄存器还需要配置, 谢谢. |
|
相关推荐
6个回答
|
|
你好,
你说的color bar是你DDR上的,还是VENC内部的? 如果是DDR上的,请确认使用的OSD video window配置正确。 如果是VENC内部的,什么是RGB/YUV输出? |
|
|
|
color bar是VENC内部的, VENC输出YUV422的信号, 有一个HDMI编码芯片IT66121与DM368相连, IT66121输入为YUV422, 输出设为YUV422, YUV444或RGB444, 在电视上显示的结果都是一样的, 会偏色. |
|
|
|
tvtsterwerw 发表于 2018-5-31 02:29 你好, 是yuv422 16-bit输出么?YCCCTL.YCP配置0和1都尝试过么? |
|
|
|
是yuv422 16-bit输出, YCCCTL.YCP配置成0和1都试过了, 都会偏色. |
|
|
|
你好, 你是否有调整过IT66121芯片的配置? 或者你测量一下DM36x输出信号,看Y上的信号上开始白色是否有高电平输出,看是否输出正常? |
|
|
|
查明了是IT66121的配置问题, 与DM368无关. |
|
|
|
只有小组成员才能发言,加入小组>>
NA555DR VCC最低电压需要在5V供电,为什么用3.3V供电搭了个单稳态触发器也使用正常?
672 浏览 3 评论
MSP430F249TPMR出现高温存储后失效了的情况,怎么解决?
599 浏览 1 评论
对于多级放大电路板,在PCB布局中,电源摆放的位置应该注意什么?
1052 浏览 1 评论
736 浏览 0 评论
普中科技F28335开发板每次上电复位后数码管都会显示,如何熄灭它?
523 浏览 1 评论
请问下tpa3220实际测试引脚功能和官方资料不符,哪位大佬可以帮忙解答下
158浏览 20评论
请教下关于TAS5825PEVM评估模块原理图中不太明白的地方,寻求答疑
120浏览 14评论
在使用3254进行录音的时候出现一个奇怪的现象,右声道有吱吱声,请教一下,是否是什么寄存器设置存在问题?
124浏览 13评论
TLV320芯片内部自带数字滤波功能,请问linein进来的模拟信号是否是先经过ADC的超采样?
122浏览 12评论
TPA6304-Q1: TPA6304 两片公用一组I2C的话,其中一片配置不成功怎么办
165浏览 10评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-23 08:02 , Processed in 0.921233 second(s), Total 88, Slave 73 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号