有时候我必须选择一个人过冬 习惯在冰天雪地里追梦

DIY一个小型计算机系统(4)

上一篇 / 下一篇  2007-08-05 17:39:31 / 个人分类:工作备忘

这几天模拟了一下双51共享一片SRAM62256内存的硬件和程序的编写,难度比预计的要大,其中难点有:
1、51MCU没有挂起总线的功能,两片MCU在运行时如果配合不当会产生总线冲突问题,数据会混乱。51MCU的P1/P2/P3口不是三态口,只有高/低电平,不支持高阻浮空。因此双MCU并联时,如果某个MCU占用总线使用完毕后,必须通过软件处理,往总线口全输出1,从资料可知,当P1/P2/P3口输出1时,IO口内部的下拉场效应管会关闭,这样才不会影响总线上的数据。
2、选用的STC5412,不是标准的51MCU,P0口只有4个,因此不支持硬件数据总线来读写外部SRAM,现在只好把P1口分配出来当作数据总线/低8位地址线,P2口分配成高8位地址线,然后软件实现读写时序。本来硬件读写SRAM一个字节只需要两行命令,6个时钟就能完成,现在用软件来实现读写时序至少要48个时钟(幸好STC5412是单周期内核,指令执行速度比标准的51快上很多倍),速度慢了几倍,但即使这样,在使用22.1184Mhz晶振时,约能获得1/(1/22000000*48)=458KB/S内存带宽,已经足够了。
3、共享的SRAM抢夺的问题。在我的设想里,两个MCU无论在物理线路连接还是软件运行时,都无分主次,真正的平等(所有的任务都是同时传给两个MCU,如果我通过键盘输入一个按键信号,我不会在软件里强行指定哪个MCU会处理这个信号,可能是A也可能是B,谁有空就谁处理)。即使在SRAM的使用上,双MCU也没有主次之分,这就产生了抢夺问题。模拟测试的程序里,每个MCU要访问SRAM前,先查询SRAM有没有被占用(74LS373的OE脚为0表示SRAM正在被另外一个MCU占用,1表示空闲),如果SRAM空闲,那么把74LS373的OE脚清0,然后访问SRAM,访问完毕后,再把74LS373的OE脚置1,以便另外一个MCU使用SRAM或下次再使用SRAM。但如果SRAM空闲时,两个MCU都同时发出查询命令,然后都得到SRAM空闲的信息,再同时发出访问SRAM指令,就会产生数据错误。想了很久,还没想到有效的解决方法,似乎软件无法解决这个问题,初步考虑引入硬件进行一个优先级的仲裁,指定其中一个MCU具有SRAM优先访问权……寻找解决方法中

 

(To be continued)


TAG: 共享sram

 

评分:0

我来说两句

显示全部

:loveliness: :handshake :victory: :funk: :time: :kiss: :call: :hug: :lol :'( :Q :L ;P :$ :P :o :@ :D :( :)

日历

« 2008-12-03  
 123456
78910111213
14151617181920
21222324252627
28293031   

数据统计

  • 访问量: 28546
  • 日志数: 189
  • 图片数: 24
  • 文件数: 6
  • 书签数: 4
  • 建立时间: 2006-04-20
  • 更新时间: 2008-11-30

RSS订阅

Open Toolbar