|
我用s2410连接9320之后是白屏,请各位高手指教问题出在哪里?
硬件连接如下:
s2410 9320显示模块
===================================
gpc4 WR
gpc8 lcd interface mode select 0:16bits 1:8bits
gpc9 CS
gpc11 RD
gpc12 RS
gpc13 Reset
16根数据线接GPDDAT口 56000034
连接后通电,结果是白屏,我用ADS跟踪了内存,在GPCCON相应的56000024的位置的各个管脚变化是正常的。不仅如此,还用电表直接测量LCD模块的WR,CS,RS,Reset引脚的电平变化都是正常的,符合9320的写入信号规程(见下图)。在DB0-15的各个管脚也能量出正确的电平,例如画一条红线(调用函数Lcd_midline(0xF800)),则在LCD模块的DB15-0管脚量出数据为F800, 可这样为什么还是白屏?
/************************************************************************
** **
** nCS ----\__________________________________________/------- **
** RS ------\____________/----------------------------------- **
** nRD ------------------------------------------------------- **
** nWR --------\_______/--------\_____/----------------------- **
** DB[0:15] ---------[index]----------[data]----------------------- **
** **
************************************************************************/
下面是我的函数以及宏定义:
#define LCD_LIM_16 rGPCDAT &= ~(1<<8) //GPC8 is to choose the interface mode. low level means 16bits mode. high means 8bits.
#define LCD_CS_H rGPCDAT |= (1<<9) //GPC9 is CS
#define LCD_CS_L rGPCDAT &= ~(1<<9)
#define LCD_WR_H rGPCDAT |= (1<<4) //GPC4 is WR
#define LCD_WR_L rGPCDAT &= ~(1<<4)
#define LCD_RD_H rGPCDAT |= (1<<11) //GPC11 is RD
#define LCD_RD_L rGPCDAT &= ~(1<<11)
#define LCD_RS_H rGPCDAT |= (1<<12) //GPC12 is RS
#define LCD_RS_L rGPCDAT &= ~(1<<12)
#define LCD_RESET_H rGPCDAT |= (1<<13) //GPC13 is reset signal to ili9320
#define LCD_RESET_L rGPCDAT &= ~(1<<13)
/**************************************************************
320×240 16Bpp TFT LCD数据和控制端口初始化
**************************************************************/
static void Lcd_Port_Init(void)
{
rGPCUP = 0x0; // enable Pull-up register
rGPCCON = 0xa565a9aa;
rGPDUP = 0x0 ; // enable Pull-up register
rGPDCON=0x55555555; //Initialize GPD
}
9320初始化:
static void Lcd_Init(void)
{
LCD_LIM_16;
LCD_Delay(15);
LCD_RESET_H;
LCD_Delay(1);
LCD_RESET_L;
LCD_Delay(15); //>1ms
LCD_RESET_H;
LCD_Delay(150); //>10ms
LCD_SetReg(0xE5,0x8000);
LCD_SetReg(0x00,0x0001);//开启内部osc
LCD_Delay(150); //延时10毫秒等待晶体稳定
LCD_SetReg(0x2B,0x0010);
LCD_SetReg(0x01,0x0100);//driver output control,SS=1 S极输出移动方向S720到S1. SM=0 【GS=0】 G极扫描方向从上到下(详细DATASHEET)
LCD_SetReg(0x02,0x0700);//LCD driving control B/C=1 EOR=1 set the line inversion
LCD_SetReg(0x03,0x1230);//DFM=0,TRI=0,SWAP=1,16位system interface 写GRAM时翻转RGB数据到BRG数据
//HWM=0,高速GRAM写操作禁止,高速写操作是否是激活RBG或其他动态画面显示模式?AM=0,ID[1.0]=11 AC由左到右又下到上自增
LCD_SetReg(0x04,0x0000);//比例缩放设置
LCD_SetReg(0x08,0x0202);
LCD_SetReg(0x09,0x0000);
LCD_SetReg(0x0A,0x0000);
LCD_SetReg(0x0C,0x0000);//RIM1,RIM0=00,18bit RGB interface(01--16bit). DM1,DM0=00,internal clock (if 10,use RGB clock.moving pics.)
LCD_SetReg(0x0D,0x0000);
LCD_SetReg(0x0F,0x0000);//RBG 接口极性设置 DOTCLK ENABLE HSYNC
LCD_SetReg(0x50,0x0000);//水平 GRAM起始位置
LCD_SetReg(0x51,0x00EF);//水平GRAM终止位置
LCD_SetReg(0x52,0x0000);//垂直GRAM起始位置
LCD_SetReg(0x53,0x013F);//垂直GRAM终止位置
LCD_SetReg(0x60,0x2700);//G扫描设置 从G1开始
LCD_SetReg(0x61,0x0001);//Enables the grayscale inversion of the image by setting REV=1
LCD_SetReg(0x6A,0x0000);//不使用卷曲功能
LCD_SetReg(0x80,0x0000);
LCD_SetReg(0x81,0x0000);
LCD_SetReg(0x82,0x0000);
LCD_SetReg(0x83,0x0000);
LCD_SetReg(0x84,0x0000);
LCD_SetReg(0x85,0x0000);
LCD_SetReg(0x90,0x0010);
LCD_SetReg(0x92,0x0000);
LCD_SetReg(0x93,0x0003);
LCD_SetReg(0x95,0x0110);
LCD_SetReg(0x97,0x0000);
LCD_SetReg(0x98,0x0000);
LCD_SetReg(0x10,0x0000);//power control 1
LCD_SetReg(0x11,0x0000);//power control 2
LCD_SetReg(0x12,0x0000);//...
LCD_SetReg(0x13,0x0000);//power control 4
LCD_Delay(2000); //>200ms
LCD_SetReg(0x10,0x17B0);
LCD_SetReg(0x11,0x0004);
LCD_Delay(550); //>50ms
LCD_SetReg(0x12,0x013E);
LCD_Delay(550); //>50ms
LCD_SetReg(0x13,0x1F00);
LCD_SetReg(0x29,0x000F);
LCD_Delay(550); //>50ms
LCD_SetReg(0x20,0x0000);//GRAM水平起始位置
LCD_SetReg(0x21,0x0000);
LCD_SetReg(0x30,0x0204);
LCD_SetReg(0x31,0x0001);
LCD_SetReg(0x32,0x0000);
LCD_SetReg(0x35,0x0206);
LCD_SetReg(0x36,0x0600);
LCD_SetReg(0x37,0x0500);
LCD_SetReg(0x38,0x0505);
LCD_SetReg(0x39,0x0407);
LCD_SetReg(0x3C,0x0500);
LCD_SetReg(0x3D,0x0503);
LCD_SetReg(0x07,0x0173);//display control 1 写入0173是显示当前GRAM内容 写入0073是不显示当前
}
写寄存器:
//------------------------------------------------------------------
// 函数名 : void LCD_SetReg(INT8U addr,INT16U dat)
// 输入 : addr :寄存器地址 dat :写入的数据
// 输出 : Null
// 全局变量: Null
// 功能描述: 设寄存器值
//------------------------------------------------------------------
void LCD_SetReg(U16 addr,U16 dat)
{
LCD_CS_L;
LCD_RS_L;
LCD_WR_L;
LCD_PORT =addr;
LCD_WR_H;
LCD_RS_H;
LCD_WR_L;
LCD_PORT =dat;
LCD_WR_H;
LCD_CS_H;
}
/**************************************************************
320×240 16Bpp TFT LCD单个象素的显示数据输出
**************************************************************/
static void PutPixel(U32 x,U32 y,U32 color)
{
LCD_SetReg(0x20,x);
LCD_SetReg(0x21,y);
LCD_SetReg(0x22,color);
}
static void Lcd_midline(U16 c) //在屏幕中央画一条线
{
unsigned int x;
for(x = 0 ; x < SCR_XSIZE_TFT_240320 ; x++)
PutPixel(x,160,c);
} |
阿莫论坛20周年了!感谢大家的支持与爱护!!
曾经有一段真挚的爱情摆在我的面前,我没有珍惜,现在想起来,还好我没有珍惜……
|