7957|16

85

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

如何显示开机logo? [复制链接]


用的是i.mx35的ARM,怎么显示开机logo,需要在BSP中添加什么代码?

最新回复

告诫楼上,买板子还是买评估板吧。我也是开机logo搞不定啊!   详情 回复 发表于 2010-6-22 10:56
点赞 关注

回复
举报

77

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
顶,学习,刷分哈
 
 

回复

74

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
freescale的芯片logo是在EBOOT里面显示的。先把图片换成C语言数组,在eboot中,OEMPlatformInit里面最开始的时候就有刷LCDbuffer的地方。
 
 
 

回复

77

帖子

0

TA的资源

一粒金砂(初级)

4
 
bootloader 或者OAL 在初始化LCD之后。
 
 
 

回复

74

帖子

0

TA的资源

一粒金砂(初级)

5
 
引用 2 楼 kacyquan 的回复:
freescale的芯片logo是在EBOOT里面显示的。先把图片换成C语言数组,在eboot中,OEMPlatformInit里面最开始的时候就有刷LCDbuffer的地方。

顶下,没用过,听说freescale很大,编译起来时间很长
 
 
 

回复

82

帖子

0

TA的资源

一粒金砂(初级)

6
 
学习,mark
 
 
 

回复

83

帖子

0

TA的资源

一粒金砂(初级)

7
 

我也知道在OEMPlatformInit函数中实现InitDisplay函数,实现LCD的初始化后填入图片信息。请问有LCD
的初始化代码能贴出来看下吗?

引用 2 楼 kacyquan 的回复:
freescale的芯片logo是在EBOOT里面显示的。先把图片换成C语言数组,在eboot中,OEMPlatformInit里面最开始的时候就有刷LCDbuffer的地方。
 
 
 

回复

48

帖子

0

TA的资源

一粒金砂(初级)

8
 
引用 6 楼 winamp123 的回复:
我也知道在OEMPlatformInit函数中实现InitDisplay函数,实现LCD的初始化后填入图片信息。请问有LCD
的初始化代码能贴出来看下吗?


引用 2 楼 kacyquan 的回复:
freescale的芯片logo是在EBOOT里面显示的。先把图片换成C语言数组,在eboot中,OEMPlatformInit里面最开始的时候就有刷LCDbuffer的地方。


您是说LCD的初始化代码吗?在SRC\OALlib的文件夹下面有。如果楼主需要,把邮箱告诉我,我发给你一个。
 
 
 

回复

82

帖子

0

TA的资源

一粒金砂(初级)

9
 
引用 4 楼 gaoyugaoyugaoyu 的回复:
引用 2 楼 kacyquan 的回复:
freescale的芯片logo是在EBOOT里面显示的。先把图片换成C语言数组,在eboot中,OEMPlatformInit里面最开始的时候就有刷LCDbuffer的地方。

顶下,没用过,听说freescale很大,编译起来时间很长


还好吧~~和三星也差不多啊,我觉得。
 
 
 

回复

72

帖子

0

TA的资源

一粒金砂(初级)

10
 
BOOL OALDisplaySplashScreen(void)
{
    int screenWidth, screenHeight, screenBpp, pixelBytes;
    int bmpWidth, bmpHeight;
    int w, w1;
    int h;
    int i, j;
    BOOL success = FALSE;
    BYTE *pfb;

//    OALMSG(OAL_FUNC, (TEXT("+OALDisplaySplashScreen\r\n")));
        OALMSG(OAL_INFO, (TEXT("+OALDisplaySplashScreen\r\n")));
       
    screenWidth = BSP_PREF_DISPLAY_WIDTH;
    screenHeight = BSP_PREF_DISPLAY_HEIGHT;
    screenBpp = BSP_PREF_DISPLAY_BPP;
    pixelBytes = LCDC_PIXEL_SIZE_BYTES(screenBpp);

    // Initialise display controller
    if(!LCDCInitialize(screenWidth, screenHeight, screenBpp))
    {
//        OALMSG(OAL_WARN, (TEXT("OALDisplaySplashScreen: DisplayInitialize failed.\r\n")));
                OALMSG(OAL_INFO, (TEXT("OALDisplaySplashScreen: DisplayInitialize failed.\r\n")));
        goto displaycleanup;
    }

    // bitmap_height, bitmap_width contain the width, height of the splashscreen
    // display. See splashscreen.c
    bmpWidth  = (bitmap_width  > screenWidth)  ? screenWidth  : bitmap_width;
    bmpHeight = (bitmap_height > screenHeight) ? screenHeight : bitmap_height;

    w = (screenWidth - bmpWidth) / 2;
    h = (screenHeight - bmpHeight) / 2;
    w1 = ((screenWidth - bmpWidth) % 2 == 0)? w : w + 1;
   
    pfb = (BYTE *)IMAGE_SHARE_FRAMEBUFFER_RAM_UA_START;

    // Pre-set the screen background with white color
    memset(pfb, 0xff, screenWidth * screenHeight * pixelBytes);

    // Copy and centre splash screen in framebuffer.
    j = bmpWidth * pixelBytes;
    pfb += h * screenWidth * pixelBytes;
    for(i = 0; i < bmpHeight; i++)
    {
        pfb += w * pixelBytes;
        memcpy(pfb, &bitmap_data[i * bitmap_width], j);
        pfb += j + w1 * pixelBytes;
    }
   
    // Enable display controller.
    LCDCEnable(TRUE);
    success = TRUE;

displaycleanup:
//    OALMSG(OAL_FUNC, (TEXT("-DisplaySplashScreen(%d)\r\n"), success));
    OALMSG(OAL_INFO, (TEXT("-DisplaySplashScreen(%d)\r\n"), success));
    return success;
}

