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 ,謝謝。