当前位置:网站首页>imx6-uboot添加lvds1显示
imx6-uboot添加lvds1显示
2022-06-12 12:09:00 【北极……星】
问题引出:客户使用lvds1显示uboot不出图像
问题解决:
- 查看uboot显示部分的源码
static void setup_display(void)
{
struct mxc_ccm_reg *mxc_ccm = (struct mxc_ccm_reg *)CCM_BASE_ADDR;
struct iomuxc *iomux = (struct iomuxc *)IOMUXC_BASE_ADDR;
int reg;
/* Setup HSYNC, VSYNC, DISP_CLK for debugging purposes */
imx_iomux_v3_setup_multiple_pads(di0_pads, ARRAY_SIZE(di0_pads));
enable_ipu_clock();
imx_setup_hdmi();
/* Turn on LDB0, LDB1, IPU,IPU DI0 clocks */
reg = readl(&mxc_ccm->CCGR3);
reg |= MXC_CCM_CCGR3_LDB_DI0_MASK | MXC_CCM_CCGR3_LDB_DI1_MASK;
writel(reg, &mxc_ccm->CCGR3);
/* set LDB0, LDB1 clk select to 011/011 */
reg = readl(&mxc_ccm->cs2cdr);
reg &= ~(MXC_CCM_CS2CDR_LDB_DI0_CLK_SEL_MASK
| MXC_CCM_CS2CDR_LDB_DI1_CLK_SEL_MASK);
reg |= (3 << MXC_CCM_CS2CDR_LDB_DI0_CLK_SEL_OFFSET)
| (3 << MXC_CCM_CS2CDR_LDB_DI1_CLK_SEL_OFFSET);
writel(reg, &mxc_ccm->cs2cdr);
reg = readl(&mxc_ccm->cscmr2);
reg |= MXC_CCM_CSCMR2_LDB_DI0_IPU_DIV | MXC_CCM_CSCMR2_LDB_DI1_IPU_DIV;
writel(reg, &mxc_ccm->cscmr2);
reg = readl(&mxc_ccm->chsccdr);
reg |= (CHSCCDR_CLK_SEL_LDB_DI0
<< MXC_CCM_CHSCCDR_IPU1_DI0_CLK_SEL_OFFSET);
reg |= (CHSCCDR_CLK_SEL_LDB_DI0
<< MXC_CCM_CHSCCDR_IPU1_DI1_CLK_SEL_OFFSET);
writel(reg, &mxc_ccm->chsccdr);
reg = IOMUXC_GPR2_BGREF_RRMODE_EXTERNAL_RES
| IOMUXC_GPR2_DI1_VS_POLARITY_ACTIVE_LOW
| IOMUXC_GPR2_DI0_VS_POLARITY_ACTIVE_LOW
| IOMUXC_GPR2_BIT_MAPPING_CH1_SPWG
| IOMUXC_GPR2_DATA_WIDTH_CH1_18BIT
| IOMUXC_GPR2_BIT_MAPPING_CH0_SPWG
| IOMUXC_GPR2_DATA_WIDTH_CH0_18BIT
| IOMUXC_GPR2_LVDS_CH1_MODE_DISABLED
| IOMUXC_GPR2_LVDS_CH0_MODE_ENABLED_DI0;
writel(reg, &iomux->gpr[2]);
reg = readl(&iomux->gpr[3]);
reg = (reg & ~(IOMUXC_GPR3_LVDS1_MUX_CTL_MASK
| IOMUXC_GPR3_HDMI_MUX_CTL_MASK))
| (IOMUXC_GPR3_MUX_SRC_IPU1_DI0
<< IOMUXC_GPR3_LVDS1_MUX_CTL_OFFSET);
writel(reg, &iomux->gpr[3]);
}
梳理了一下寄存器的值
diff --git a/board/freescale/mx6sabresd/mx6sabresd.c b/board/freescale/mx6sabresd/mx6sabresd.c
index cf84090..15252cb 100644
--- a/board/freescale/mx6sabresd/mx6sabresd.c
+++ b/board/freescale/mx6sabresd/mx6sabresd.c
@@ -1013,6 +1013,11 @@ static void setup_display(void)
reg |= MXC_CCM_CCGR3_LDB_DI0_MASK | MXC_CCM_CCGR3_LDB_DI1_MASK;
writel(reg, &mxc_ccm->CCGR3);
+ /* Turn on ipu1_ipu_di0_clk and ipu1_ipu_di1_clk */
+ reg = readl(&mxc_ccm->CCGR3);
+ reg |= MXC_CCM_CCGR3_IPU1_IPU_DI0_MASK | MXC_CCM_CCGR3_IPU1_IPU_DI1_MASK;
+ writel(reg, &mxc_ccm->CCGR3);
+
/* set LDB0, LDB1 clk select to 011/011 */
reg = readl(&mxc_ccm->cs2cdr);
reg &= ~(MXC_CCM_CS2CDR_LDB_DI0_CLK_SEL_MASK
@@ -1039,10 +1044,9 @@ static void setup_display(void)
| IOMUXC_GPR2_DATA_WIDTH_CH1_18BIT
| IOMUXC_GPR2_BIT_MAPPING_CH0_SPWG
| IOMUXC_GPR2_DATA_WIDTH_CH0_18BIT
- | IOMUXC_GPR2_LVDS_CH1_MODE_DISABLED
+ | IOMUXC_GPR2_LVDS_CH1_MODE_ENABLED_DI0
| IOMUXC_GPR2_LVDS_CH0_MODE_ENABLED_DI0;
writel(reg, &iomux->gpr[2]);
-
reg = readl(&iomux->gpr[3]);
reg = (reg & ~(IOMUXC_GPR3_LVDS1_MUX_CTL_MASK
| IOMUXC_GPR3_HDMI_MUX_CTL_MASK))
diff --git a/common/cmd_scr_menu.c b/common/cmd_scr_menu.c
index 9c31aec..a96d1b3 100644
--- a/common/cmd_scr_menu.c
+++ b/common/cmd_scr_menu.c
@@ -46,7 +46,7 @@ int mxcfb0(void)
break;
case '4':
setenv("panel","LDB-WXGA");
- setenv("mxcfb0","video=mxcfb0:dev=ldb,[email protected],if=RGB24,bpp=16");
+ setenv("mxcfb0","video=mxcfb0:dev=ldb,LDB-WXGA,if=RGB24,bpp=16");
break;
case '5':
//setenv("panel","HDMI");
然后uboot 选择屏幕参数为mxcfb0","video=mxcfb0:dev=ldb,LDB-WXGA,if=RGB24,bpp=16
LDB-WXGA为具体的屏幕参数结构体
边栏推荐
- MySQL review
- 無重複字符的最長字符串(LeetCode 3)
- Load/store instruction addressing mode of arm instruction set (1)
- Advantages and disadvantages of single page development and multi page development
- LeetCode_ String_ Simple_ 344. reverse string
- [foundation of deep learning] back propagation method (1)
- Left and right cases + rotating pictures of small dots + no time
- 安装canvas遇到的问题和运行项目遇到的报错
- The advantages of saving pointers when saving objects with vector and the use of reserve
- TinyMCE series (I) TinyMCE environment construction
猜你喜欢

LeetCode 497. Random points in non overlapping rectangles (prefix and + bisection)

创建Servlet项目

必杀技--使用FFmpeg命令快速精准剪切视频

QT adds a summary of the problems encountered in the QObject class (you want to use signals and slots) and solves them in person. Error: undefined reference to `vtable for xxxxx (your class name)‘

Cookie和Session

Analyze the implementation principle of the onion model, and connect the onion model in your own project

5G NR協議學習--TS38.211下行通道

LeetCode 890. 查找和替换模式(模拟+双哈希表)

MySQL review

Asynchronous path processing
随机推荐
LeetCode 1037. 有效的回旋镖(向量叉乘)
The advantages of saving pointers when saving objects with vector and the use of reserve
PDSCH related
[database] SQLite version upgrade and downgrade
第六章 数据类型(五)
Ficusjs series (I) introduction to ficusjs
如何确定首页和搜索之间的关系呢?首页与搜索的关系
传统的DOM渲染方式?
LeetCode 1037. Effective boomerang (vector cross product)
Elk construction guide
The second regular match is inconsistent with the first one, and the match in the regular loop is invalid
Chapter VI data type (V)
Chaîne la plus longue sans caractères dupliqués (leetcode 3)
Decision tree of machine learning
获取本机所有ipv4, ipv6地址
左右案例+小圆点的轮播图+无时间
屏蔽不显示VS警告warning
Win7 registers out of process components, services, and COM component debugging
QML学习 第一天
为什么新品发布上架之后会没有流量,新品应该怎么发布?