在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 2881|回复: 3

[求助] 读写寄存器如何实现

[复制链接]
发表于 2013-12-17 11:10:48 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
在C中调用write_reg(address, 32'hxxxx)或者read_reg(address)就可以实现读写寄存器,但是更底层的动作到底怎么样的呢?或者说,write_reg和read_reg是如何定义的呢?
感谢懂的人解释一下。以前看过,现在又忘了。
发表于 2013-12-17 13:07:33 | 显示全部楼层
这个有点难!
 楼主| 发表于 2013-12-17 16:59:27 | 显示全部楼层
回复 2# zhang_ymin


   哎,忘记了……
发表于 2013-12-30 11:28:12 | 显示全部楼层
回复 1# fiysben


   什么叫更底层怎么操作呢?
   解析的时候CPU把你的命令转化成指令,write_reg/read_reg应该是包装过的function, 大概意思就是让处理器去某个地址取一个数据,比如说32bits, 然后硬件会做解析,看这个地址空间落在哪里,比如说AHB总线的uart端口或者AHB2APB转入APB, 假设你的SYSCON 在APB下面('h40000000 - 'h40000800),
那CPU就会去比如说'h40000020取数据,硬件设计就应该select APB,然后把地位地址的低位传递给APB, 比如说'h20, APB的硬件设计会再次把地址解析一遍,如果在范围内,传递给SYSCON,不然就给个error回去hresp=2'b01,如果响应速度慢,还可以用pready来控制等待时间,如果是写数据,就是pwrite,读的话就是等pread回来。数据读回AHB bus之后会放在某个寄存器里面供你接下来的指令使用,比如ARM的R0-R7,(对这一块我也不是很熟,正在学习,我说的也可能不对)。

如果你有现成的代码,你应该去看一下write_reg这个function是怎么写的,大概应该是

typedef struct {
    uint32    GPS_STATUS;
   ...
}  GPS_TypeDef

#define GPS_SPACE_BASE 0x4000c000;
#define GPS_CON   ((GPS_TypeDef*)  GPS_SPACE_BASE)

rdata = GPS_CON->GPS_STATUS;


不知道我说的是不是你想问的。

:)
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /2 下一条

×

小黑屋| 手机版| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-11-22 10:20 , Processed in 0.021430 second(s), 9 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表