fsmc数据读取问题

2019-07-21 02:54发布

各位大牛,我在使用fsmc的时候有些地方不是很明白,请教一下
宏定义如下:
#define Bank1_NOR1_ADDR       ((u32)0x60000000)
#define ADDR_SHIFT(A) (Bank1_NOR1_ADDR + 2*(A))
假设 A=0xC0 0000
vu32 temp; //定义32位变量temp
temp=*(vu32 *)ADDR_SHIFT(A) 将对应地址中的数据赋值给temp 

问题1.   我现在将CPLD作为外部SRAM来用,ARM与CPLD连接的地址线8位,数据线16位 ,也就是说外部存储器数据宽度是16位的,CPLD向地址  0xC1 0000  发送16位数据,如果我将*(vu32 *)ADDR_SHIFT(A)中的vu32设置成vu16,那出来的数据放在temp 的低16位,这没有问题,但是用vu32那读出来temp 的低16位和高16位为同样的值(0xC10001没有输出数据),请问这是为什么?
问题2.  Bank1_NOR1_ADDR + 2*(A)这地方为什么要乘以2
问题3.
 (vu16 *)ADDR_SHIFT(A)=(vu16 *)0x60C10000为什么不是强制转换成16位的指针(就变成0x0000了),而是取16位的数据?
希望原子哥和各位大牛帮忙解答,十分感谢!!
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。