当前位置:网站首页>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为具体的屏幕参数结构体
边栏推荐
- How to select standard products and non-standard products, the importance of selection, and how to layout the store
- 鸡尾酒排序
- [译] Go References - The Go Memory Model | golang官方文档中文翻译之内存模型
- Multiplication instruction of arm instruction set
- Pytoch notes
- Find the median of two ordered arrays (leetcode 4)
- The difference between bind, call and apply, and the encapsulation of bind()
- System. IO. Fileloadexception exception
- JS to load and display Excel files
- ARP protocol data processing process of neighbor subsystem
猜你喜欢

UML series articles (31) architecture modeling - deployment diagram

创建Servlet项目

QML first day

Ros- resolve error "tf2\u buffer\was not declared in this scope"

Common debugging tools and commands for ROS
![[foundation of deep learning] learning of neural network (4)](/img/8d/0e1b5d449afa583a52857b9ec7af40.png)
[foundation of deep learning] learning of neural network (4)

A. Prefix range

LeetCode 890. Find and replace mode (analog + double hash table)

TinyMCE realizes automatic uploading of pasted pictures

Ficusjs series (I) introduction to ficusjs
随机推荐
ACE配置IPv6, VS静态编译ACE库
机器学习之线性模型
Find the median of two ordered arrays (leetcode 4)
Kotlin扩展函数实现原理
LeetCode 1037. Effective boomerang (vector cross product)
this的指向
Create servlet project
Preliminary study on Regional Simulation of crop model
MySQL review
UML series articles (31) architecture modeling - deployment diagram
The first thing with a server
Data processing instructions of arm instruction set
PDSCH related
JS to load and display Excel files
Open source project - (erp+ Hotel + e-commerce) background management system
爱可可AI前沿推介(6.12)
机器学习基础概念
异步路径处理
Video JS library uses custom components
How to determine the relationship between home page and search? Relationship between homepage and search