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.

AM335x for LIDD mode



Hi TI

我們使用 ST7735R (120x168) TFT LCD 8080 mode

我參考了 AM335x TRM 13.3.4 LIDD controller 章節 以及 e2e.ti.com/.../849350 Leonerdo  提供的 drivers/lcd 

然後將 rasterDisplay.c  修改成 lidd mode 初始過程:     請幫我看一下對不對

image.h :

#ifndef CONFIG_SPL_BUILD
unsigned int const image1[] __attribute__((aligned(4)))= {
0x4000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,

};

#endif

#define SOC_LCDC_0_REGS                     0x4830E000

#define LCDC_CLKC_ENABLE   (0x6C)

#define LCDC_RASTER_CTRL   (0x28)

#define LCDC_LCD_CTRL   (0x4)

#define LCDC_LIDD_CTRL   (0xC)

#define LCDC_LCDDMA_CTRL   (0x40)

#define LCDC_CLKC_ENABLE_CORE   (0x00000001u)

#define LCDC_CLKC_ENABLE_DMA   (0x00000004u)

#define LCDC_CLKC_ENABLE_LIDD   (0x00000002u)

#define LCDC_RASTER_CTRL_RASTER_EN   (0x00000001u)

#define LCDC_LCD_CTRL_MODESEL_LIDD   (0x0u)

#define LCDC_LCD_CTRL_CLKDIV_SHIFT   (0x00000008u)

#define LCDC_LIDD_CTRL_LIDD_DMA_EN_ACTIVATE   (0x1u)

#define LCDC_LIDD_CTRL_LIDD_DMA_EN_SHIFT   (0x00000008u)

#define LCDC_LCDDMA_CTRL_FRAME_MODE   (0x00000001u)

#define LCDC_LCDDMA_CTRL_BURST_SIZE_SHIFT   (0x00000004u)

#define LCDC_LCDDMA_CTRL_TH_FIFO_READY_SHIFT   (0x00000008u)

#define LCDC_LIDD_CTRL_LIDD_MODE_SEL_SYNC_MPU80   (0x2u)

