在设计外部总线接口电路的时候,必须要搞清楚总线的时序,将其正确的连接,才能确保你访问的地址是你所想要的。8051的总线我们熟知,16根地址线,8位数据线;16位地址与地址线的的电平是对应的,比如*0xfffe,那么A15~A1的电平为1,A0的电平为0。<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />
对于STM32在8位宽度时候,地址与地址线上的电平也是对应的,但当配制成16位宽度的时候,地址与地址线上的电平就不是对应的了。因为对于STM32的CPU来说,地址指的是字节地址,当数据宽度为两个字节时,相应的地址偏移量也为两个字节,即访问*0x2时,A0的电平为1,其余的电平为0,访问*0x04时,A1的电平为1,其余的为0,访问*0x06时,A1和A0的电平为1,其余的为0。
当然,*0x2和*0x4都不是STM32外部地址区,外部地址区还要加一个基地址,比如:Bank1_SRAM3_ADDR的基地址为0x68000000,如果要访问Bank1_SRAM3_ADDR地址区,则还需要在0x2前面加上这个基地址才行。只有这样,与之相应的外部片选信号才能变为有效。
下面来举个例子说明:
(假设总线宽度已配置成16位)
#define Bank1_SRAM3_ADDR ((u32)0x68000000) //BANK1的NOR/PSRAM3 地址为0x68000000
*(vu32 *)(Bank1_SRAM3_ADDR +0x2)= 0xfffe;
地址和数据线的电平如下:
片选线:FSMC_NE3为底电平(有效)
地址线:A0电平为1,其余为0
数据线:D0为0,其余的都为1。
tengjingshu_112148725 2010-4-13 15:29