打印
[ZLG-ARM]

使用LPC2214连接TFT6758出现的问题

[复制链接]
1627|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
bufferly|  楼主 | 2008-3-5 13:49 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我使用LPC2214加外部存储器SST39VF1601和TFT6758液晶屏做了一块电路板。现在调试过程中出现以下问题:
1、进入ADS1.2调试运行后直接进入数据中止状态。
2、我使用的是LPC2200工程模板。
3、设定在片内FLASH中调试。
4、外部没有RAM扩展。

请问我出现此现象具体是何种原因?主要是什么地方错误,请指示?谢谢!

相关帖子

沙发
bufferly|  楼主 | 2008-3-5 16:53 | 只看该作者

回复

我修改了分散加载文件mem_c,修改如下:

ROM_LOAD 0x0
{
    ROM_EXEC 0x00000000
    {
        Startup.o (vectors, +First)
        * (+RO)
    }

    IRAM 0x40000000
    {
        Startup.o (+RW,+ZI)
        * (+RW,+ZI)
    }

   HEAP +0 UNINIT
    {
        Startup.o (Heap)
    }

    STACKS 0x40004000 UNINIT
    {
        Startup.o (Stacks)
    }

  
}
但在写入和读出SST39VF1601的数据时,汉字显示部分出现反字并上下屏的字都反了,请高手回复!

使用特权

评论回复
板凳
zlgarm| | 2008-3-5 17:56 | 只看该作者

LPC2214

bufferly  您好:

   1.TFT6758液晶使用,不能在内部Flash中调试。因为编译后的数据量有150K左右,内部RAM只有32K,无法满足,因此要外扩RAM才行。
   2.程序向内部Flash里下载时必须出现下载进度条才可以,如您所述,您的程序并没有下载进去。
   3.SST39VF1601在应用中读取数据是没有问题,但写入时要按照一定的命令格式来操作,不能直接写入。
   4.出现反字,最大的可能是您取模方式给反了,或这指针操作给反了。
                       by zlgarm_zhanghuping

使用特权

评论回复
地板
bufferly|  楼主 | 2008-3-6 08:44 | 只看该作者

回复

我现在情况如下:
1、我在内部Flash中调试,程序向内部Flash里下载时出现下载进度条,说明程序已下载进去。
2、SST39VF1601的读写取程序如下:
/*****************************************************************************
*名称:WordProgram()
*功能:半字(16位)数据写编程
*入口参数:Addr      编程地址(SST39VF1601内部地址)
*          Data         编程数据
*出口参数:返回TRUE表示操作成功,返回FALSE表示操作失败
*******************************************************************************/
uint8    WordProgram(uint32   Addr,uint16  Data)
{
    volatile    uint16    *ip;
    uint16        temp1,temp2;
    
    ip=GetAddr(0x5555);                //转换地址0x5555
    ip[0]=0xaaaa;                    //第一个写周期,地址0x5555,数据0xAA
    ip=GetAddr(0x2aaa);
    ip[0]=0x5555;                    //第二个写周期,地址0x2aaa,数据0x55
    ip=GetAddr(0x5555);
    ip[0]=0xa0a0;                    //第三个写周期,地址0x5555,数据0xA0
    
    ip=(volatile  uint16  *)(FLASH_ADDR|(Addr&0x1FFFFF));
    *ip=Data;                        //第四个写周期,地址ADDR,数据Data
    while(1)                        //等待操作完成。
    {
        temp1=*ip;
        temp2=*ip;
        if(temp1==temp2)
        {
            if(temp1!=Data)
            {
                return(FALSE);
            }
            else
            {
                return(TRUE);
            }
        }
    }
    return(TRUE);
}

/******************************************************************************
*名称:ChipErase()
*功能:芯片全片擦除
*入口参数:无
*出口参数:返回TRUE表示操作完成,返回FALSE表示操作失败
*******************************************************************************/
uint8    ChipErase(void)
{
    volatile    uint16    *ip;
    uint16        temp1,temp2;
    
    ip=GetAddr(0x5555);
    ip[0]=0xaaaa;
    ip=GetAddr(0x2aaa);
    ip[0]=0x5555;
    ip=GetAddr(0x5555);
    ip[0]=0x8080;
    ip=GetAddr(0x5555);
    ip[0]=0xaaaa;
    ip=GetAddr(0x2aaa);
    ip[0]=0x5555;
    ip=GetAddr(0x5555);
    ip[0]=0x1010;
    
    while(1)
    {
        temp1=*ip;
        temp2=*ip;
        if(temp1==temp2)
        {
            if(temp1!=0xffff)
            {
                return(FALSE);
            }
            else
            {
                return(TRUE);
            }
        }
    }
    return(TRUE);
}
/*******************************************************************************
*名称:ReadProgram()
*功能:读指定SST39VF1601存储的单元的数据
*入口参数:ch    指定SST39VF1601存储单元的地址
*出口参数:addr  指定SST39VF1601存储单元的数据
********************************************************************************/    
uint16   ReadProgram(uint16   ch)
{
    volatile    uint16    *addr;
    
    addr=(volatile uint16  *)FLASH_ADDR  + ch;
    
    return(*addr);
}
3、在不使用SST39VF1601的情况下,液晶显示正常。
4、使用SST39VF1601读取时液晶显示就出现不正常现象。并程序停止。

使用特权

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

本版积分规则

15

主题

29

帖子

0

粉丝