打印
[其他ST产品]

奇怪问题?!求助!!!

[复制链接]
4272|26
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
zh5h|  楼主 | 2008-6-13 19:42 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
系统使用710+IS61lv25616
当写片外RAM(IS61lv25616)时发现和PC值(程序所在地址)相对应的那部分RAM空间数值也同时改变了!!吧知道如何解决,请高手分析~~~
如图: 
沙发
zh5h|  楼主 | 2008-6-13 19:50 | 只看该作者

如下

原程序如下:
        
     pProgram = (u16 *)0x62000000;//RAMLIMIT;
        for(i=0;i<0x30000;i++)
        {
         *(pProgram++) = 0;

        }
     pProgram = (u16 *)0x62000000;//RAMLIMIT;
        for(i=0;i<0x30000;i++)
        {
         *(pProgram++) = (u16)i;

        }

片外RAM基地址为0x62000000,程序先将0x62000000-0x62030000清0 ,再写入0-ffff的数据,发现当执行*(pProgram++) = (u16)i;时,pProgram对应地址的数据更改成功,该指令对应程序空间地址(0x40009b0),同时0x620009b0空间数据也改变(数值相同),每次都变!如上图!!
强人 前辈 帮忙分析一下原因啊!!
搞了几天了也没个头绪!!!

使用特权

评论回复
板凳
香水城| | 2008-6-13 21:06 | 只看该作者

查查变量分配的地址

可能这个0x620009b0刚好是分配给变量i的地址,而9B0刚好是一个巧合的地址。

请注意:2楼程序的前半段不是仅仅清除0x62000000-0x62030000,而是对0x62000000-0x62060000进行了操作。这是因为pProgram是一个u16的指针,pProgram++实际是增量2,0x400009a4那条指令就说明了这一点。你的访问有可能越界了!这是很危险的!

使用特权

评论回复
地板
zh5h|  楼主 | 2008-6-14 07:57 | 只看该作者

谢谢香版主!

查了,程序中i被分配为寄存器变量(r0),应该吧时地址分配问题。因为发现RAM有变数问题才写了上面的测试程序,无需考虑越界的问题,而且也没有越界,在做清0操作时: *(pProgram++) = 0;   发现地址0x62000990 地址的数据也同时清0,而指令 *(pProgram++) = 0;对应的程序地址也就是0x40000990,觉的这不是巧合!!郁闷

使用特权

评论回复
5
zh5h|  楼主 | 2008-6-14 16:22 | 只看该作者

更新!

又改了测试程序:
        pProgram = (u16 *)0x62000000;//RAMLIMIT;
        for(i=0;i<0x30000;i++)
        {
         *pProgram = (u16)i;
        }
每次只向0x62000000地址写入数据,发现空间0x6200098c空间数据也跟着变!

理论上地址线应该一直为低,用示波器观察,发现在WR信号快结束时地址0x6200098c出现,导致0x62000000  0x6200098c的数据都变化!示波器波形没发贴上来~只能这么描述,不知道大家能否理解!也就是地址线本吧应该变化,而实际在那瞬间却变了~
使用的是ADS1.2编译的程序,不知道在使用片外RAM时 ADS以及程序设置上是否还要注意什么.程序上将Bank1设置为有效,16位宽度 7等待周期(RAM接Bank1)ADS将程序空间定义在RO base 0x40000000(片内FLASH) 变量RW base 0x20000000(片内RAM)。

香版主能否再帮我分析一下!!

使用特权

评论回复
6
香水城| | 2008-6-14 17:17 | 只看该作者

请把线路图和配置程序贴出来

最好把示波器看到的波形也贴上来,这样便于分析。

另外,可以试试增加或减少等待周期。

使用特权

评论回复
7
zh5h|  楼主 | 2008-6-14 17:27 | 只看该作者

贴图

电路图:

使用特权

评论回复
8
zh5h|  楼主 | 2008-6-14 17:33 | 只看该作者

配置及程序

配置及程序:
EMI_Base_addr       EQU    0x6C000000; EMI base address
BCON0_off_addr      EQU    0x00      ; Bank 0 configuration register offset
BCON1_off_addr      EQU    0x04      ; Bank 1 configuration register offset
BCON2_off_addr      EQU    0x08      ; Bank 2 configuration register offset
BCON3_off_addr      EQU    0x0C      ; Bank 3 configuration register offset

EMI_ENABLE          EQU    0x8000
EMI_SIZE_16         EQU    0x0001

