[ZLG-ARM] 请教周立功一个问题

[复制链接]
4178|10
 楼主| ummiun 发表于 2007-12-24 19:30 | 显示全部楼层 |阅读模式
周功好,<br />在LPC2210开发板上,我将P2口和P3口都设置为IO口,为什么程序执行的时候不能正确执行呢?<br />我是按教程上PINSEL2&nbsp;=&nbsp;(PINSEL2&0XFFFFFFCF)|&nbsp;(3&nbsp;&lt&lt&nbsp;4);这时编译器就将该句下面的所有程序都顺序执行,并且这个函数完了,它不能正确返回,而是执行该函数下面的所有函数,也就是将该句下面的所有语句都顺序执行了,想请教周功这是怎么回事?<br />按照教程上面说的,应该先读PINSEL2,然后进行相与,然后在不修改PINSEL2的0-3BIT,调试功能应该不会丢失的啊,可现在情况只有不将P2,P3口设为GPIO的情况下,调试功能才没有丢失。<br />难道P2口和P3口都只能做外部数据&nbsp;总线用,不能做GPIO用或者还有其他什么&nbsp;地方要修改和设置呢,请周功帮忙啊,谢谢。
zlgarm 发表于 2007-12-25 09:47 | 显示全部楼层

P2和P3应用

ummiun&nbsp;您好!<br />&nbsp;&nbsp;&nbsp;&nbsp;P2和P3既可以作外部总线用也可以作GPIO用。具体的设置与外部电路有关。因为LPC2210是没有片内FLASH的,所以必须扩展片外FLASH,就要用P2和P3外部总线功能,具体用到那些地址线,数据线这与FLASH就有关系了。没有用到的就可以用在GPIO口。<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&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_ljt
 楼主| ummiun 发表于 2007-12-25 18:11 | 显示全部楼层

To zlgarm_ljt!

谢谢zlgarm_ljt。<br />哦,我知道了,LPC2214有片内FLASH的,所以它的所有P2,P3口都可以作GPIO用落,那么BANK选择应该选用INSIDE,是吗?我明天再去试试,谢谢了啊。<br /><br />
 楼主| ummiun 发表于 2007-12-25 19:36 | 显示全部楼层

还是不行。

zlgarm_ljt,你好啊,<br />我换用了LPC2214,并将跳线跳在INSIDE,但还是不行,还是会出现同样的问题,不知道是怎么回事?我觉得LPC2200那块开发板的&nbsp;外部电路应该不会影响这个问题的,LPC2214有片内FLASH,然后BOOT0和BOOT1都接上拉,这样P2,P3应该可以全部用来设置为GPIO的&nbsp;,不知道是不是还有没有考虑到的地方,所以想再请教一下,谢谢哦!
zlgarm 发表于 2007-12-26 19:34 | 显示全部楼层

re:ummiun

ummiun&nbsp;您好!<br />&nbsp;&nbsp;&nbsp;&nbsp;您需要把JP6的跳线跳到Bank0-RAM,Bank1-Flash.并且保证是在我们公司的模版下调试。<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&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_ljt
 楼主| ummiun 发表于 2007-12-27 20:04 | 显示全部楼层

To zlgarm_ljt

