📄 b_lcddriver.c
字号:
#include "OMAP_MPU_Addr.h"
#include "pccdef.h"
#define FPGA_ADDRL *((volatile unsigned short *)(0x0E000000))
#define FPGA_ADDRH *((volatile unsigned short *)(0x0E000002))
#define FPGA_RDATAL *((volatile unsigned short *)(0x0E000008))
#define FPGA_RDATAH *((volatile unsigned short *)(0x0E00000A))
#define FPGA_CONF *((volatile unsigned char *)(0x0E00000C))
#define FPGA_CMD *((volatile unsigned short *)(0x0E000010))
#define FPGA_STATUS *((volatile unsigned char *)(0x0E000014))
#define FPGA_WDATAL *((volatile unsigned short *)(0x0E000020))
#define FPGA_WDATAH *((volatile unsigned short *)(0x0E000022))
#define FPGA_ADDR *((volatile unsigned long *)(0x0E000000))
#define FPGA_WDATA *((volatile unsigned long *)(0x0E000020))
#define FPGA_RDATA *((volatile unsigned long *)(0x0E000008))
#define CMD_WRITE 1
#define CMD_READ 2
#define CMD_CLEAR 3
#define CMD_Z1IRQ 4
#define CMD_Z2IRQ 5
#define CMD_AWKIRQ 6
#define CMD_DBRIRQ 7
#define CMD_DBTIRQ 8
void lcdwrite(unsigned long addr,unsigned short data)
{
FPGA_CONF=0x01; //16bit write;
FPGA_ADDR=addr;
FPGA_WDATAL=data;
FPGA_CMD=CMD_WRITE;
while(!(FPGA_STATUS&0x10));
}
void LCD_initialization()
{
int i;
lcdwrite(0xFFFE2008,0302); //Set EMIF CS2
lcdwrite(0xFFFF0000,0x0); //Clear MPUIO dir
lcdwrite(0xFFFF0004,0x2000); //Set MPUI013 as Reset
//Power ON Reset & Display OFF
lcdwrite(0x04000000,0x07); //Set DTE=0,D1-0=00,GON=0
lcdwrite(0x04000002,0x0);
lcdwrite(0x04000000,0x12); //Set PON=0
lcdwrite(0x04000002,0x0);
lcdwrite(0x04000000,0x13); //Set VCOMG=0
lcdwrite(0x04000002,0x0);
for(i=0;i<5000;i++); //wait for 10ms
//Instruction for setting before driving power supply
lcdwrite(0x04000000,0x11); //Set VC2-0=100
lcdwrite(0x04000002,0x04);
lcdwrite(0x04000000,0x12); //Set VRH3-0=1000
lcdwrite(0x04000002,0x08);
lcdwrite(0x04000000,0x13); //Set VCM4-0=10000,VDV4-0=10000
lcdwrite(0x04000002,0x1010);
//lcdwrite(0x04000000,0x10); //Set DK=1
//lcdwrite(0x04000002,0x04);
//Power supply instruction issue(1)
lcdwrite(0x04000000,0x11); //Set DC12-10=100,DC02-00=100
lcdwrite(0x04000002,0x0444);
lcdwrite(0x04000000,0x10); //Set AP2-0=100
lcdwrite(0x04000002,0x44);
lcdwrite(0x04000000,0x12); //Set PON=1
lcdwrite(0x04000002,0x18);
//wait for 40ms
for(i=0;i<20000;i++); //500 instuctions consume 1ms
//Power supply instruction issue(2)
lcdwrite(0x04000000,0x13); //Set VCOMG=1
lcdwrite(0x04000002,0x2010);
lcdwrite(0x04000000,0x10); //Set BT2-0=100,DK=0
lcdwrite(0x04000002,0x0440);
//Other mode setting instruction issue
//wait for 60ms
for(i=0;i<30000;i++); //500 instuctions consume 1ms
//The following setting are Display ON Sequence
lcdwrite(0x04000000,0x10); //Power control setting ,set SAP2-0=100
lcdwrite(0x04000002,0x4440);
lcdwrite(0x04000000,0x07); //Display on :GON=0,DTE=0,D1-0=01
lcdwrite(0x04000002,0x01);
for(i=0;i<25000;i++); //Wait for 3 frames=50ms(FLM=60HZ),500 instuctions consume 1ms
lcdwrite(0x04000000,0x07); //Display on :GON=1,DTE=0,D1-0=01
lcdwrite(0x04000002,0x21);
lcdwrite(0x04000000,0x07); //Display on :GON=1,DTE=0,D1-0=11
lcdwrite(0x04000002,0x23);
for(i=0;i<25000;i++); //Wait for 3 frames=50ms(FLM=60HZ),500 instuctions consume 1ms
lcdwrite(0x04000000,0x07); //Display on :GON=1,DTE=1,D1-0=11
lcdwrite(0x04000002,0x33);
for(i=0;i<25000;i++);
lcdwrite(0x04000000,0x01); //Set SS=1
lcdwrite(0x04000002,0x011D);
lcdwrite(0x04000000,0x03); //Set BGR=1
lcdwrite(0x04000002,0x1030);
lcdwrite(0x04000000,0x07); //Set REV=1
lcdwrite(0x04000002,0x37);
}
void LCD_Disp(u16 *lcdbuffer)
{
unsigned short i,j,temp,row;
u16 *p;
p=lcdbuffer;
for(i=0;i<0xDC;i++)
{
temp=i;
row=temp<<8;
lcdwrite(0x04000000,0x21); //Set the start address
lcdwrite(0x04000002,row);
lcdwrite(0x04000000,0x22); //write data to GRAM(96 pixels),from 0x2000-0x2060
FPGA_CONF=0x21; //16bit write;
FPGA_ADDR=0x04000002;
for(j=0;j<0xB0;j++)
{
//lcdwrite(0x04000002,lcdbuffer[i][j]); //the data indicates "red"
FPGA_WDATAL=*(p++);
//while(!(FPGA_STATUS&0x10));
}
}
}
void LCD_Dispbmp(u16 *lcdbuffer)
{
unsigned short i,j,temp,row;
u16 *p;
p=lcdbuffer;
for(i=0;i<0xDC;i++)
{
temp=i;
row=temp<<8;
lcdwrite(0x04000000,0x21); //Set the start address
lcdwrite(0x04000002,row);
lcdwrite(0x04000000,0x22); //write data to GRAM(96 pixels),from 0x2000-0x2060
FPGA_CONF=0x21; //16bit write;
FPGA_ADDR=0x04000002;
for(j=0;j<0xB0;j++)
{
//lcdwrite(0x04000002,lcdbuffer[i][j]); //the data indicates "red"
FPGA_WDATAL=*(p++);
//while(!(FPGA_STATUS&0x10));
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -