打印
[ZLG-ARM]

求助,2410不能向ili9320写入数据

[复制链接]
1485|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
synics|  楼主 | 2009-8-16 14:09 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
连线关系(因为买的9320模块仅仅留出了CS,RS,WD,RD,BL,Reset等控制口,只能用16位总线方式传递数据):

           2410                        9320  
====================================================
      GPD15-GPD0(vd23-vd8)    d15-d0
          GPC8(vd0)                        BL
          GPC9(vd1)                       CS  
          GPC10(vd2)                     WR
          GPC11(vd3)                     RD
          GPC12(vd4)                     RS
          GPC13(vd5)                     Reset

我的想法是通过2410的GPDDAT端口(0x56000034)向9320的寄存器写入数据。
现在可以把lcm的背光点亮。
故障现象:向GPDDAT写入数据后,该地址的数据没有任何变化。另外RS从低变高后就始终为高,即便用指令RS为低也仍旧不变。

我的相关程序如下:

1. 2410lib.c 中相关部分:

//===========================[ PORTS ]===================================================*
void Port_Init(void)
{
.....
    //=== PORT C GROUP
    //Ports  : GPC15 GPC14 GPC13 GPC12 GPC11 GPC10 GPC9 GPC8  GPC7   GPC6   GPC5 GPC4 GPC3  GPC2  GPC1 GPC0
    //Signal : VD7   VD6   VD5   VD4   VD3   VD2   VD1  VD0 LCDVF2 LCDVF1 LCDVF0 VM VFRAME VLINE VCLK LEND   
    //Binary :  10   10  , 01    01  , 01    01  , 01   01  , 10     10  ,  10   10 , 10     10 , 10   10
    rGPCCON = 0xa555aaaa;        
    rGPCUP  = 0x00ff;     // The pull up function is disabled GPC[7:0]  

    //=== PORT D GROUP
    //=== The pin8-pin11 are set as BackLight,Reset,WRite,ReaD
    //Ports  : GPD15 GPD14 GPD13 GPD12 GPD11 GPD10 GPD9 GPD8 GPD7 GPD6 GPD5 GPD4 GPD3 GPD2 GPD1 GPD0
    //Signal : VD23  VD22  VD21  VD20  VD19  VD18  VD17 VD16 VD15 VD14 VD13 VD12 VD11 VD10 VD9  VD8
    //Binary : 10    10  , 10    10  , 10    10  , 10   10 , 10   10 , 10   10 , 10   10 ,10   10
    rGPDCON = 0xaaaaaaaa;        
    rGPDUP  = 0x0000;     // The pull up function is enabled GPD[15:0]

....
}

2. 头文件相关部分:

#define LCD_BACKLIGHT_H  rGPCDAT |=  (1<<8) //GPC8 is BackLight,WR,RD are not defined.

#define LCD_CS_H  rGPCDAT |=  (1<<9) //GPC9 is CS
#define LCD_CS_L  rGPCDAT &= ~(1<<9)

#define LCD_WR_H  rGPCDAT |=  (1<<10) //GPC10 is WR
#define LCD_WR_L  rGPCDAT &= ~(1<<10)

#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)

#define NOP __asm{ nop;}


#define LCD_PORT rGPDDAT        //将GPDDAT端口0x56000034作为LCD端口。
......

3. c程序中相关部分:
void LCD_SetReg(U16 addr,U16 dat) //change the INT8U/16U as U16,
{
    LCD_CS_L;
    NOP;
    LCD_RS_L;

    LCD_WR_L;
    NOP;
    NOP;
    LCD_WR_H;
     
    LCD_PORT  =addr; //这里的指令执行后,相应地址0x56000034内容没有任何变化。
     
    LCD_Delay(15);
     
    LCD_RS_H;
     
    LCD_WR_L;
    LCD_WR_H;
     
    LCD_PORT  =dat; //故障现象同上

    LCD_WR_L;
    NOP;
    NOP;
    LCD_WR_H;
     
    LCD_CS_H;

}
.....
         
static void Lcd_Init(void)
{
    LCD_BACKLIGHT_H;  //执行后点亮了背光
    LCD_Delay(15);

    LCD_RESET_H;     //执行后GPCDAT的对应位被置高。
    LCD_Delay(1);
    LCD_RESET_L;     //执行后GPCDAT的对应位被置低。
    LCD_Delay(15);   
    LCD_RESET_H;     //执行后GPCDAT的对应位被置高。
    LCD_Delay(150);  
     
     
    LCD_SetReg(0xE5,0x8000);
    LCD_SetReg(0x00,0x0001);
    LCD_SetReg(0x2B,0x0010);
    LCD_SetReg(0x01,0x0100);//driver output control,
    LCD_SetReg(0x02,0x0700);//LCD driving control
    LCD_SetReg(0x03,0x1230);
    LCD_SetReg(0x04,0x0000);
    LCD_SetReg(0x08,0x0202);//display control 2lines. BP=2lines,FP=2lines BackPorch,FrontPorch
    LCD_SetReg(0x09,0x0000);
    LCD_SetReg(0x0A,0x0000);   
    LCD_SetReg(0x0C,0x0000);
    LCD_SetReg(0x0D,0x0000);
    LCD_SetReg(0x0F,0x0000);  
    LCD_SetReg(0x50,0x0000);
    LCD_SetReg(0x51,0x00EF);
    LCD_SetReg(0x52,0x0000);
    LCD_SetReg(0x53,0x013F);
    LCD_SetReg(0x60,0x2700);
    LCD_SetReg(0x61,0x0001);
    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);
    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  
}
请各位高手指教是哪里的问题?是硬件上还是程序上的问题? 谢谢!

相关帖子

沙发
xwj| | 2009-8-16 14:19 | 只看该作者
总线速度太快了

使用特权

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

本版积分规则

38

主题

161

帖子

0

粉丝