[ZLG-ARM] 关于2214的外部总线,总得给个解答吧

[复制链接]
3359|10
 楼主| andrew.xu 发表于 2007-5-11 15:55 | 显示全部楼层 |阅读模式
硬件:<br />2214&nbsp;ULINK<br />时钟设置:<br />#define&nbsp;Fosc&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;11059200&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//晶振频率,10MHz~25MHz,应当与实际一至<br />#define&nbsp;Fcclk&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(Fosc&nbsp;*&nbsp;4)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//系统频率,必须为Fosc的整数倍(1~32),且&lt=60MHZ<br />#define&nbsp;Fcco&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(Fcclk&nbsp;*&nbsp;4)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//CCO频率,必须为Fcclk的2、4、8、16倍,范围为156MHz~320MHz<br />#define&nbsp;Fpclk&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(Fcclk&nbsp;/&nbsp;4)&nbsp;*&nbsp;1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//VPB时钟频率,只能为(Fcclk&nbsp;/&nbsp;4)的1&nbsp;~&nbsp;4倍<br />内部flash调试,无片外ram<br />bank2接外部设备(cpld),16位总线,只有写数据<br />问题:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LDR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;R0,&nbsp;=BCFG2<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LDR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;R1,&nbsp;=0x10004eff<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;STR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;R1,&nbsp;[R0]<br />1。BCFG2设置成0x1000feff和0x1000fef0效果是一样的,一个写周期都是差不多750ns,示波器上看到的波形也几乎一样,按道理应该差16个空闲周期才对呀,为什么?见图1(0x1000feff)图2(0x1000fef0)<br />图1(1通道是nCS2,2通道是WE):<br /><img src="https://bbs.21ic.com/upfiles/img/20075/2007511155341743.jpg"><br />图2(1通道是nCS2,2通道是WE):<br /><img src="https://bbs.21ic.com/upfiles/img/20075/2007511155417455.jpg"><br />2。BCFG2设置成0x10004eff时,如果连续写8个数据(地址累加),会出现这样的现象:第一个写周期后会等待一段时间写第二个数据,但第二个数据后却没有等待时间就写第三个数据了,后面的都是一个等一个不等,这样间隔着,为什么?见图3(0x10004eff)<br />图3(1通道是nCS2,2通道是WE):<br /><img src="https://bbs.21ic.com/upfiles/img/20075/2007511155450626.jpg"><br />测试程序:<br />for(;;)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;uint16&nbsp;out;<br />&nbsp;&nbsp;&nbsp;&nbsp;uint16&nbsp;*p;<br />&nbsp;&nbsp;&nbsp;&nbsp;p&nbsp;=(uint16&nbsp;*)0x82000000;<br />&nbsp;&nbsp;&nbsp;&nbsp;out&nbsp;=&nbsp;8;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;for(;out&gt0;out--)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*p&nbsp;=&nbsp;out;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;p++;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;OSTimeDly(TIME_DELAY_500ms);<br />}<br />
 楼主| andrew.xu 发表于 2007-5-12 17:13 | 显示全部楼层

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

  
 楼主| andrew.xu 发表于 2007-5-17 13:35 | 显示全部楼层

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

我也想打电话问的,不过这个问题电话里又说不清,辛辛苦苦发上来,居然没人理
lyqun8002 发表于 2007-5-17 15:21 | 显示全部楼层

ZLG?

我发现ZLG—ARM的解答人员对工作不认真,解答的问题很少!
 楼主| andrew.xu 发表于 2007-5-17 18:16 | 显示全部楼层

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

那总得告诉我,是我硬件或软件问题,还是硬件就是这样的,是个bug?
zlgARM 发表于 2007-5-17 22:06 | 显示全部楼层

RE

