历史上的今天
今天是:2024年11月26日(星期二)
2018年11月26日 | 2416RBG接口LCD换成I80接口LCD驱动修改NK部分
2018-11-26 来源:eefocus
在 OEMInit 里面初始化 LCD 。
1、初始化 IO
volatile S3C2416_IOPORT_REG *s2450IOP = (S3C2416_IOPORT_REG *)OALPAtoVA(S3C2416_BASE_REG_PA_IOPORT, FALSE);
s2450IOP->MISCCR |= (1<<28); // select LCD controller for TFT lcd controller
s2450IOP->GPCUDP = 0xFFFFFFFF;
s2450IOP->GPCCON = 0xAAAAAAAA;
s2450IOP->GPDUDP = 0xFFFFFFFF;
s2450IOP->GPDCON = 0xAAAAAAAA;
s2450IOP->GPLCON = s2450IOP->GPLCON & ~(0x3ff<<20) | (0x1<< 28) | (0x1<< 26) | (0x1<< 24) | (0x1<< 22) | (0x1<< 20);
s2450IOP->GPLDAT |= (0x1f<<10);
s2450IOP->GPBDAT &= ~(1<<1);
2、初始化 LCD 控制寄存器和 EBOOT 的方法一样。
3、初始化 系统 LCD
void LCDC_Common_Init(void)
{
volatile S3C2416_LCD_REG *s2450LCD = (S3C2416_LCD_REG *)OALPAtoVA(S3C2416_BASE_REG_PA_LCD, FALSE);
s2450LCD->VIDCON0 = VIDCON0_S_CPU_IF_MAIN|VIDCON0_S_RGB_PAR|VIDCON0_S_VCLK_GATING_OFF|\
VIDCON0_S_CLKDIR_DIVIDED|VIDCON0_S_CLKSEL_HCLK;
// s2450LCD->WINCON0 |= (1<<23) ;
s2450LCD->SYSIFCON0 = (0<<16)|(0<<12)|(0<<8)|(0<<4)|(1<<2)|(1<<1)|(1);
s2450LCD->VIDTCON2 = ((320-1)<<11)|(240-1);
}
void Basic_Display_Setting(void)
{
volatile S3C2416_LCD_REG *s2450LCD = (S3C2416_LCD_REG *)OALPAtoVA(S3C2416_BASE_REG_PA_LCD, FALSE);
volatile S3C2416_INTR_REG *s2450INTR = (S3C2416_INTR_REG *)OALPAtoVA(S3C2416_BASE_REG_PA_INTR, FALSE);
int i,x,y;
unsigned short *pFB,*pFB1;
#if 1
s2450LCD->WINCON1 = (0<<23)|(0<<22)|(0<<16)|(1<<9)|(5<<2);
s2450LCD->VIDOSD1A =(0<<11)|(0);
s2450LCD->VIDOSD1B =((240-1)<<11)|(320-1);
s2450LCD->VIDW01ADD0 = (UINT32)IMAGE_FRAMEBUFFER_DMA_BASE;
s2450LCD->VIDW01ADD1 = (UINT32)IMAGE_FRAMEBUFFER_DMA_BASE + ((240*2)*320);
s2450LCD->VIDW01ADD2 = (0<<13)|(240*2);
s2450LCD->WIN1MAP=0;
s2450LCD->VIDOSD1C=0;
s2450LCD->W1KEYCON0=0;
s2450LCD->W1KEYCON1=0;
s2450INTR->INTMSK1 &= ~(1<<16);
s2450LCD->VIDINTCON = (0x3f<<20)|(1<<19)|(1<<18)|(1<<17)|(1<<0); //Main & Sub Sending complete
s2450INTR->INTSUBMSK |= (0x7 << 15); // MASK all LCD Sub Interrupt
s2450INTR->INTSUBMSK &= ~(1<<17);//i80 I/F
pFB = (unsigned short *)IMAGE_FRAMEBUFFER_UA_BASE;
wr_cmd(0x0020);
wr_data(0);
wr_cmd(0x0021);
wr_data(0);
wr_cmd(0x0022);
delayLoop(50000);
s2450LCD->SIFCCON0 &= ~(1<<6); // nWE disable
s2450LCD->SIFCCON0 |= (1<<8); // nCS0(Main) disable
s2450LCD->SIFCCON0 |= (1<<1); // RS high
s2450LCD->SIFCCON0 &= ~(1<<0); // command mode disable
for(y=0;y<320*240;y++)
{
// *pFB++ =kay16bpp[y];
*pFB++ =0x001f;
}
s2450LCD->WINCON1 |= 0x01;
s2450LCD->VIDCON0 |=0x03;
s2450LCD->CPUTRIGCON2 = 1;
//while(1);
#endif
}
到这里 LCD 应该跑起来了, 到最后的 DISPLAY 部分了
4、DISPLAY 文件夹部分。
发现 LDI_LTE480WV_RGB 类型的 LCD 刚好是 240*320 的 CPU 接口 LCD
结果把 LCD 类型设置为 LDI_LTE480WV_RGB 就可以了~!
史海拾趣
|
介绍了不需零线的三相交流电源相序检测保护集成电路TH221A的内部结构,引脚功能,设计特点和参数限制.给出了由两只TH221A组成的三相二重逆变桥输出的缺相和错相保护电路. … 查看全部问答> |
|
作者:邓宏杰先生 在MCU开发方面,以架构而言,可分为两大主流;RISC(Reduced Instruction Set Computer)与CISC(Complex Instruction Set Computer), RISC代表MCU的所有指令都是利用一些简单的指令组成的,简单的指令代表 MCU 的线路可以尽量做到最佳 ...… 查看全部问答> |
|
笔记本没串口,要向板子写程序,买了根USB转串口的线。 烧51程序时,直接接在板子的9针串口没问题。但一块板子是用PS/2的,于是多接一根,USB-232 232-PS/2,烧写就失败了。 还有,用超级终端和一块ARM板通信时,返回的都是乱码,到 ...… 查看全部问答> |
|
我是做APS.Net的,用的是C#,但是我对嵌入式系统的开发产生了浓厚的兴趣,想转投这个行业,看了看有C、C++、WinCE、嵌入式Linux、VxWorks等,请问这些哪个比较容易上手?在大连搞嵌入式开发的公司里面用哪个的比较多一些?… 查看全部问答> |
|
WINCE下SHFileOperation支持多文件复制吗? 如题,要做个类似资源管理器的程序 实现一些文件操作 当多选文件进行复制时,SHFileOperation还支持吗 有做过的指点下. 顺便问下 复制时好像阻塞在那,不能进行其他操作 怎么回事呢… 查看全部问答> |
|
我现在烧写2812 CE 的FLASH时,MC/MP置1,SCITXDA=1, 烧写FLASH 时,但烧写界面的右半面灰掉,无法选中进行烧些,左面的加密,部分界面却可以进行操作 ,只有UNLOCK键灰掉无法使用,但按UNLOCK键,总提示UNLOCK 失败,请问是什么原因?是否需要在插 ...… 查看全部问答> |




