新手上路
- 积分
- 33
- 金钱
- 33
- 注册时间
- 2014-11-12
- 在线时间
- 1 小时
|
5金钱
小弟使用VET6,PIN100的板子驱动W5300,由于VET6的地址线A0-A15被复用了,我就干脆使用W5300的间接访问模式进行FSMC 16BIT的访问,于是就选择了A16-A17这两个地址线来与W5300对接,
W5300的寄存器提供的间接模式访问,主要靠如下三个寄存器
MR 模式寄存器,配置W5300的访问模式和操作模式等
IDM_AR 间接访问模式地址寄存器
IDM_DR 间接访问模式数据寄存器
这三个寄存共占6个字节,由于采用16BIT传输,就只需要3次内存寻址就可以完成寄存器的访问,于是就只需要2根地址线就OK了,于是,我就将FSMC的A16-A17和W5300的A1-A2相连接。
如下的硬件线路连接:
CPU W5300
D[15:0] D[15:0]
A[17:16] A[2:1]
NE1 CS
NOE RD
NWE WR
根据如上配置
MR映射到内存的地址为 0x6000 0000
IDM_AR 0x6000 0000 + (1<<16)*2
IDM_DR 0x6000 0000 + (1<<17)*2
设置好后我初始化GPIO和FSMC接口后,就开始来访问0X60000000这个地址来读取MR寄存器的值了,
问题出来了,为什么经过初始化FSMC后,我进行单步调试,内存地址0X6000 0000开始一直到A000 0000这写内存单元,的数据全部都成了0B00 0B00 .......
由于W5300的读写时序和FSMC一样的,所以,我就直接访问MR寄存器,出来的数据就是 0B00,这个值和DATASHEET中的值相吻合。接下来我队这个寄存器进行写
操作的时候,就不对了,比如说 : *((__IO short *) 0x60000000) = 0x80 ,这是一个复位操作。我用示波器打FSMC的DATA口,确实产生了0X80的数据,ADDR口的电平也是正确的,但是内存0x6000 0000中的值并未改变!!!!
这是第一个问题。
第二个问题,我是STM32的新手,如果按照我上面的设置,为什么从0X6000 0000 到A000 0000都变成了0B00.....这可是整个FSMC的映射空间了,而实际上,我只选择了bank1_sram1就是0x60000000 - 0x64000000,如果按照正常来看的话,应该是除了A16和A17为高的情况下的剩余地址中的值一样我还可以理解。可是结果是这样就整的恼火了!!!!!
望大神解救,实在不行,我就只有换144PIN的ZET6了!!!
|
|