zlgarm_ljt,您好!<br />1、对于Bank的设置我一直是跳在Bank0-RAM,Bank1-Flash.的,否则程序好象运行不到main处,但在这里Bank的设置应该不会影响我的&nbsp;程序的,(而且我用的S是SMART2200的开发板,是在你们公司提供的专用模板下调试的)。因为我是在DubugInChipFlash片内Flash中调试的,它应该不会再用到片外Flash和片外RAM了,程序在BOOT1:0为11下在片内Flash0X00000000处启动。当然程序在DebugExRam下调试的话,好象只要不更改PINSEL2的设置,程序可以正常运行和达到预期效果,但是P2,P3口没有该过来的,呵呵。<br />2、后来我将ResetInit中的外部总线的初始化(包括BanK的初始化)全部都屏蔽掉,因为这些是对外部数据总线进行的&nbsp;,而我并不需要,所以屏蔽掉应该是可以的,然后我在自己程序中&nbsp;,将PINSEL2&nbsp;=&nbsp;PINSEL2&0XFFXFFFFCF&nbsp;|&nbsp;(3&lt&lt4);<br />或者PINSEL2&nbsp;=&nbsp;PINSEL2&0X0000000F&nbsp;|&nbsp;(3&lt&lt4);来设置P2,P3口为GPIO口,程序运行到这里就死掉了&nbsp;,最后在DataAort处.<br />3、如果将PINSEL2&nbsp;=&nbsp;PINSEL2&0XFFXFFFFCF&nbsp;|&nbsp;(2&lt&lt4);其他都没变,程序还是正常运行的,但没能将P2,P3口进行修改.<br />4、后来我看PINSEL2物理地址中的内容时,发现那个值在上电时为0F814914,根据DataSheet上的说明,复位后,该处的值应该不是这个值的,而且在Bit4-Bit5处的值与BOOT1:0一致的&nbsp;,我的BOOT1:0为11,也就是该处应该是3,即0F814934,而且奇怪的地方就是上电后的这个初始值是怎么还是这个值呢,我已经在ResetInit将PINSEL2&nbsp;=&nbsp;0X0F814914;屏蔽掉了哦,应该是由硬件来决定这个初始值的吧,<br />但我将14改为24,程序确实可以正常运行,只是改为34或者00000034,程序就死掉了,从上面也可以看到我是先读出来的,然后再修改的,<br />5、我有点怀疑P2,P3口可以做GPIO口,因为没有&nbsp;调出来,当然可能是我哪里还没有考虑到把,所以希望大家都能帮帮我,而且上面的问题似乎说明PINSEL2物理地址的内容为0F814914是硬件决定的,比如BOOT1:0,但和书上说的似乎不是一致的,而且,该处的内容只能将14改24,不能改34,或者000000034,否则程序会死掉的,而要设置P2,P3全部为GPIO,就的这样修改,,所以麻烦周立功的工程师们再帮我找找问题出在哪里啊?<br /><br /><br />
zlgarm 发表于 2007-12-28 11:53 | 显示全部楼层

re:PINSEL2的应用

ummiun&nbsp;您好!<br />&nbsp;&nbsp;&nbsp;&nbsp;对于你提出的1、2、3点的解释:分散加载程序把数据加载到了片外SRAM中,所以要用到片外SRAM。用到片外并行器件就要用到PINSEL2。<br />&nbsp;&nbsp;&nbsp;&nbsp;对于第4点,解释如下:在我们公司的模版中在设置总线时把PINSEL2&nbsp;=&nbsp;0x0f814914;(A23:0作为地址线,CS0~CS3片选功能使能,16位总线宽度,OE、WE、BLS0和BLS1功能使能,调试接口使能)。<br />&nbsp;&nbsp;&nbsp;&nbsp;对于您5点的解释:在没有用到的P2、P3还是可以作为I/O口用的,如果您不需要片外SRAM。你可以修改分散加载文件(相关知识可以在网上搜索到)。这样就可以把P2、P3全部作为I/O口了。<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&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_ljt
 楼主| ummiun 发表于 2007-12-30 22:15 | 显示全部楼层

To zlgarm_ljt

zlgarm_ljt,很谢谢你的帮忙啊!<br />我看过分散加载文件了,并且修改了一些地方,在 没有uCos的环境下,程序运行正常了,P2,P3的GPIO功能也全部调试出来了,但是在uCos环境下,问题好象还是存在的,好象分散加载C文件中IRAM是从0X40000000处开始设置的,ERAM从0X80000000开始的,在没有uCos下,我将ERAM改到IRAM后面,没到片外ram存储区域,程序运行瞒好的,但uCos下,好象不行,反正在设置P2,P3为GPIO后,程序就会死掉,和以前一样,我不知道怎么回事,只知道uCos下,要多占很多的内存,比如任务控制块,事件等等,但将他们放在保留给片内程序空间的那些区域,应该足够了,而且没有跑道0X80000000那里,就不用到片外ram什么的,应该还是可以设置P2,P3口为GPIO的,但程序还是死在这里,不知道究竟是怎么回事,是我弄错了,还是有其他的问题了 ,呵呵 ,谢谢啊!
zhp521464 发表于 2008-1-1 17:33 | 显示全部楼层

你把UCOS下的分散加载文件里的改了

每个工程都有一个自己的分散加载文件,哪个不通用的
zlgarm 发表于 2008-1-2 13:52 | 显示全部楼层

分散加载

ummiun&nbsp;您好!<br />&nbsp;&nbsp;&nbsp;你需要改分散加载文件,开发板上带的uc/os操作系统的模版在把程序加载到了外部flash中,您可以把相应语句改为加载到片内就可以,这时要考虑片内flash的大少,不能把数据或程序加载超过flash的容量。<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&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_ljt
 楼主| ummiun 发表于 2008-1-2 18:07 | 显示全部楼层

谢谢啊!

我现在知道了,谢谢啊.<br />
您需要登录后才可以回帖 登录 | 注册

本版积分规则

6

主题

26

帖子

0

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