rasterDisplay.c:

                       # include "image.h"

                      int  Lcd_Init (){

                             unsigned int clkDiv;

                           /*  **Clock for DMA,LIDD and for Core(which encompasses
                               ** Raster Active Matrix and Passive Matrix logic)
                               ** enabled. */

                       HWREG(SOC_LCDC_0_REGS + LCDC_CLKC_ENABLE) =  (LCDC_CLKC_ENABLE_CORE | LCDC_CLKC_ENABLE_DMA  | LCDC_CLKC_ENABLE_LIDD);

                         /* Disable raster */

                       HWREG(SOC_LCDC_0_REGS + LCDC_RASTER_CTRL) &= ~LCDC_RASTER_CTRL_RASTER_EN;

               

                        /* Configure the pclk */

                        clkDiv = 192000000 / 23040000 ;

                       HWREG(SOC_LCDC_0_REGS + LCDC_LCD_CTRL) = LCDC_LCD_CTRL_MODESEL_LIDD;
                       HWREG(SOC_CLDC_0_REGS + LCDC_LCD_CTRL) |= (clkDiv <<  LCDC_LCD_CTRL_CLKDIV_SHIFT);

                      /* DMA enable in lidd mode */

                     HWREG(SOC_LCDC_0_REGS + LCDC_LIDD_CTRL) = (LCDC_LIDD_CTRL_LIDD_DMA_EN_ACTIVATE << LCDC_LIDD_CTRL_LIDD_DMA_EN_SHIFT);

                      /* Configuring DMA of LCD controller */
                      HWREG(SOC_LCDC_0_REGS + LCDC_LCDDMA_CTRL) = LCDC_LCDDMA_CTRL_FRAME_MODE | (4 <<LCDC_LCDDMA_CTRL_BURST_SIZE_SHIFT ) | (0 << LCDC_LCDDMA_CTRL_TH_FIFO_READY_SHIFT) | 0;
 
                          // Configuring the base ceiling
                         HWREG(SOC_LCDC_0_REGS + LCDC_LCDDMA_FB0_BASE) = (unsigned int)image1 ;
                         HWREG(baseAddr + LCDC_LCDDMA_FB0_CEILING) = (unsigned int)image1 + sizeof(image1) - 2;

                         HWREG(SOC_LCDC_0_REGS + LCDC_LCDDMA_FB1_BASE) = (unsigned int)image1 ;
                         HWREG(baseAddr + LCDC_LCDDMA_FB0_CEILING) = (unsigned int)image1 + sizeof(image1) - 2;

                         // Enable End of frame0/frame1 interrupt

                         HWREG(SOC_LCDC_0 + LCDC_IRQENABLE_SET) = (RASTER_END_OF_FRAME0_INT | RASTER_END_OF_FRAME1_INT);
                    

                        RasterModeConfig(SOC_LCDC_0_REGS, RASTER_DISPLAY_MODE_TFT_UNPACKED,
                                                            RASTER_PALETTE_DATA, RASTER_COLOR, RASTER_RIGHT_ALIGNED);  --> 這個 function 裡面是用 raster register 去做控制,我沒看到有 LIDD 的


    // Enable lidd
     HWREG(SOC_LCDC_0_REGS + LCDC_LIDD_CTRL) |= LCDC_LIDD_CTRL_LIDD_MODE_SEL_SYNC_MPU80;
}

     上面這些是我針對 LIDD mode 作的初始,但感覺我還是少了很多,拜託給我些 feedback ,謝謝。

 

     

  • Hi TI

    我最後參照 http://phytec.com/wiki/images/7/72/AM335x_techincal_reference_manual.pdf

    13.4.1.3.2 的 pseudo code

    ST7735R LCD 還是沒有任何畫面出來,已經確認過 pin mux 正確,LCD_EN 和 backlight pin 都有,我還需要作初始 LCD panel的動作嗎? 謝謝 

  • Hi TI

    最後用示波器量,只有 VSYNC 和 PCLK 在 u-boot 沒有訊號,特別是 PCLK,它到 kernel 中才有波型出來。 其它 LCD_DATA都有訊號

    請問我有哪邊需要修正呢? 謝謝。

  • Hi

    用了客戶的 image ,它們可以在 kernel 中顯示 LCD 畫面,量了 LCD_PCLK,在 u-boot 中訊號持平,後來進入到 kernel ,訊號被拉 high,就一直維持在 high,LCD就有畫面顯示出來,而我們的版本,在 u-boot 也是持平,進入到 kernel 出現 kernel panic ,導致 LCD_PCLK像是sin 波型一樣,但我希望 在u-boot 中就可以把 LCD_PCLK拉 high,不然一直持平感覺像是 LCD_PCLK 沒有作用一樣 ,請問我需要改些甚麼?  謝謝。

  • 硬件都是一样的吗?

    进入内核就kernel panic,感觉是LCD_PCLK还没配置成功呢

    在内核什么位置出现kernel panic的啊

  • Hi,

    你好,请问你解决了这个lidd的驱动了吗?我目前遇到一个问题就是什么信号都没有出来cs/wr/rd,一直是高电平,都没信号。我的pinmux设定:

    {"lcd_data0.lcd_data0", OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT
    | AM33XX_PULL_DISA},
    {"lcd_data1.lcd_data1", OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT
    | AM33XX_PULL_DISA},
    {"lcd_data2.lcd_data2", OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT
    | AM33XX_PULL_DISA},
    {"lcd_data3.lcd_data3", OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT
    | AM33XX_PULL_DISA},
    {"lcd_data4.lcd_data4", OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT
    | AM33XX_PULL_DISA},
    {"lcd_data5.lcd_data5", OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT
    | AM33XX_PULL_DISA},
    {"lcd_data6.lcd_data6", OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT
    | AM33XX_PULL_DISA},
    {"lcd_data7.lcd_data7", OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT
    | AM33XX_PULL_DISA},

    {"lcd_vsync.lcd_vsync", OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT},
    {"lcd_hsync.lcd_hsync", OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT},
    {"lcd_pclk.lcd_pclk", OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT},
    {"lcd_ac_bias_en.lcd_ac_bias_en", OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT},

    设定为使用DMA的模式。