本帖最后由 xuande 于 2016-6-24 15:22 编辑
平时8位MUC,汇编中一目了然在ram区定义变量,比如 data1 EQU 0x8fh,然后就可以对这个变量进操作,STM32中明白地址映射这回事,但不懂怎么操作的, 比如FSMC功能这块,当要驱动外部LCD时,列程用了相关地址映射 #define LCD_BASE ((u32)(0x6C000000 | 0x000007E)) //这个地址是0x6c00007e ,#define LCD ((LCD_TypeDef *) LCD_BASE) 这两个地址映射,后面又定义了一个LCD地址结构体typedef struct
{
vu16 LCD_REG;
vu16 LCD_RAM;
} LCD_TypeDef; //这个结构里面的两个对应地址偏移4 分别是 0x6c000083,0x6c000087吗? 这两个地址表示什么功能的寄存器?,最后在调用函数赋值的时候
void LCD_WriteReg(u16 LCD_Reg,u16 LCD_RegValue) //
{
LCD->LCD_REG = LCD_Reg;
LCD->LCD_RAM = LCD_RegValue;
}
LCD_WriteReg(0x0000,0x0001);
那么问题来了,这样一来0x0000,0x0001是不是否分别写到 0x6c000083,0x6c000087所对应的寄存器里面了吗?这个不清楚,还请哪位版友仔细解答一下,非常感谢
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
可否详细点了,不明白0x6c000083,0x6c000087这两个地址为什么是这么多(我把LCD驱动IC资料上传),是否上面的地址为STM32里面的存储空间地址,C为二进制0011表示是FSMC的地址范围第四区域,后面的数字83可以取其他的值吗,还是内部原理和驱动机制没明白
你意思可能是说:为什么地址数值这么大。。。
地址映射是比较随意的。
假设外部芯片的CS端是低电平有效(即选通),
硬件设计时,用CPU的一根地址线,反相之后接到该CS端,
那么:该地址线必须为1,才能选通芯片。
然后,随意性表现出来了:
如果CPU地址线用的是A0,那么只要CPU发出 0b xxxx xxx1地址,就会选择到这个外部芯片;(x表示0、1任意值)
如果用的是A1,那么只要CPU发出 0b xxxx xx1x,就会选择到芯片;
自己算算看,其他A2、A3、A4对应的值。
然后,你应当明白为什么数值会这么大。
一周热门 更多>