环境:ADS,裸机,NEWMSG9261开发板,群创10。1寸 BT101IW01,
调试遇到问题:1 脱机运行,NOR启动。 煎熬了2个星期 解决
2 TTL->LVDS信号匹配。现在大于7寸的液晶,量大价格低的都是LVDS接口,而ARM的LCD控制器只能RGB输出。我选用的是国半DS90C385A。
3 9261的LCD控制器在16bit模式下,RGB=5:5:5,高位空出。这个问题困了我2天,最后用示波器一位一位的查,再看手册才发现。图片用5:6:5转的话,颜色总是很别扭。
手册上写的 B [LD23D19] ;G [LD15D10] ;R[LD7D3] ,我一开始也是参考手册,最后出来R B颜色正好反了下。NEWMSG技术支持说 在硬件上把 B R 数据线交换下解决。
这个参考KEIL下LCD初始化,IAR 和ADS下的初始话都太罗嗦,这个简练,一个函数解决。
/*******************************************************************************
* Initialize the Graphic LCD controller *
* Parameter: *
* Return: *
*******************************************************************************/
void GLCD_init (void) {
/* Configure the PIO Lines for interfacing LCD */
AT91C_BASE_PIOB->IO_IDR = 0x1FFFFFFF;// Interrupt Disable Register
AT91C_BASE_PIOB->IO_PPUDR = 0x1FFFFFFF;// (PIO_PPUDR) Pull-up Disable Register
AT91C_BASE_PIOB->IO_ASR = 0x001F9F1F;//PB0~PB20 用外设A,PB21~28用外设B
AT91C_BASE_PIOB->IO_PDR = 0x1f9F9F1F;// (PIO_PDR) PIO Disable Register,禁止普通IO操作,使能外设控制
AT91C_BASE_PIOB->IO_IDR = 0x1f9F9F1F;// (PIO_IDR) Interrupt Disable Register 屏蔽中断
AT91C_BASE_PIOB->IO_PPUDR = 0x1FFFFFFF;
AT91C_BASE_PIOB->IO_BSR = 0x1F000000;// (PIO_BSR) Select B Register
AT91C_BASE_PMC->MC_SCER = AT91C_PMC_HCK1; /* Enable HCLOCK */
AT91C_BASE_PMC->MC_PCER = 1<<AT91C_ID_LCDC; /* Enable LCD clk */
AT91C_BASE_LCDC->LCDC_DMACON = 0; /* Disable DMA */
AT91C_BASE_LCDC->LCDC_PWRCON = 0; /* LCD off */
AT91C_BASE_LCDC->LCDC_LCDCON1 = (0x00<< 12) ; /* CLKVAL */
AT91C_BASE_LCDC->LCDC_LCDCON2 = (2 << 30) | /* MEMOR: Little Endian */
(0x01 << 15) | /* CLKMOD: Always active */
(0x00 << 12) | /* INVDVAL: Normal */
(0x01<< 11) | /* INVCLK: Normal */
(0x00 << 10) | /* INVLINE: Normal */
(0x00 << 9) | /* INVFRAME: Normal */
(0x00 << 8) | /* INVVD: Normal */
(0x04 << 5) | /* PIXELSIZE: 16 BPP, packed*/
(0x00 << 3) | /* IFWIDTH: 4-bit */ //2010-6-7 10:52:22 只在STN模式下有效
(0x00 << 2) | /* SCANMOD: Single Scan */
(0x02 << 0) ; /* DISTYPE: TFT */
AT91C_BASE_LCDC->LCDC_LCDFRCFG = ((LCD_W-1) << 21) | /* LINESIZE */
((LCD_H-1) << 0) ; /* LINEVAL */
AT91C_BASE_LCDC->LCDC_TIM1 = (0 << 24) | /* VHDLY */
(38 << 16) | /* VPW */
(6 << 8) | /* VBP */
(13 << 0) ; /* VFP */
AT91C_BASE_LCDC->LCDC_TIM2 = (39 << 21) | /* HFP */
(47 << 8) | /* HPW */
(43 << 0) ; /* HBP */
AT91C_BASE_LCDC->LCDC_CTRSTVAL = (0x80 << 0) ; /* CVAL */
AT91C_BASE_LCDC->LCDC_CTRSTCON = (0x01 << 3) | /* ENA */
(0x01 << 2) | /* POL */
(0x00 << 0) ; /* PS */
AT91C_BASE_LCDC->LCDC_FRMCFG = (0x02 << 24) | /* BRSTLN */
(LCD_W*LCD_H/2);/* FRMSIZE */
AT91C_BASE_LCDC->LCDC_FIFO = 512 - (2 * 4 + 3); /* FIFOTH */
AT91C_BASE_LCDC->LCDC_BA1 = (unsigned int) LCD_BUF0; /* DMA Base Addr */
AT91C_BASE_LCDC->LCDC_DMACON = AT91C_LCDC_DMAEN; /* Enable DMA */
AT91C_BASE_LCDC->LCDC_PWRCON = (0x0C << 1) | /* GUARDTIME */
(0x01 << 0) ; /* LCD_PWR: On */
frameBuffer16BitTft240320 = (unsigned short (*)[LCD_W])LCD_BUF0;
}
现在流行有图有真相,呵呵。
(原文件名:1.JPG) |
|
|
|