打印
[ZLG-ARM]

请教周立功一个问题

[复制链接]
3580|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
ummiun|  楼主 | 2007-12-24 19:30 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
周功好,
在LPC2210开发板上,我将P2口和P3口都设置为IO口,为什么程序执行的时候不能正确执行呢?
我是按教程上PINSEL2 = (PINSEL2&0XFFFFFFCF)| (3 << 4);这时编译器就将该句下面的所有程序都顺序执行,并且这个函数完了,它不能正确返回,而是执行该函数下面的所有函数,也就是将该句下面的所有语句都顺序执行了,想请教周功这是怎么回事?
按照教程上面说的,应该先读PINSEL2,然后进行相与,然后在不修改PINSEL2的0-3BIT,调试功能应该不会丢失的啊,可现在情况只有不将P2,P3口设为GPIO的情况下,调试功能才没有丢失。
难道P2口和P3口都只能做外部数据 总线用,不能做GPIO用或者还有其他什么 地方要修改和设置呢,请周功帮忙啊,谢谢。

相关帖子

沙发
zlgarm| | 2007-12-25 09:47 | 只看该作者

P2和P3应用

ummiun 您好!
    P2和P3既可以作外部总线用也可以作GPIO用。具体的设置与外部电路有关。因为LPC2210是没有片内FLASH的,所以必须扩展片外FLASH,就要用P2和P3外部总线功能,具体用到那些地址线,数据线这与FLASH就有关系了。没有用到的就可以用在GPIO口。
                                            By zlgarm_ljt

使用特权

评论回复
板凳
ummiun|  楼主 | 2007-12-25 18:11 | 只看该作者

To zlgarm_ljt!

谢谢zlgarm_ljt。
哦,我知道了,LPC2214有片内FLASH的,所以它的所有P2,P3口都可以作GPIO用落,那么BANK选择应该选用INSIDE,是吗?我明天再去试试,谢谢了啊。

使用特权

评论回复
地板
ummiun|  楼主 | 2007-12-25 19:36 | 只看该作者

还是不行。

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

使用特权

评论回复
5
zlgarm| | 2007-12-26 19:34 | 只看该作者

re:ummiun

ummiun 您好!
    您需要把JP6的跳线跳到Bank0-RAM,Bank1-Flash.并且保证是在我们公司的模版下调试。
                                    By zlgarm_ljt

使用特权

评论回复
6
ummiun|  楼主 | 2007-12-27 20:04 | 只看该作者

To zlgarm_ljt

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


使用特权

评论回复
7
zlgarm| | 2007-12-28 11:53 | 只看该作者

re:PINSEL2的应用

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

使用特权

评论回复
8
ummiun|  楼主 | 2007-12-30 22:15 | 只看该作者

To zlgarm_ljt

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

使用特权

评论回复
9
zhp521464| | 2008-1-1 17:33 | 只看该作者

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

每个工程都有一个自己的分散加载文件,哪个不通用的

使用特权

评论回复
10
zlgarm| | 2008-1-2 13:52 | 只看该作者

分散加载

ummiun 您好!
   你需要改分散加载文件,开发板上带的uc/os操作系统的模版在把程序加载到了外部flash中,您可以把相应语句改为加载到片内就可以,这时要考虑片内flash的大少,不能把数据或程序加载超过flash的容量。
                                     By zlgarm_ljt

使用特权

评论回复
11
ummiun|  楼主 | 2008-1-2 18:07 | 只看该作者

谢谢啊!

我现在知道了,谢谢啊.

使用特权

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

本版积分规则

6

主题

26

帖子

0

粉丝