阅读:1754回复:10
我的固件程序中D12_DATA和D12_COMMAND该如何定义??50分
在我的硬件(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 ,怎样避免总线冲突??先谢谢各位大侠了!!!
|
|
|
沙发#
发布于:2005-01-03 21:16
我也遇到了这个问题,不过我用的不是51内核的MCU。总线冲突也是我现在遇到的问题,我想问问对D12初始化后是否需要其CS一直为低电平啊??
肯请给为大虾们赐教!! |
|
板凳#
发布于:2005-01-04 10:28
cs当然要低的了!!cs的意思就是片选,chip select
|
|
地板#
发布于:2005-01-04 10:33
访问D12对mcu来说就和访问外部数据存储区一样!D12占外部存储区的2个地址,楼主只扩展了32k的ram,应该没有将外部数据存储区的地址全部用完吧!
D12初始化完后,CS不要求一直为低,只有当要对D12进行读写的时候有这个要求,具体可以看看D12的时序图! |
|
地下室#
发布于:2005-01-04 12:52
我外扩的ram占用了外部00~ox7fff的地址空间,我的固件程序中的D12_DATA(数据地址)和D12_COMMAND(命令地址)是不是只要随意定义一个大于0x7fff的外部地址就行了?譬如定义为0x8000等!!!
|
|
|
5楼#
发布于:2005-01-04 22:50
我好郁闷啊,我连接好D12后,对其复位后,发送FD命令读其ID号,可是读到的却是00,00。可是我用逻辑分析仪抓取总线上的时序,完全满足D12的要求啊。我问过周立功公司的工程师,他们说可能是我的CPU太快了,可我的MCU指令周期是0.8us,D12不会比它还慢吧。我现在真不知道该怎么查了,请各位大虾们赐教啊,小女子先谢过了~~! :(
|
|
6楼#
发布于:2005-01-05 10:29
怎么能够谁便定义一个地址呢?地址还是要和你实际的硬件连线相关的!
楼上的“小女子”还有逻辑分析仪,真是羡慕啊!为了排除你cpu速度太快的想法,你可以在发命令fdh和读数据的中间加上空指令,或者你单步执行,如果还是0000的话,那你就要换台好的“逻辑分析仪”了! |
|
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,只要保证那几根线那样取值,然后根据奇偶来划分地址就可以了。祝你成功。
|
|
|
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地址冲突了呀? 请各位大侠指教!!! |
|
|
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让它也不被选中。这样,你再按照奇偶要求分配地址的其他位就可以了。这些都是你的硬件没问题的情况下讨论的,若硬件还有什么小毛病,估计你得费点力去查查了
|
|
|
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时,表明在数据段总线时间内传输的是数据。 |
|