之前对这个问题不太理解,现在通过百度,似乎理解了,记录一下,以防忘记。
参考手册中写了,HADDR是字节地址,如果访问外部存储器是字节型,也就是八位,那么通过地址线访问时,直接可以一次性接收这个数据。
那么如果外部存储器是16位时,通过地址线访问时,就需要分两次,将这16位数据,一次8位的接收过来.
也就是说
0b00 0000 0000 0000 0000 0000 0000 访问存储器第0个地址的第1个字节
0b00 0000 0000 0000 0000 0000 0001 访问存储器第0个地址的第2个字节
0b00 0000 0000 0000 0000 0000 0010 访问存储器第1个地址的第1个字节
0b00 0000 0000 0000 0000 0000 0011 访问存储器第1个地址的第2个字节
0b00 0000 0000 0000 0000 0000 0100 访问存储器第2个地址的第1个字节
0b00 0000 0000 0000 0000 0000 0101 访问存储器第2个地址的第2个字节
0b00 0000 0000 0000 0000 0000 0110 访问存储器第3个地址的第1个字节
0b00 0000 0000 0000 0000 0000 0111 访问存储器第3个地址的第2个字节
以此类推
此时如果把第0位去掉,我们就可以通过剩下来的这25位来判断访问的是存储器的第几个地址。
通过HADDR[1]是0还是1却正好能够区别外部存储器上的0地址和1地址,而通过HADDR[2]和HADDR[1]是10还是11又正好能够区别外部存储器上的2地址和3地址
HADDR[0]不接到FSMC上,CPU依然是逐次增一地去访问外部存储器,也还是发出一个地址读回一个字节,但是CPU每发两个地址都会停留在外部存储器的同一个地址上,所以最终,同一个地址上的两个字节都会被CPU读取