中级会员
 
- 积分
- 262
- 金钱
- 262
- 注册时间
- 2019-5-27
- 在线时间
- 74 小时
|
对下面这些语句的一些理解,不得不说这几条语句写的挺巧妙的,一切都是那么的巧合与合乎常理!!!
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//LCD 操作结构体
typedef struct
{
vu16 LCD_REG;
vu16 LCD_RAM;
} LCD_TypeDef;
使用 NOR/SRAM 的 Bank1.sector4, 地址位 HADDR[27,26]=11 A6 作为数据命令区分线
注意 16 位数据总线时, STM32 内部地址会右移一位对齐 !
#define LCD_BASE ((u32)(0x6 C 000000 | 0x0 0 00 0 07E))
#define LCD ((LCD_TypeDef *) LCD_BASE)
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////
首先看下面的一段话,选自《零死角玩转STM32—基于野火F407[霸天虎]开发板》有助于对上面的理解!!!
(2) 本工程中使用FSMC_A0 地址线作为命令/数据选择线RS 信号,所以在以上地址范围
内,再选择出使得FSMC_A0 输出高电平的地址,即可控制表示数据,选择出使得
FSMC_A0 输出低电平的地址,即可控制表示命令。
 要使FSMC_A0 地址线为高电平,实质是输出地址信号的第0 位为1 即可,使用
0X6800 0000~0X6BFF FFFF 内的任意地址,作如下运算:
设置地址的第0 位为1: 0X6800 0000 |= (1<<0) = 0x6800 0001
 要使FSMC_A0 地址线为低电平,实质是输出地址信号的第0 位为0 即可,使用
0X6800 0000~0X6BFF FFFF 内的任意地址,作如下运算:
设置地址的第0 位为0: 0X6800 0000 &= ~ (1<<0) = 0x6800 0000
(3) 但是,以上方法计算的地址还不完全正确,根据《STM32 参考手册》对FSMC 访问
NOR FLASH 的说明,见图 28-27,STM32 内部访问地址时使用的是内部HADDR 总
线,它是需要转换到外部存储器的内部AHB 地址线,它是字节地址(8 位),而存储器
访问不都是按字节访问,因此接到存储器的地址线依存储器的数据宽度有所不同。
end
之后,下面这位老哥就讲的很详细了!
http://www.openedv.com/posts/list/54073.htm
|
|