[ZLG-ARM] 使用LPC2214连接TFT6758出现的问题

[复制链接]
2520|3
 楼主| bufferly 发表于 2008-3-5 13:49 | 显示全部楼层 |阅读模式
我使用LPC2214加外部存储器SST39VF1601和TFT6758液晶屏做了一块电路板。现在调试过程中出现以下问题:<br />1、进入ADS1.2调试运行后直接进入数据中止状态。<br />2、我使用的是LPC2200工程模板。<br />3、设定在片内FLASH中调试。<br />4、外部没有RAM扩展。<br /><br />请问我出现此现象具体是何种原因?主要是什么地方错误,请指示?谢谢!
 楼主| bufferly 发表于 2008-3-5 16:53 | 显示全部楼层

回复

我修改了分散加载文件mem_c,修改如下:<br /><br />ROM_LOAD&nbsp;0x0<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;ROM_EXEC&nbsp;0x00000000<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Startup.o&nbsp;(vectors,&nbsp;+First)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;(+RO)<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;IRAM&nbsp;0x40000000<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Startup.o&nbsp;(+RW,+ZI)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;(+RW,+ZI)<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;HEAP&nbsp;+0&nbsp;UNINIT<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Startup.o&nbsp;(Heap)<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;STACKS&nbsp;0x40004000&nbsp;UNINIT<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Startup.o&nbsp;(Stacks)<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;<br />}<br />但在写入和读出SST39VF1601的数据时,汉字显示部分出现反字并上下屏的字都反了,请高手回复!
zlgarm 发表于 2008-3-5 17:56 | 显示全部楼层

LPC2214

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

回复

我现在情况如下:<br />1、我在内部Flash中调试,程序向内部Flash里下载时出现下载进度条,说明程序已下载进去。<br />2、SST39VF1601的读写取程序如下:<br />/*****************************************************************************<br />*名称:WordProgram()<br />*功能:半字(16位)数据写编程<br />*入口参数:Addr&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;编程地址(SST39VF1601内部地址)<br />*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Data&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;编程数据<br />*出口参数:返回TRUE表示操作成功,返回FALSE表示操作失败<br />*******************************************************************************/<br />uint8&nbsp;&nbsp;&nbsp;&nbsp;WordProgram(uint32&nbsp;&nbsp;&nbsp;Addr,uint16&nbsp;&nbsp;Data)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;volatile&nbsp;&nbsp;&nbsp;&nbsp;uint16&nbsp;&nbsp;&nbsp;&nbsp;*ip;<br />&nbsp;&nbsp;&nbsp;&nbsp;uint16&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;temp1,temp2;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;ip=GetAddr(0x5555);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//转换地址0x5555<br />&nbsp;&nbsp;&nbsp;&nbsp;ip[0]=0xaaaa;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//第一个写周期,地址0x5555,数据0xAA<br />&nbsp;&nbsp;&nbsp;&nbsp;ip=GetAddr(0x2aaa);<br />&nbsp;&nbsp;&nbsp;&nbsp;ip[0]=0x5555;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//第二个写周期,地址0x2aaa,数据0x55<br />&nbsp;&nbsp;&nbsp;&nbsp;ip=GetAddr(0x5555);<br />&nbsp;&nbsp;&nbsp;&nbsp;ip[0]=0xa0a0;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//第三个写周期,地址0x5555,数据0xA0<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;ip=(volatile&nbsp;&nbsp;uint16&nbsp;&nbsp;*)(FLASH_ADDR|(Addr&0x1FFFFF));<br />&nbsp;&nbsp;&nbsp;&nbsp;*ip=Data;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//第四个写周期,地址ADDR,数据Data<br />&nbsp;&nbsp;&nbsp;&nbsp;while(1)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//等待操作完成。<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;temp1=*ip;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;temp2=*ip;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(temp1==temp2)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(temp1!=Data)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return(FALSE);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return(TRUE);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;return(TRUE);<br />}<br /><br />/******************************************************************************<br />*名称:ChipErase()<br />*功能:芯片全片擦除<br />*入口参数:无<br />*出口参数:返回TRUE表示操作完成,返回FALSE表示操作失败<br />*******************************************************************************/<br />uint8&nbsp;&nbsp;&nbsp;&nbsp;ChipErase(void)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;volatile&nbsp;&nbsp;&nbsp;&nbsp;uint16&nbsp;&nbsp;&nbsp;&nbsp;*ip;<br />&nbsp;&nbsp;&nbsp;&nbsp;uint16&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;temp1,temp2;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;ip=GetAddr(0x5555);<br />&nbsp;&nbsp;&nbsp;&nbsp;ip[0]=0xaaaa;<br />&nbsp;&nbsp;&nbsp;&nbsp;ip=GetAddr(0x2aaa);<br />&nbsp;&nbsp;&nbsp;&nbsp;ip[0]=0x5555;<br />&nbsp;&nbsp;&nbsp;&nbsp;ip=GetAddr(0x5555);<br />&nbsp;&nbsp;&nbsp;&nbsp;ip[0]=0x8080;<br />&nbsp;&nbsp;&nbsp;&nbsp;ip=GetAddr(0x5555);<br />&nbsp;&nbsp;&nbsp;&nbsp;ip[0]=0xaaaa;<br />&nbsp;&nbsp;&nbsp;&nbsp;ip=GetAddr(0x2aaa);<br />&nbsp;&nbsp;&nbsp;&nbsp;ip[0]=0x5555;<br />&nbsp;&nbsp;&nbsp;&nbsp;ip=GetAddr(0x5555);<br />&nbsp;&nbsp;&nbsp;&nbsp;ip[0]=0x1010;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;while(1)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;temp1=*ip;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;temp2=*ip;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(temp1==temp2)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(temp1!=0xffff)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return(FALSE);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return(TRUE);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;return(TRUE);<br />}<br />/*******************************************************************************<br />*名称:ReadProgram()<br />*功能:读指定SST39VF1601存储的单元的数据<br />*入口参数:ch&nbsp;&nbsp;&nbsp;&nbsp;指定SST39VF1601存储单元的地址<br />*出口参数:addr&nbsp;&nbsp;指定SST39VF1601存储单元的数据<br />********************************************************************************/&nbsp;&nbsp;&nbsp;&nbsp;<br />uint16&nbsp;&nbsp;&nbsp;ReadProgram(uint16&nbsp;&nbsp;&nbsp;ch)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;volatile&nbsp;&nbsp;&nbsp;&nbsp;uint16&nbsp;&nbsp;&nbsp;&nbsp;*addr;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;addr=(volatile&nbsp;uint16&nbsp;&nbsp;*)FLASH_ADDR&nbsp;&nbsp;+&nbsp;ch;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;return(*addr);<br />}<br />3、在不使用SST39VF1601的情况下,液晶显示正常。<br />4、使用SST39VF1601读取时液晶显示就出现不正常现象。并程序停止。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

15

主题

29

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部