wanggang508
驱动小牛
驱动小牛
  • 注册日期2003-08-24
  • 最后登录2005-03-01
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1754回复:10

我的固件程序中D12_DATA和D12_COMMAND该如何定义??50分

楼主#
更多 发布于:2005-01-03 13:44
在我的硬件(51+d12)中外扩了一个32K的ram,外扩ram使用了P0和P2的全部口线(其中P2.7是做为片选信号了),P1.1做d12的片选信号了,P1.5做AD芯片的片选信号了。请问在固件程序中d12的D12_DATA(数据地址)和D12_COMMAND(命令地址)该如何定义?d12的使能能够这样定义:#define ENABLE_D12  P1_5 = 1; P1_1 = 0  ,怎样避免总线冲突??先谢谢各位大侠了!!!
多多交流,少走弯路!!!
sunne0402
驱动牛犊
驱动牛犊
  • 注册日期2004-10-16
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2005-01-03 21:16
我也遇到了这个问题,不过我用的不是51内核的MCU。总线冲突也是我现在遇到的问题,我想问问对D12初始化后是否需要其CS一直为低电平啊??
肯请给为大虾们赐教!!
guowf
驱动牛犊
驱动牛犊
  • 注册日期2002-12-15
  • 最后登录2006-04-27
  • 粉丝0
  • 关注0
  • 积分20分
  • 威望3点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2005-01-04 10:28
cs当然要低的了!!cs的意思就是片选,chip select
tomjin
驱动牛犊
驱动牛犊
  • 注册日期2002-12-16
  • 最后登录2006-03-09
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望1点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
地板#
发布于:2005-01-04 10:33
访问D12对mcu来说就和访问外部数据存储区一样!D12占外部存储区的2个地址,楼主只扩展了32k的ram,应该没有将外部数据存储区的地址全部用完吧!
D12初始化完后,CS不要求一直为低,只有当要对D12进行读写的时候有这个要求,具体可以看看D12的时序图!
wanggang508
驱动小牛
驱动小牛
  • 注册日期2003-08-24
  • 最后登录2005-03-01
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2005-01-04 12:52
我外扩的ram占用了外部00~ox7fff的地址空间,我的固件程序中的D12_DATA(数据地址)和D12_COMMAND(命令地址)是不是只要随意定义一个大于0x7fff的外部地址就行了?譬如定义为0x8000等!!!
多多交流,少走弯路!!!
sunne0402
驱动牛犊
驱动牛犊
  • 注册日期2004-10-16
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2005-01-04 22:50
我好郁闷啊,我连接好D12后,对其复位后,发送FD命令读其ID号,可是读到的却是00,00。可是我用逻辑分析仪抓取总线上的时序,完全满足D12的要求啊。我问过周立功公司的工程师,他们说可能是我的CPU太快了,可我的MCU指令周期是0.8us,D12不会比它还慢吧。我现在真不知道该怎么查了,请各位大虾们赐教啊,小女子先谢过了~~! :(
tomjin
驱动牛犊
驱动牛犊
  • 注册日期2002-12-16
  • 最后登录2006-03-09
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望1点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2005-01-05 10:29
怎么能够谁便定义一个地址呢?地址还是要和你实际的硬件连线相关的!
楼上的“小女子”还有逻辑分析仪,真是羡慕啊!为了排除你cpu速度太快的想法,你可以在发命令fdh和读数据的中间加上空指令,或者你单步执行,如果还是0000的话,那你就要换台好的“逻辑分析仪”了!
shenshaoxiang
驱动牛犊
驱动牛犊
  • 注册日期2004-08-27
  • 最后登录2009-04-03
  • 粉丝0
  • 关注0
  • 积分69分
  • 威望8点
  • 贡献值0点
  • 好评度6点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2005-01-05 15:26
wanggang508  我觉得是这样子的。你要操作d12时,你的d12片子肯定要被选中,也就是d12的/cs=0,相当于P1.1 = 0;这样从你的外扩地址来看,你的A0~A15地址线中,此时必须保证A1 = 0。否则,你的D12肯定访问不到。那么针对你的外扩ram之后,占用了00~0x7fff的情况而言,d12地址只能是从0x8000开始了,这样你只要保证在操作d12时候,外面的a/d,ram不被片选就可以了。可以是偶地址为0x8020,奇地址是0x8021,这里是让P2.7=1,P1.5=1,P1.1=0,无关位可以为1也可以为0,只要保证那几根线那样取值,然后根据奇偶来划分地址就可以了。祝你成功。
向大家学习,知识的获得来自于理论,实践和交流。
wanggang508
驱动小牛
驱动小牛
  • 注册日期2003-08-24
  • 最后登录2005-03-01
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2005-01-05 19:44
tomjin大侠,我说的随便定义一个地址是指在外扩ram占用的地址外随意定义一个地址,并且使用片选信号P1.1和P1.5来避免d12和AD芯片总线冲突。不知我的理解对不对?

shenshaoxiang大侠,不知道你说的“这样从你的外扩地址来看,你的A0~A15地址线中,此时必须保证A1 = 0。否则,你的D12肯定访问不到”我不太理解为啥要保证A1=0呀?只要保证P2.7=1,外扩RAM就不会和d12地址冲突了呀?

请各位大侠指教!!!
多多交流,少走弯路!!!
shenshaoxiang
驱动牛犊
驱动牛犊
  • 注册日期2004-08-27
  • 最后登录2009-04-03
  • 粉丝0
  • 关注0
  • 积分69分
  • 威望8点
  • 贡献值0点
  • 好评度6点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2005-01-06 15:15
你保证P2.7=1只能保证ram不片选中,但是在P2.7=1时,你若是让P1.1 != 0的话,你的d12就不会被片选吧?我的意思时说你除了要保证P2.7 = 1之外,还在设定地址时,保证P1.1 = 0不变。那么又要考虑哪个a/d的P1.5 = 1让它也不被选中。这样,你再按照奇偶要求分配地址的其他位就可以了。这些都是你的硬件没问题的情况下讨论的,若硬件还有什么小毛病,估计你得费点力去查查了
向大家学习,知识的获得来自于理论,实践和交流。
dgicd
驱动牛犊
驱动牛犊
  • 注册日期2006-12-25
  • 最后登录2008-03-19
  • 粉丝0
  • 关注0
  • 积分80分
  • 威望9点
  • 贡献值0点
  • 好评度8点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2008-02-26 21:46
因微控制器P0口为数据地址总线复用,PDIUSBD12通过ALE脚逻辑及奇偶地址识别命令或数据,所以定义奇偶地址如下:

#define D12_COMMAND                     0x07f03

#define D12_DATA                                 0x07f02

当outportb或inportb的输出地址为D12_COMMAND时,表明在数据段总线时间内传输的是命令。当outportb或inportb的输出地址为D12_DATA时,表明在数据段总线时间内传输的是数据。
游客

返回顶部