OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 3605|回复: 4

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

[复制链接]

12

主题

27

帖子

0

精华

初级会员

Rank: 2

积分
88
金钱
88
注册时间
2016-6-4
在线时间
21 小时
发表于 2016-6-24 15:19:45 | 显示全部楼层 |阅读模式
2金钱
本帖最后由 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所对应的寄存器里面了吗?这个不清楚,还请哪位版友仔细解答一下,非常感谢

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

58

主题

6293

帖子

1

精华

资深版主

Rank: 8Rank: 8

积分
11476
金钱
11476
注册时间
2014-4-1
在线时间
1297 小时
发表于 2016-6-24 15:38:13 | 显示全部楼层

没错,是写到这两个“寄存器”了。
硬件上有安排,
这两个寄存器都位于LCD里面。


回复

使用道具 举报

12

主题

27

帖子

0

精华

初级会员

Rank: 2

积分
88
金钱
88
注册时间
2016-6-4
在线时间
21 小时
 楼主| 发表于 2016-6-24 16:33:40 | 显示全部楼层
xuande 发表于 2016-6-24 15:38
没错,是写到这两个“寄存器”了。
硬件上有安排,
这两个寄存器都位于LCD里面。

可否详细点了,不明白0x6c000083,0x6c000087这两个地址为什么是这么多(我把LCD驱动IC资料上传),是否上面的地址为STM32里面的存储空间地址,C为二进制0011表示是FSMC的地址范围第四区域,后面的数字83可以取其他的值吗,还是内部原理和驱动机制没明白
回复

使用道具 举报

12

主题

27

帖子

0

精华

初级会员

Rank: 2

积分
88
金钱
88
注册时间
2016-6-4
在线时间
21 小时
 楼主| 发表于 2016-6-24 16:37:34 | 显示全部楼层
资料和图片
QQ图片20160624163918.png
QQ图片20160624163922.png

NT35310Draft SPEC V0.pdf

11.51 MB, 下载次数: 66

回复

使用道具 举报

58

主题

6293

帖子

1

精华

资深版主

Rank: 8Rank: 8

积分
11476
金钱
11476
注册时间
2014-4-1
在线时间
1297 小时
发表于 2016-6-24 16:45:50 | 显示全部楼层
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对应的值。

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



回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-2-27 14:32

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表