GPIO2_Base_addr     EQU    0xE0005000; GPIO2 base address
PC0_off_addr        EQU    0x00      ; Port Configuration Register 0 offset
PC1_off_addr        EQU    0x04      ; Port Configuration Register 1 offset
PC2_off_addr        EQU    0x08      ; Port Configuration Register 2 offset
PD_off_addr         EQU    0x0C      ; Port Data Register offset
 LDR     r0, =GPIO2_Base_addr      ; Configure P2.0 -> 7 in AF_PP 
        LDR     r2, [r0, #PC0_off_addr]
        ORR     r2, r2,#0x000000FF
        STR     r2, [r0, #PC0_off_addr]
        LDR     r2, [r0, #PC1_off_addr]
        ORR     r2, r2,#0x000000FF
        STR     r2, [r0, #PC1_off_addr]
        LDR     r2, [r0, #PC2_off_addr]
        ORR     r2, r2,#0x000000FF
        STR     r2, [r0, #PC2_off_addr]
        LDR     r0, =EMI_Base_addr
        LDR     r1, =0x18:OR:EMI_ENABLE:OR:EMI_SIZE_16
        STR     r1, [r0, #BCON1_off_addr] ; Enable bank 1 16-bit 7 
这段程序是在官方网站上下载的71x_init.s启动文件

使用特权

评论回复
9
zh5h|  楼主 | 2008-6-14 17:45 | 只看该作者

波形

其中一根地址线A7 和WR的波形:

使用特权

评论回复
10
香水城| | 2008-6-14 17:47 | 只看该作者

请用示波器检查WE信号的产生

从线路图上看,/WE是由/WR0和/WR1经一个与门(图中的D12D)产生,用示波器检查一下这三个信号的关系,我怀疑因为这个与门的延迟产生问题。

使用特权

评论回复
11
zh5h|  楼主 | 2008-6-14 19:52 | 只看该作者

WR与WR0 WR1

WR0 WR1重合  和WR几乎没有延时
问题时地址线上应该没有信号才对!!

使用特权

评论回复
12
香水城| | 2008-6-14 20:21 | 只看该作者

/WR0和/WR1的上升沿过后,地址线当然可以变化

11楼的图没有标尺,看不出什么,而且放大率不够。

/WE是由/WR0和/WR1经一个与门产生,无论如何它们之间会有延迟,只不过是延迟的大小而已。

使用特权

评论回复
13
zh5h|  楼主 | 2008-6-14 21:06 | 只看该作者

??

  那这样吧知道软件上能部能解决!!
  硬件上不使用74hc08,使用什么可以代替呢??
我看很多应用电路外扩RAM都用这种设计,而且710开发板上也多使用这种电路


有没有使用这个电路成功的,进来说说看啊!
小弟谢了!@!

使用特权

评论回复
14
香水城| | 2008-6-14 21:09 | 只看该作者

我在6楼建议你“可以试试增加或减少等待周期”

有什么变化吗?

使用特权

评论回复
15
zh5h|  楼主 | 2008-6-14 21:32 | 只看该作者

试了

使用特权

评论回复
16
zh5h|  楼主 | 2008-6-14 21:33 | 只看该作者

好像没什么效果啊!

从1试到15了,都有错!哎~

使用特权

评论回复
17
香水城| | 2008-6-14 21:39 | 只看该作者

11楼的波形,下面一行是WR0还是WR1?

我没有具体研究过这个时序,所以希望看到/WE、/WR0和/WR1这三个信号之间的关系才能判断你的问题。

还有11楼的波形上下两行是不是标反了?/WR0或/WR1不可能比/WE慢。

使用特权

评论回复
18
zh5h|  楼主 | 2008-6-14 21:45 | 只看该作者

没有反

总线是16位的   写命令也是16位的,所以WR0 WR1同时有效。波形没有标反,图上看似有延时那是上升时间的缘故,我看了俩波形完全重叠!

使用特权

评论回复
19
zh5h|  楼主 | 2008-6-14 21:50 | 只看该作者

问题

只有执行写命令时地址线才有变化,执行其他命令时地址线却没有变化!
我的程序是存在片内的,运行程序应该和片外总线没有关系,,为什么他地址会变,而且只是在执行写命令时才有变化?

使用特权

评论回复
20
香水城| | 2008-6-14 21:56 | 只看该作者

下面一行到底是WR0还是WR1?

两个波形完全重叠是不可能的,那个与门必定有延迟。

我刚查了一下这个74HC08的手册,它的传输延迟至少在20ns上下;对于50MHz的系统,20ns刚好是一个时钟周期。

请去掉这个74HC08,试试把/WR0或/WR1直接接到/WE上,看看有什么变化?


关于19楼的问题,只要不影响正常时序,信号线怎么变都可以,手册上也不对正常时序以外的信号时序做描述。

使用特权

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

本版积分规则

38

主题

162

帖子

3

粉丝