打印

临近DEADLINE但是ILI9325还是没有反应,求救!

[复制链接]
3155|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
seawindzjr|  楼主 | 2011-5-10 13:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 seawindzjr 于 2011-5-10 17:15 编辑

我是在黑金2开发板上做的设计
核心是EP2C8Q208C8
基于NIOS II的设计
软件是Q2 9.0和NIOS II IDE9.0
带电烧写完FLASH后TFT屏白屏没任何反应。
查看过之前的记录,如果白屏就是说连初始化都没有成功?据说初始化成功后起码会出现花屏的。
检查过接线和Q2里设计的底层,应该没有问题,当然也不排除是我水平不够,自己检查不出来,如有好心的大侠,希望可以帮忙看看是不是底层设计本身就有问题,我把工程放在附件, ComeON.rar (12.58 MB)
按照查到的信息,还有一种可能是时序问题,这方面我仔细阅读过中英说明书,然后做了一些修改,但是还是没有任何反应,这里将驱动贴上,希望大侠帮看看,是不是哪里时序还是没改对?我的系统时钟是100M的,所以进行30次循环应该有超过100NS低于500NS的延时了吧?
补充下问题,我在英文说明书里找到的8位模式应该是使用DB10-DB17的,但是我买到的模块连有插针的是DB0-DB7,这是不是有什么问题?

// 延时ns
void ili_Delayns(u32 n)
{
  int k;
  for(k=10*n;k>0;k--);
}
// 8位总线模式,通过两次写操作写入高8位和低8位
void ili_WrDB_2x8b(u8 DH, u8 DL)
{   
  ili_DB->DATA=DH;  
  ili_nWR=0;
  ili_Delayns(5);
    ili_nWR=1;
  ili_DB->DATA=DL;   
  ili_nWR=0;
  ili_Delayns(5);
    ili_nWR=1;
}

// 写命令
void ili_WrCmd(u8 DH, u8 DL)
{
  ili_RS=0;
  ili_nRD=1;
  ili_WrDB_2x8b(DH, DL);
}

// 写数据
void ili_WrData(u8 DH, u8 DL)
{
  ili_RS=1;
  ili_nRD=1;
  ili_WrDB_2x8b(DH, DL);
}

// 向DB总线写数据
void ili_WrDB_16b(u16 data)
{
  ili_WrData(data>>8, data);
}

// 写寄存器
void ili_WrReg(u8 cmd, u16 data)
{
  ili_WrCmd(0x00, cmd);
  ili_WrDB_16b(data);
}

