F4疑问:地址映射后对应的寄存器是怎么做到赋值的

2019-07-20 21:34发布

本帖最后由 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所对应的寄存器里面了吗?这个不清楚,还请哪位版友仔细解答一下,非常感谢

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
4条回答
xuande
1楼-- · 2019-07-20 21:56
 精彩回答 2  元偷偷看……
zorroyl
2楼-- · 2019-07-20 22:23
xuande 发表于 2016-6-24 15:38
没错,是写到这两个“寄存器”了。
硬件上有安排,
这两个寄存器都位于LCD里面。

可否详细点了,不明白0x6c000083,0x6c000087这两个地址为什么是这么多(我把LCD驱动IC资料上传),是否上面的地址为STM32里面的存储空间地址,C为二进制0011表示是FSMC的地址范围第四区域,后面的数字83可以取其他的值吗,还是内部原理和驱动机制没明白
zorroyl
3楼-- · 2019-07-21 00:25
资料和图片
xuande
4楼-- · 2019-07-21 04:33
zorroyl 发表于 2016-6-24 16:33
可否详细点了,不明白0x6c000083,0x6c000087这两个地址为什么是这么多(我把LCD驱动IC资料上传),是否 ...


你意思可能是说:为什么地址数值这么大。。。

地址映射是比较随意的。
假设外部芯片的CS端是低电平有效(即选通),
硬件设计时,用CPU的一根地址线,反相之后接到该CS端,
那么:该地址线必须为1,才能选通芯片。

然后,随意性表现出来了:
如果CPU地址线用的是A0,那么只要CPU发出 0b xxxx xxx1地址,就会选择到这个外部芯片;(x表示0、1任意值)
如果用的是A1,那么只要CPU发出 0b xxxx xx1x,就会选择到芯片;
自己算算看,其他A2、A3、A4对应的值。

然后,你应当明白为什么数值会这么大。



一周热门 更多>