首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将32位值的硬件增量寄存器地址仅由一个通过通信总线进行?

如何将32位值的硬件增量寄存器地址仅由一个通过通信总线进行?
EN

Stack Overflow用户
提问于 2020-09-18 11:55:54
回答 1查看 201关注 0票数 0

我有一个关于硬件内存布局的问题。

我目前正在读取设备隔离能量计量芯片组( Ade7978 )的数据表。

它在其登记册清单中列出了所有数据的登记地址,以便通过I S.C或SPI进行通信(表39,第105页)。以下是前三个数字的摘录:

代码语言:javascript
复制
┌─────────┬─────────┬──────────────────────────────────┬─────────────────────────────────┐
│ Address │ Name    │ Description                      │ Bit Length During Communication │
├─────────┼─────────┼──────────────────────────────────┼─────────────────────────────────┤
│ 0x4380  │ AIGAIN  │ Phase A current gain adjust.     │ 32                              │
│ 0x4381  │ AVGAIN  │ Phase A voltage gain adjust.     │ 32                              │
│ 0x4382  │ AV2GAIN │ Phase A V2P channel gain adjust. │ 32                              │
└─────────┴─────────┴──────────────────────────────────┴─────────────────────────────────┘

32位长的值和地址值如何增长1?

寄存器不是直接映射到内存中的,怎么会这样?

它们是一个任意的数字,只是被确定为任意的,内部映射到内存的不同部分吗?这样我就不能意外地访问32位数字的中间,还是有硬件原因?

如果你有一个普遍的答案,尽一切可能。如果您碰巧知道Ade7978为什么专门这样做,那对我也有好处。

耽误您时间,实在对不起。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-09-19 16:58:17

虽然它看起来与普通的字节地址系统不同,但实际上地址分配和地址指向的数据的位长之间没有什么可做的。访问的数据称为“word”。ADE7978的串行端口可以使用32位、16位或8位字.继续读取寄存器表,您会发现不同的寄存器具有32位、16位或8位的长度,并且它们的地址仍然增加了1。

程序员模型中的寄存器表有点类似于以下内容:

代码语言:javascript
复制
ADDR1  :  |-----REGISTER 1-----|
ADDR2  :  |--REGISTER 2--|
ADDR3  :  |-------REGISTER 3-------|

在电路中,在串口内的寄存器地址解码逻辑接收合法寄存器地址后,它将断言其中一个寄存器选择信号,然后只允许写入/读取相应的寄存器。就像:

代码语言:javascript
复制
16-BIT_REG_ADDR --+---- =ADDR1? --ENABLE-->  |----16-BIT_REG1----|
                  +---- =ADDR2? --ENABLE-->  |--8-BIT_REG2--|
                  +---- =ADDR3? --ENABLE-->  |--------32-BIT_REG3--------|

每个寄存器作为一个整体来处理(访问),不管它有多少位。

当然,当使用串行端口访问不同位长的寄存器时,控制器侧的程序应该提供/读取相应的位数和串口操作图中所示的时序。

总之,这是设计提供者和用户之间的协议。只要用户按照手册访问寄存器,就不会有任何问题。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63955305

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档