如何使用寄存器和偏移地址?

时间:2016-06-01 14:14:19

标签: c++ memory driver cpu-registers gpio

目前,我正在尝试编写一个GPIO驱动程序并试图绕过一些事情。在搜索互联网之后,我还没有真正找到关于基地址,寄存器和偏移地址的几个问题的明确答案。

对于下面的问题,假设我有一个任意寄存器D1:F0和一个10h-13h的偏移地址(大小为32位)。位0始终为1且保留,位10:1为GPIO基址,位31:11保留且始终为0.该寄存器的默认值为00000001h。使用此信息:

1)关于D1:F0的功能号到根端口映射是什么?

2)D1:F0是否包含可在代码中使用的端口?

3)偏移地址如何与问题1 /问题2相关?

4)除了第一个保留位(应该是1)之外,寄存器的默认值都是关闭的,对吗?

妄想症检查问题:位[4:1]表示1-4位,对吗?

先谢谢你们的家伙和女孩们!

注意:我需要指出这篇文章中的所有数据,寄存器,内存地址和偏移量都是任意的,绝不会反映我将使用/有权访问的数据。这只是概念性的,并说明了一点。

1 个答案:

答案 0 :(得分:2)

经过研究,我发现了一些事情:

1)功能数字到根端口映射关于 D1:F0 的示例是表示寄存器在 D 服务 1 , F 指示 0 。总线设备可以具有多个“功能”,例如,可以由不同的外围设备使用。

2)是和否。由于缺少更好的术语,NRP表示法为您提供了总线设备到函数的逻辑映射,并屏蔽了寄存器的实际十六进制基址和偏移量。处理器/芯片组文档具有总线启动位置的物理地址,并将这些地址与NRP表示法相关联。

3)偏移地址与 D1:F0 的示例NRP表示法无关。 D1:F0 仅表示寄存器的基址,而不是实际的寄存器地址。您可以将偏移量(或偏移量范围)应用于寄存器的基址。

4)Correct.Just使用一个位字段来验证并在纸上写出来验证。

额外问题:关于位的 [Number1:Number2] 的符号表示位 Number1 Number2 ,从左到右读取位右(高阶到低阶位)。因此,例如,位[15:4] 表示位4到15 ,总共12位。