// 延时ms
void ili_DelayMs(u32 n)
{
  usleep(n*1000);
}
// ILI93525初始化
void ili_Initial(void)
{
  // 硬件复位
  ili_nRST=0;
  ili_DelayMs(1);
  ili_nRST=1;
  // 打开片选,输出使能
  ili_nCS=0;
  DB_o_EN;
  //
  ili_WrReg(0xE3, 0x3008);
  ili_WrReg(0xE7, 0x0012);
  ili_WrReg(0xEF, 0x1231); // Set the internal timing
  ili_WrReg(0x01, 0x0000); // Set SS and SM bit
  ili_WrReg(0x02, 0x0700); // Set 1 line inversion
  // 屏幕旋转控制
  ili_WrReg(0x03, 0x1030); // TRI=0, DFM=x, BGR=0, HWM=0, ORG=0, I/D[1:0]=11, AM=0
#if   ID_AM==000
  ili_WrReg(0x03, 0x1000); // TRI=0, DFM=x, BGR=0, HWM=0, ORG=0, I/D[1:0]=00, AM=0
#elif ID_AM==001
  ili_WrReg(0x03, 0x1008); // TRI=0, DFM=x, BGR=0, HWM=0, ORG=0, I/D[1:0]=00, AM=0
#elif ID_AM==010
  ili_WrReg(0x03, 0x1010); // TRI=0, DFM=x, BGR=0, HWM=0, ORG=0, I/D[1:0]=01, AM=0
#elif ID_AM==011
  ili_WrReg(0x03, 0x1018); // TRI=0, DFM=x, BGR=0, HWM=0, ORG=0, I/D[1:0]=01, AM=1
#elif ID_AM==100
  ili_WrReg(0x03, 0x1020); // TRI=0, DFM=x, BGR=0, HWM=0, ORG=0, I/D[1:0]=10, AM=0
#elif ID_AM==101
  ili_WrReg(0x03, 0x1028); // TRI=0, DFM=x, BGR=0, HWM=0, ORG=0, I/D[1:0]=10, AM=1
#elif ID_AM==110
  ili_WrReg(0x03, 0x1030); // TRI=0, DFM=x, BGR=0, HWM=0, ORG=0, I/D[1:0]=11, AM=0
#elif ID_AM==111
  ili_WrReg(0x03, 0x1038); // TRI=0, DFM=x, BGR=0, HWM=0, ORG=0, I/D[1:0]=11, AM=1
#endif
  ili_WrReg(0x04, 0x0000); // Resize register.不重新调整图像
  ili_WrReg(0x08, 0x0207); // Set the back porch and front porch,FP=4,BP=4
  ili_WrReg(0x09, 0x0000); // Set non-display area refresh cycle ISC[3:0]
  ili_WrReg(0x0A, 0x0000); // FMARK function
  ili_WrReg(0x0C, 0x0000); // RGB interface setting
  ili_WrReg(0x0D, 0x0000); // Frame marker Position
  ili_WrReg(0x0F, 0x0000); // RGB interface polarity,no RGB
  // Power on sequence VGHVGL
  ili_WrReg(0x10, 0x0000); // SAP=0源驱动禁用?, BT[3:0], AP, DSTB, SLP, STB
  ili_WrReg(0x11, 0x0007); // DC1[2:0]=0, DC0[2:0]=0, VC[2:0]=101
  ili_WrReg(0x12, 0x0000); // VREG1OUT voltage
  ili_WrReg(0x13, 0x0000); // VDV[4:0]=00000 for VCOM amplitude
  ili_WrReg(0x07, 0x0001); // shut down screen for a while
  ili_DelayMs(50);         // Dis-charge capacitor power voltage
  ili_WrReg(0x10, 0x1290); // SAP=1, BT[3:0]=010, APE=1,AP[2:0]=001, DSTB=0, SLP=0, STB=0
  ili_WrReg(0x11, 0x0227); // DC1[2:0], DC0[2:0], VC[2:0]
  ili_DelayMs(50);
  ili_WrReg(0x12, 0x001D); // Internal reference voltage= Vci;
  ili_DelayMs(50);
  ili_WrReg(0x13, 0x1500); // Set VDV[4:0]=10101 for VCOM amplitude
  ili_WrReg(0x29, 0x0018); // Set VCM[5:0] for VCOMH
  ili_WrReg(0x2B, 0x000D); // Set Frame Rate
  ili_DelayMs(50);
  ili_WrReg(0x20, 0x0000);
  ili_WrReg(0x21, 0x013f);
  // GRAM起始位置
#if   ID_AM==000
  ili_WrReg(0x20, 0x00EF);
  ili_WrReg(0x21, 0x013F);
#elif ID_AM==001
  ili_WrReg(0x20, 0x00EF);
  ili_WrReg(0x21, 0x013F);
#elif ID_AM==010
  ili_WrReg(0x20, 0x0000);
  ili_WrReg(0x21, 0x013F);
#elif ID_AM==011
  ili_WrReg(0x20, 0x0000);
  ili_WrReg(0x21, 0x013F);
#elif ID_AM==100
  ili_WrReg(0x20, 0x00EF);
  ili_WrReg(0x21, 0x0000);
#elif ID_AM==101
  ili_WrReg(0x20, 0x00EF);
  ili_WrReg(0x21, 0x0000);
#elif ID_AM==110
  ili_WrReg(0x20, 0x0000);
  ili_WrReg(0x21, 0x0000);
#elif ID_AM==111
  ili_WrReg(0x20, 0x0000);
  ili_WrReg(0x21, 0x0000);
#endif
  // Adjust the Gamma Curve
  ili_WrReg(0x30, 0x0004);
  ili_WrReg(0x31, 0x0307);
  ili_WrReg(0x32, 0x0002);
  ili_WrReg(0x35, 0x0206);
  ili_WrReg(0x36, 0x0408);
  ili_WrReg(0x37, 0x0507);
  ili_WrReg(0x38, 0x0204);
  ili_WrReg(0x39, 0x0707);
  ili_WrReg(0x3C, 0x0405);
  ili_WrReg(0x3D, 0x0F02);
  // Set GRAM area
  ili_WrReg(0x50, 0x0000); // Horizontal GRAM Start Address
  ili_WrReg(0x51, 0x00EF); // Horizontal GRAM End Address
  ili_WrReg(0x52, 0x0000); // Vertical GRAM Start Address
  ili_WrReg(0x53, 0x013F); // Vertical GRAM Start Address
  ili_WrReg(0x60, 0xA700); // Gate Scan Line
  ili_WrReg(0x61, 0x0001); // NDL,VLE, REV
  ili_WrReg(0x6A, 0x0000); // Set scrolling line
  // Partial Display Control
  ili_WrReg(0x80, 0x0000);
  ili_WrReg(0x81, 0x0000);
  ili_WrReg(0x82, 0x0000);
  ili_WrReg(0x83, 0x0000);
  ili_WrReg(0x84, 0x0000);
  ili_WrReg(0x85, 0x0000);
  // Panel Control
  ili_WrReg(0x90, 0x0010); //RTNI[4:0]=10000,16CLOCK
  ili_WrReg(0x92, 0x0600); //MOWI[2:0]=110,非重叠区6clock
  ili_WrReg(0x93, 0x0003);
  ili_WrReg(0x95, 0x0110);
  ili_WrReg(0x97, 0x0000);
  ili_WrReg(0x98, 0x0000);
  ili_WrReg(0x07, 0x0133); // 262K color and display ON
  // 关闭片选
  ili_nCS=1;
}