“bitmap_data”这个就是logo的C数组
 
 
 

回复

61

帖子

0

TA的资源

一粒金砂(初级)

11
 
哈哈~~顶kacyquan!!
 
 
 

回复

59

帖子

0

TA的资源

一粒金砂(初级)

12
 

感谢kacyquan的回复。你有没 LCDCInitialize(screenWidth, screenHeight, screenBpp)的代码,

关键是想看下如何设置寄存器,我在SRC\OALlib的文件夹下面没有找到相关代码!

引用 9 楼 kacyquan 的回复:
BOOL OALDisplaySplashScreen(void)
{
  int screenWidth, screenHeight, screenBpp, pixelBytes;
  int bmpWidth, bmpHeight;
  int w, w1;
  int h;
  int i, j;
  BOOL success = FALSE;
  BYTE *pfb;

……
 
 
 

回复

73

帖子

0

TA的资源

一粒金砂(初级)

13
 
引用 11 楼 winamp123 的回复:
感谢kacyquan的回复。你有没 LCDCInitialize(screenWidth, screenHeight, screenBpp)的代码,

关键是想看下如何设置寄存器,我在SRC\OALlib的文件夹下面没有找到相关代码!


引用 9 楼 kacyquan 的回复:
BOOL OALDisplaySplashScreen(void)
{
int screenWidth……


你用的是wince5.0还是6.0的啊?如果是5.0应该在src\kernel\oal里面。我这个代码不是mx35的,是27的代码。
 
 
 

回复

58

帖子

0

TA的资源

一粒金砂(初级)

14
 
static BOOL LCDCInitialize(int width, int height, int bpp)
{
    BOOL rc = TRUE;
    UINT32 pixelBytes;
    UINT32 uLCDRefClk;
    CSP_LCDC_REGS *pLCDC;
    BSP_ARGS *pBspArgs = (BSP_ARGS *)OALPAtoUA(IMAGE_SHARE_ARGS_RAM_PA_START);

    pixelBytes = LCDC_PIXEL_SIZE_BYTES(bpp);
    pLCDC = (CSP_LCDC_REGS *)OALPAtoUA(CSP_BASE_REG_PA_LCDC);
   
    // Disable LCDC clock
    LCDCEnable(FALSE);

    // Disable self refresh
    pLCDC->RMCR &= ~CSP_BITFMASK(LCDC_RMCR_SELF_REF);

    pLCDC->SSAR = IMAGE_SHARE_FRAMEBUFFER_RAM_PA_START;

    pLCDC->SR = CSP_BITFVAL(LCDC_SR_YMAX, BSP_PREF_DISPLAY_HEIGHT) |
                CSP_BITFVAL(LCDC_SR_XMAX, (BSP_PREF_DISPLAY_WIDTH / 16) ) |
                CSP_BITFVAL(LCDC_SR_BUSSIZE, LCDC_SR_BUSSIZE_32BIT);

    pLCDC->VPWR = BSP_PREF_DISPLAY_WIDTH / (4 / pixelBytes);

    // disable cursor
    pLCDC->CPR = CSP_BITFVAL(LCDC_CPR_OP, LCDC_CPR_OP_DISABLE) |
                 CSP_BITFVAL(LCDC_CPR_CC, LCDC_CPR_CC_DISABLED);


    // Disable cursor blink, all settings default
    pLCDC->CWHBR = CSP_BITFVAL(LCDC_CWHBR_BK_EN, LCDC_CWHBR_BK_EN_DISABLE) |
                   CSP_BITFVAL(LCDC_CWHBR_CW, LCDC_CWHBR_CW_CURSOR_DISABLED) |
                   CSP_BITFVAL(LCDC_CWHBR_CH, LCDC_CWHBR_CH_CURSOR_DISABLED) |
                   CSP_BITFVAL(LCDC_CWHBR_BD, LCDC_CWHBR_BD_MAX_DIV);

    // CCMR: Default as on reset
    pLCDC->CCMR = 0;

    // Set Pixel polarity bit since color is inverted in lcd board.
    uLCDRefClk = pBspArgs->clockFreq[DDK_CLOCK_SIGNAL_PERDIV3];
       
#ifdef VGA_DISPLAY
        OALMSG(1, (TEXT("VGA_DISPLAY defined\r\n")));
#else
        OALMSG(1, (TEXT("VGA_DISPLAY not defined\r\n")));
#endif


    pLCDC->PCR =
#ifdef VGA_DISPLAY
                 CSP_BITFVAL(LCDC_PCR_SHARP, LCDC_PCR_SHARP_DISABLE) |
                 CSP_BITFVAL(LCDC_PCR_PIXPOL, LCDC_PCR_PIXPOL_ACTIVE_HIGH) |                 
#else
                 CSP_BITFVAL(LCDC_PCR_SHARP, LCDC_PCR_SHARP_ENABLE) |
//                 CSP_BITFVAL(LCDC_PCR_PIXPOL, LCDC_PCR_PIXPOL_ACTIVE_LOW) |
                                  CSP_BITFVAL(LCDC_PCR_PIXPOL, LCDC_PCR_PIXPOL_ACTIVE_HIGH) |
#endif
                 CSP_BITFVAL(LCDC_PCR_SCLKSEL, LCDC_PCR_SCLKSEL_ENABLE) |
                 CSP_BITFVAL(LCDC_PCR_ACDSEL, LCDC_PCR_ACDSEL_USE_LPHSYNC) |
                 CSP_BITFVAL(LCDC_PCR_REV_VS, LCDC_PCR_REV_VS_NORMAL) |
                 CSP_BITFVAL(LCDC_PCR_SWAP_SEL, LCDC_PCR_SWAP_SEL_16BPP) |
                 CSP_BITFVAL(LCDC_PCR_END_SEL, LCDC_PCR_END_SEL_LITTLE_ENDIAN) |
                 CSP_BITFVAL(LCDC_PCR_SCLKIDLE, LCDC_PCR_SCLKIDLE_DISABLE) |
                 CSP_BITFVAL(LCDC_PCR_OEPOL, LCDC_PCR_OEPOL_ACTIVE_LOW) |
                 CSP_BITFVAL(LCDC_PCR_CLKPOL, LCDC_PCR_CLKPOL_NEG_EDGE) |
                 CSP_BITFVAL(LCDC_PCR_LPPOL, LCDC_PCR_LPPOL_ACTIVE_LOW) |
                 CSP_BITFVAL(LCDC_PCR_FLMPOL, LCDC_PCR_FLMPOL_ACTIVE_HIGH) |
                 CSP_BITFVAL(LCDC_PCR_PBSIZ, LCDC_PCR_PBSIZ_8BIT) |
                 CSP_BITFVAL(LCDC_PCR_COLOR, LCDC_PCR_COLOR_COLOR) |
                 CSP_BITFVAL(LCDC_PCR_TFT, LCDC_PCR_TFT_ACTIVE) |
                 CSP_BITFVAL(LCDC_PCR_PCD, LCDC_PCD_VALUE(uLCDRefClk, BSP_PIXEL_CLOCK_FREQ));
    switch(bpp)
    {
        case 1:
            pLCDC->PCR |= CSP_BITFVAL(LCDC_PCR_BPIX, LCDC_PCR_BPIX_1BPP);
            break;
        case 2:
            pLCDC->PCR |= CSP_BITFVAL(LCDC_PCR_BPIX, LCDC_PCR_BPIX_2BPP);
            break;
        case 4:
            pLCDC->PCR |= CSP_BITFVAL(LCDC_PCR_BPIX, LCDC_PCR_BPIX_4BPP);
            break;
        case 8:
            pLCDC->PCR |= CSP_BITFVAL(LCDC_PCR_BPIX, LCDC_PCR_BPIX_8BPP);
            break;
        case 12:
            pLCDC->PCR |= CSP_BITFVAL(LCDC_PCR_BPIX, LCDC_PCR_BPIX_12BPP);
            break;
        case 16:
            pLCDC->PCR |= CSP_BITFVAL(LCDC_PCR_BPIX, LCDC_PCR_BPIX_16BPP);
            break;
        case 18:
            pLCDC->PCR |= CSP_BITFVAL(LCDC_PCR_BPIX, LCDC_PCR_BPIX_18BPP);
            break;
        default:
            goto cleanup;
    }
   
    pLCDC->HCR = CSP_BITFVAL(LCDC_HCR_H_WIDTH, 10) |
                 CSP_BITFVAL(LCDC_HCR_H_WAIT_1, 8) |
                 CSP_BITFVAL(LCDC_HCR_H_WAIT_2, 0);

    pLCDC->VCR = CSP_BITFVAL(LCDC_VCR_V_WIDTH, 2) |
                 CSP_BITFVAL(LCDC_VCR_V_WAIT_1, 3) |
                 CSP_BITFVAL(LCDC_VCR_V_WAIT_2, 4) ;
   

    pLCDC->PCR =0xFA6000C3;
    pLCDC->HCR =0x28000400;
    pLCDC->VCR =0x08000304;
   
    // POR: 0 as reset default
    pLCDC->POR = CSP_BITFVAL(LCDC_POR_POR, 0);

    pLCDC->SCR = CSP_BITFVAL(LCDC_SCR_GRAY1, 0) |
                 CSP_BITFVAL(LCDC_SCR_GRAY2, 0) |
                 CSP_BITFVAL(LCDC_SCR_REV_TOGGLE_DELAY, 3) |
                 CSP_BITFVAL(LCDC_SCR_CLS_RISE_DELAY, 18) |
                 CSP_BITFVAL(LCDC_SCR_PS_RISE_DELAY, 1);

    // Enable contrast for backlight control. Initialize to half power
    pLCDC->PCCR = CSP_BITFVAL(LCDC_PCCR_PW, LCDC_PCCR_PW_MAX) |
                  CSP_BITFVAL(LCDC_PCCR_CC_EN, LCDC_PCCR_CC_EN_ENABLE) |
                  CSP_BITFVAL(LCDC_PCCR_SCR, LCDC_PCCR_SCR_PIXELCLK) |
                  CSP_BITFVAL(LCDC_PCCR_LDMSK, LCDC_PCCR_LDMSK_DISABLE) |
                  CSP_BITFVAL(LCDC_PCCR_CLS_HI_WIDTH, 169);

   
    // Settings for heavily loaded bus with SDRAM access.
    // dynamic burst, High mark = 3, low mark = 1D (best setting after testing)
    pLCDC->DCR = CSP_BITFVAL(LCDC_DCR_BURST, LCDC_DCR_BURST_DYNAMIC) |
                 CSP_BITFVAL(LCDC_DCR_HM, 0x03) |
                 CSP_BITFVAL(LCDC_DCR_TM, 0x08);
    // Set for interrupt on output of last data to panel, end of graphic window
    pLCDC->ICR = CSP_BITFVAL(LCDC_ICR_GW_INT_CON, LCDC_ICR_GW_INT_CON_END) |
                 CSP_BITFVAL(LCDC_ICR_INTSYN, LCDC_ICR_INTSYN_PANEL) |
                 CSP_BITFVAL(LCDC_ICR_INTCON, LCDC_ICR_INTCON_BOF);

    // Disable All interrupts
    pLCDC->IER = 0;

    // Setup graphic window DMA
    // Don't change unless primary buffer DMA settings are changed
    pLCDC->GWDCR =  CSP_BITFVAL(LCDC_GWDCR_GWBT, LCDC_GWDCR_GWBT_DYNAMIC) |
                    CSP_BITFVAL(LCDC_GWDCR_GWHM, 0x02) |
                    CSP_BITFVAL(LCDC_GWDCR_GWTM, 0x10);

    // Disable graphic window.
    pLCDC->GWCR = CSP_BITFVAL(LCDC_GWCR_GWE, 0);

    // We're done
    rc = TRUE;
cleanup:
    OALMSG(!rc, (TEXT("LCDCInitialize: rc (%d)\r\n"), rc));
    return rc;
}
#else
 
 
 

回复

57

帖子

0

TA的资源

一粒金砂(初级)

15
 
正要研究这个问题呢,收藏了。
 
 
 

回复

58

帖子

0

TA的资源

一粒金砂(初级)

16
 
碰到了同样的问题,买了上海辰汉的一款35开发板,真是垃圾。后悔死了的。碰到问题叫你写邮件,写完邮件给你回复是后续解决完通知你。告诫楼上是不是也买的那家啊。呵呵。
 
 
 

回复

77

帖子

0

TA的资源

一粒金砂(初级)

17
 
告诫楼上,买板子还是买评估板吧。我也是开机logo搞不定啊!
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/7 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表