求助各位高手:ili9320与S3c2410白屏问题
我用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------------------------------------------**
** **
************************************************************************/
下面是我的函数以及宏定义:
#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_HrGPCDAT |=(1<<9) //GPC9 is CS
#define LCD_CS_LrGPCDAT &= ~(1<<9)
#define LCD_WR_HrGPCDAT |=(1<<4) //GPC4 is WR
#define LCD_WR_LrGPCDAT &= ~(1<<4)
#define LCD_RD_HrGPCDAT |=(1<<11) //GPC11 is RD
#define LCD_RD_LrGPCDAT &= ~(1<<11)
#define LCD_RS_HrGPCDAT |=(1<<12) //GPC12 is RS
#define LCD_RS_LrGPCDAT &= ~(1<<12)
#define LCD_RESET_HrGPCDAT |=(1<<13) //GPC13 is reset signal to ili9320
#define LCD_RESET_LrGPCDAT &= ~(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=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);
} http://www.ourdev.cn/bbs/bbs_content.jsp?bbs_sn=1563849&bbs_page_no=1&search_mode=1&search_text=ILI9325&bbs_id=9999 谢谢楼上的兄弟,可是我看了您给的帖子,那里并不存在我这样的问题啊。我用的程序是在别人那里成功运行了的,为什么在我这里就不行了呢?信号的时序都是符合要求的,为什么白屏呢? 把你的文件以附件的形式贴出来,我帮你看看,绝对是你的程序有问题,我用2410测的是RGB接口,没有问题呀,你用的是MCU接口,与我的有点不同. 感谢楼上两位兄弟的热心帮助。
这是我的程序,现在终于可以显示了,最终是把CS引脚换了一下。程序除CS所处管脚以外基本未改。
点击此处下载 ourdev_501325.rar(文件大小:784K) (原文件名:lcd9320-test.rar) /cs用哪个脚都一样,程序我看了下,都大同小异,LCD模拟程序都是这样的,只是模拟口有不同,没有发现异常.
LCD如果有写寄存器指令动作,一定要先写0X22指令,再写显示数据,LCD才会显示.
调试时你可以在程序中设置断点,查看寄存器的值是否正常,另一方面用示波器看LCM引脚的波形是否正常,这样问题就可以推查到. 试试 这其实还得你自己找原因,因为硬件是你自己手上,不一下下试还真不好找问题在哪
就像我原来一样,我的lcd的数据端口用的是GPIOB(STM32F10x的),而B口上有两根线是用于调试的JTAG线,
上电默认是用于调试的,不能用于普通IO口,
而我一开始没注意,总也不行,也是白屏,弄了一天多时间,总算认真看了一下手册,才发现这个问题,把JTAG禁用,一切OK
页:
[1]