BASEADDRESS就是用来确定你的基地址的高6位。
GPMC范围0-0x3fffffff。所以基地址的A31,A30,为0.
而BASEADDRESS的A29-A24就是用来确定你的基地址的高6位。
比如说。#defineCONFIG_DM9000_BASE 0x2c000000
DM9000连接上cs6, 地址位:0010,1100,0000,0000,0000,0000,0000
它的A29-A24就是10,1100;所以我们必须把10,1100写入到cs6的CONFIG7
writel(0x00000f6c,&gpmc_cfg->cs[6].config7);
0xf6c就是0b1111,0110,1100也就是说BASEADDRESS的【5:0】为0x2c。
如果 CONFIG_DM9000_BASE为0x20000000它的A29-A24就是0b10,0000
因此必须写到对应片选的CONFIG7,【5:0】必须位0b10,0000.
-
而MASKADDRESS是用来确定你的这个片选的空间大小。超过范围就会被屏蔽,片选就不会被选中。比如
#defineCONFIG_DM9000_BASE 0x2c000000
#defineDM9000_IO CONFIG_DM9000_BASE
#defineDM9000_DATA (CONFIG_DM9000_BASE + 0x400)
DM9000_DATA的范围不能超过(CONFIG_DM9000_BASE+ MASKADDRESS所选的大小)
-
而那个0x400是怎么确定的呢。
-
这个只要看CMD这个引脚,是连接到GPMC的哪根地址线。在我这边是连接第10根。
访问0x2c000400时,ADDR10为1,也就是CMD为1,为DATA输入输出。