当前位置: 移动技术网 > 移动技术>移动开发>IOS > STM32 FSMC 16位寻址 地址移位的解读

STM32 FSMC 16位寻址 地址移位的解读

2020年07月15日  | 移动技术网移动技术  | 我要评论


一、
当 Bank1 接的是 16 位宽度存储器的时候:HADDR[25:1] FSMC_A[24:0]。
当 Bank1 接的是 8 位宽度存储器的时候:HADDR[25:0] FSMC_A[25:0]。

二、
//LCD 操作结构体
typedef struct
{ vu16 LCD_REG;
vu16 LCD_RAM;
} LCD_TypeDef;
//使用 NOR/SRAM 的 Bank1.sector4,地址位 HADDR[27,26]=11 A10 作为数据命令区分线
//注意 16 位数据总线时,STM32 内部地址会右移一位对齐! 
#define LCD_BASE ((u32)(0x6C000000 | 0x000007FE))
#define LCD ((LCD_TypeDef *) LCD_BASE)

三、
FSMC控制LCD,关于原子程序16位寻址的个人理解:
1.16位寻址和8位寻址差了一倍,所以地址线差出一根;
2.16位寻址时,芯片内总线寻址HADDR[25:1],地址从A1开始,对应IO口寻址为 FSMC_A[24:0],地址从A0开始,
为什么选择以上偏移1位的对应关系,见下表:


总线寻址HADDR[25:1]            IO寻址FSMC_A[24:0]
0000=0,                        0000=0
0010=2,                        0001=1
0100=4,                        0010=2
0110=6,                        0011=3
1000=8,                    0100=4    
1010=A                        0101=5                
1100=C                        0110=6    
1110=E                        0111=7    

偏移以后,内部寻址右移一位,就变成一半,内部变化两个字节,IO外面变化一个字节;
因内部总线地址0x6C000000,以字节变化,16位寻址IO以双字节变化,所以通过内部总线双字节变化实现外部IO地址的递增奇偶变化。                            

typedef struct
{ vu16 LCD_REG;
vu16 LCD_RAM;
} LCD_TypeDef;
定义的结构体内部变量是占用16位两个字节的寄存器,定义了基地址后,只要在基地址的基础上加0x02,2个字节
即可使外部IO的16位地址变化一次,内部0x7FE=0111 1111 1110,加2=0x00000800=1000 0000 0000,各右移一位,
则A10由0变为1,地址由0变为1,LCD控制则有命令REG变为数据RAM

本文地址:https://blog.csdn.net/u011878611/article/details/107317741

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网