打印
[ZLG-ARM]

关于2214的外部总线,总得给个解答吧

[复制链接]
2176|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
andrew.xu|  楼主 | 2007-5-11 15:55 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
硬件:
2214 ULINK
时钟设置:
#define Fosc            11059200                    //晶振频率,10MHz~25MHz,应当与实际一至
#define Fcclk           (Fosc * 4)                  //系统频率,必须为Fosc的整数倍(1~32),且<=60MHZ
#define Fcco            (Fcclk * 4)                 //CCO频率,必须为Fcclk的2、4、8、16倍,范围为156MHz~320MHz
#define Fpclk           (Fcclk / 4) * 1             //VPB时钟频率,只能为(Fcclk / 4)的1 ~ 4倍
内部flash调试,无片外ram
bank2接外部设备(cpld),16位总线,只有写数据
问题:
        LDR     R0, =BCFG2
        LDR     R1, =0x10004eff
        STR     R1, [R0]
1。BCFG2设置成0x1000feff和0x1000fef0效果是一样的,一个写周期都是差不多750ns,示波器上看到的波形也几乎一样,按道理应该差16个空闲周期才对呀,为什么?见图1(0x1000feff)图2(0x1000fef0)
图1(1通道是nCS2,2通道是WE):

图2(1通道是nCS2,2通道是WE):

2。BCFG2设置成0x10004eff时,如果连续写8个数据(地址累加),会出现这样的现象:第一个写周期后会等待一段时间写第二个数据,但第二个数据后却没有等待时间就写第三个数据了,后面的都是一个等一个不等,这样间隔着,为什么?见图3(0x10004eff)
图3(1通道是nCS2,2通道是WE):

测试程序:
for(;;)
{
         uint16 out;
    uint16 *p;
    p =(uint16 *)0x82000000;
    out = 8;

    for(;out>0;out--)
    {
        *p = out;
        p++;
    }
        OSTimeDly(TIME_DELAY_500ms);
}

相关帖子

沙发
andrew.xu|  楼主 | 2007-5-12 17:13 | 只看该作者

没人解答呀,唉,又是周末,郁闷

使用特权

评论回复
板凳
andrew.xu|  楼主 | 2007-5-17 13:35 | 只看该作者

这么久了,也没人解释下?

我也想打电话问的,不过这个问题电话里又说不清,辛辛苦苦发上来,居然没人理

使用特权

评论回复
地板
lyqun8002| | 2007-5-17 15:21 | 只看该作者

ZLG?

我发现ZLG—ARM的解答人员对工作不认真,解答的问题很少!

使用特权

评论回复
5
andrew.xu|  楼主 | 2007-5-17 18:16 | 只看该作者

是不是zlg也不知道为什么?

那总得告诉我,是我硬件或软件问题,还是硬件就是这样的,是个bug?

使用特权

评论回复
6
zlgARM| | 2007-5-17 22:06 | 只看该作者

RE

您好!
您提问的时候提供的信息很详尽,这很好。

仔细看了一下您的帖子,我想,问题大概出在对概念的理解上。

无它,对“空闲周期”的理解。

空闲周期的概念是,对同一个Bank的读写访问之间总线的最短空闲时间。

很显然,它和写周期毫无关系。
为什么要提出空闲周期的概念?
读写操作肯定要占用总线,但总线只有一条。而在程序里,对于CPU来说两个读写操作指令之间的时间差距不过在几十个纳秒。怎么办?必须让两个操作之间有一段空闲时间,以避免两个操作同时使用总线。也就是所谓的“总线竞争”。

所以,您所看到的读写操作之间的空白,就是空闲周期的作用了

使用特权

评论回复
7
zlgARM| | 2007-5-18 11:25 | 只看该作者

RE

楼主您好。
已经抽空测试。

已经确认,IDCY和写周期或读周期的本身长度没有任何关系,它只是间隔。
已经确认,一个读操作之后跟一个写操作,这两个操作之间的间隔时间非常完美地遵循了IDCY的概念和计算公式。
已经确认,两个连续读操作之间的间隔受IDCY设置的影响。时间间隔非常完美地遵循了IDCY的概念和计算公式。

至于两个写操作之间的间隔。
如果程序在外部存储器运行,那么两个写操作之间还需要插入读操作(读指令),此时,两个写操作之间的间隔和IDCY毫无关系;
如果程序在内部Flash运行,两个写操作之间的间隔固定,但不再有读操作周期,仍和IDCY无关系。

测试环境:EASYARM2200,操作外部RAM。

使用特权

评论回复
8
zlgARM| | 2007-5-18 16:37 | 只看该作者

RE

在LPC2200中IDCY是指:
1、读操作后跟了一个写操作时,读操作和写操作之间的时间间隔;
2、两个连续读操作之间的时间间隔。

使用特权

评论回复
9
andrew.xu|  楼主 | 2007-5-18 17:24 | 只看该作者

谢谢您的解答

对于第一个问题,关于IDCY的解释我明白了
但第二个问题,还是不明白。

如果程序在外部存储器运行,那么两个写操作之间还需要插入读操作(读指令),此时,两个写操作之间的间隔和IDCY毫无关系;
如果程序在内部Flash运行,两个写操作之间的间隔固定,但不再有读操作周期,仍和IDCY无关系。

这样的话,因为我的程序在内部flash运行
图3中应该看到,连续的写操作,中间的间隔是固定的才对,为啥一会儿长,一会儿短呢?

使用特权

评论回复
10
zlgARM| | 2007-5-18 19:53 | 只看该作者

andrew.xu

晚上好!
当程序在内部Flash中,用LA1032逻辑分析仪测试两个写周期之间的间隔。
我们测得是40纳秒左右。由于有误差,可能会多10个纳秒——纳秒已经是很小的时间但为了。
至少从实地观测结果来看,再考虑到精度问题,可以说间隔是固定的。

您的图三我看了,我认为间隔基本是相等的。请问您是否将波形中的尖峰脉冲也认为是间隔呢?是否可以告诉我,图三中的尖峰脉冲宽度多少。如果不考虑尖峰脉冲,写周期之间的间隔数值分别是多少?

不知您有没有逻辑分析仪?测时序最好用逻辑分析仪而不是示波器。
如果对它不了解,麻烦您在链接里搜索一下LA1032。

相关链接:http://www.zlgmcu.com/infocomm/newupdate.asp?sorttype=search

使用特权

评论回复
11
andrew.xu|  楼主 | 2007-5-20 10:29 | 只看该作者

没逻辑分析仪耶

那个是尖锋脉冲?
那图3是写8个数据的,如果去掉你说的尖锋脉冲,不是只有4个数据了

使用特权

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

本版积分规则

9

主题

149

帖子

0

粉丝