您好!<br />您提问的时候提供的信息很详尽,这很好。<br /><br />仔细看了一下您的帖子,我想,问题大概出在对概念的理解上。<br /><br />无它,<font color=#FF0000>对“空闲周期”的理解。</font><br /><br />空闲周期的概念是,对同一个Bank的读写访问之间总线的最短空闲时间。<br /><br />很显然,它和写周期毫无关系。<br /><font color=#FF0000>为什么要提出空闲周期的概念?</font><br />读写操作肯定要占用总线,但总线只有一条。而在程序里,对于CPU来说两个读写操作指令之间的时间差距不过在几十个纳秒。怎么办?必须让两个操作之间有一段空闲时间,以避免两个操作同时使用总线。也就是所谓的“总线竞争”。<br /><br />所以,您所看到的读写操作之间的空白,就是空闲周期的作用了<br />
zlgARM 发表于 2007-5-18 11:25 | 显示全部楼层

RE

楼主您好。<br />已经抽空测试。<br /><br />已经确认,IDCY和写周期或读周期的本身长度没有任何关系,它只是间隔。<br />已经确认,一个读操作之后跟一个写操作,这两个操作之间的间隔时间非常完美地遵循了IDCY的概念和计算公式。<br />已经确认,两个连续读操作之间的间隔受IDCY设置的影响。时间间隔非常完美地遵循了IDCY的概念和计算公式。<br /><br />至于两个写操作之间的间隔。<br />如果程序在外部存储器运行,那么两个写操作之间还需要插入读操作(读指令),此时,两个写操作之间的间隔和IDCY毫无关系;<br />如果程序在内部Flash运行,两个写操作之间的间隔固定,但不再有读操作周期,仍和IDCY无关系。<br /><br />测试环境:EASYARM2200,操作外部RAM。
zlgARM 发表于 2007-5-18 16:37 | 显示全部楼层

RE

在LPC2200中IDCY是指:<br />1、读操作后跟了一个写操作时,读操作和写操作之间的时间间隔;<br />2、两个连续读操作之间的时间间隔。
 楼主| andrew.xu 发表于 2007-5-18 17:24 | 显示全部楼层

谢谢您的解答

对于第一个问题,关于IDCY的解释我明白了<br />但第二个问题,还是不明白。<br />“<br />如果程序在外部存储器运行,那么两个写操作之间还需要插入读操作(读指令),此时,两个写操作之间的间隔和IDCY毫无关系;<br />如果程序在内部Flash运行,两个写操作之间的间隔固定,但不再有读操作周期,仍和IDCY无关系。<br />”<br />这样的话,因为我的程序在内部flash运行<br />图3中应该看到,连续的写操作,中间的间隔是固定的才对,为啥一会儿长,一会儿短呢?<br />
zlgARM 发表于 2007-5-18 19:53 | 显示全部楼层

andrew.xu

晚上好!<br />当程序在内部Flash中,用LA1032逻辑分析仪测试两个写周期之间的间隔。<br />我们测得是40纳秒左右。由于有误差,可能会多10个纳秒——纳秒已经是很小的时间但为了。<br />至少从实地观测结果来看,再考虑到精度问题,可以说间隔是固定的。<br /><br />您的图三我看了,我认为间隔基本是相等的。请问您是否将波形中的尖峰脉冲也认为是间隔呢?是否可以告诉我,图三中的尖峰脉冲宽度多少。如果不考虑尖峰脉冲,写周期之间的间隔数值分别是多少?<br /><br />不知您有没有逻辑分析仪?测时序最好用逻辑分析仪而不是示波器。<br />如果对它不了解,麻烦您在链接里搜索一下LA1032。<br /> <br /> 相关链接:<a href='http://www.zlgmcu.com/infocomm/newupdate.asp?sorttype=search'>http://www.zlgmcu.com/infocomm/newupdate.asp?sorttype=search</a>
 楼主| andrew.xu 发表于 2007-5-20 10:29 | 显示全部楼层

没逻辑分析仪耶

那个是尖锋脉冲?<br />那图3是写8个数据的,如果去掉你说的尖锋脉冲,不是只有4个数据了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

9

主题

149

帖子

0

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