// 设定Cursor
void ili_SetCursor(u8 x, u16 y)
{
  ili_WrReg(0x20, x);
  ili_WrReg(0x21, y);
}

// 设定显示区域
void ili_SetDispArea(u16 x0, u16 y0, u8 xLength, u16 yLength, u16 xOffset, u16 yOffset)
{
#if ID_AM==000
  ili_SetCursor(x0+xLength-1+xOffset, y0+yLength-1+yOffset);
#elif ID_AM==001
  ili_SetCursor(x0+xLength-1+xOffset, y0+yLength-1+yOffset);
#elif ID_AM==010
  ili_SetCursor(x0+xOffset, y0+yLength-1+yOffset);
#elif ID_AM==011
  ili_SetCursor(x0+xOffset, y0+yLength-1+yOffset);
#elif ID_AM==100
  ili_SetCursor(x0+xLength-1+xOffset, y0+yOffset);
#elif ID_AM==101
  ili_SetCursor(x0+xLength-1+xOffset, y0+yOffset);
#elif ID_AM==110
  ili_SetCursor(x0+xOffset, y0+yOffset);
#elif ID_AM==111
  ili_SetCursor(x0+xOffset, y0+yOffset);
#endif
  ili_WrReg(0x50, x0+xOffset);             // 水平 GRAM起始位置
  ili_WrReg(0x51, x0+xLength-1+xOffset);   // 水平GRAM终止位置
  ili_WrReg(0x52, y0+yOffset);             // 垂直GRAM起始位置
  ili_WrReg(0x53, y0+yLength-1+yOffset);   // 垂直GRAM终止位置
  ili_WrCmd(0x00, 0x22);
}         

// 清屏
void ili_ClearScreen(u32 bColor)
{
  u32 i;
  ili_nCS=0;
  DB_o_EN;
  ili_SetDispArea(0, 0, 240, 320, 0, 0);
  for (i=0; i<76800; i++) ili_WrDB_16b(bColor);
  ili_nCS=1;
}

// 彩条测试
void ili_DispColorBar(void)
{
  u16 V, H;
  ili_nCS=0;
  DB_o_EN;
  ili_SetDispArea(0, 0, 240, 320, 0, 0);
  for(H=0; H<240; H++)
  {
    for(V=0; V<40; V++) ili_WrDB_16b(White);
  }
  for(H=0;H<240;H++)
  {
    for(V=40; V<80; V++) ili_WrDB_16b(Black);
  }
  for(H=0;H<240;H++)
  {
    for(V=80; V<120; V++) ili_WrDB_16b(Blue);
  }
  for(H=0;H<240;H++)
  {
    for(V=120; V<160; V++) ili_WrDB_16b(Red);
  }
  for(H=0;H<240;H++)
  {
    for(V=160; V<200; V++) ili_WrDB_16b(Magenta);
  }
  for(H=0;H<240;H++)
  {
    for(V=200; V<240; V++) ili_WrDB_16b(Green);
  }
  for(H=0;H<240;H++)
  {
    for(V=240; V<280; V++) ili_WrDB_16b(Cyan);
  }
  for(H=0;H<240;H++)
  {
    for(V=280;V<320;V++) ili_WrDB_16b(Yellow);
  }
  ili_nCS=1;
}


顺便附上MAIN函数
int main(void)
{
  
  ili_Initial();            // 初始化ILI9325
  ili_DispColorBar();      //彩条测试
  while(1);
  return 0;
}

相关帖子

沙发
huxiwu| | 2011-5-13 08:44 | 只看该作者
时序有问题,还有刷屏前要写寄存器00x0022

使用特权

评论回复
板凳
huxiwu| | 2011-5-13 08:45 | 只看该作者
这个IC复位最好是按照 1 0 1来,看你那是0 1

使用特权

评论回复
地板
airwill| | 2011-5-27 20:46 | 只看该作者
一般这类问题, 都是时序问题.

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

1

帖子

1

粉丝