这个寄存器的位是如何在 u-boot 中设置的
How bits of this register is set in u-boot
我想弄清楚 "SRAM_CTL1_CFG" 寄存器的第 4 位和第 5 位是如何在 u-boot 中使用以下语句设置的:
/* Map SRAM to EMAC */
setbits_le32(&sram->ctrl1, 0x5 << 2);
根据数据表,如果此 "SRAM_CTL1_CFG" 的位 4:5 变为“01”
SRAM 将映射到 EMAC 外设。
http://linux-sunxi.org/SRAM_Controller_Register_Guide
这个setbits_le32(&sram->ctrl1, 0x5 << 2)
不应该是setbits_le32(&sram->ctrl1, 0x4 << 2)
吗?
所以,答案是肯定的,(0x5 << 2),十进制的 20 在二进制中是 010100,我们将“4:5”设置为“01”,这是 EMAC,并将位 2 设置为1. 将第 2 位设置为 1 目前是我们正在设置的一个神奇值,因为它是在 allwinner 提供的来源中设置的(大概,我没有追溯所有历史),没有进一步的解释。将此设置为 (0x4 << 2) 只会设置声明的寄存器,但在其他也需要魔法值的板上可能会有一些隐藏的破损。
我想弄清楚 "SRAM_CTL1_CFG" 寄存器的第 4 位和第 5 位是如何在 u-boot 中使用以下语句设置的:
/* Map SRAM to EMAC */
setbits_le32(&sram->ctrl1, 0x5 << 2);
根据数据表,如果此 "SRAM_CTL1_CFG" 的位 4:5 变为“01” SRAM 将映射到 EMAC 外设。
http://linux-sunxi.org/SRAM_Controller_Register_Guide
这个setbits_le32(&sram->ctrl1, 0x5 << 2)
不应该是setbits_le32(&sram->ctrl1, 0x4 << 2)
吗?
所以,答案是肯定的,(0x5 << 2),十进制的 20 在二进制中是 010100,我们将“4:5”设置为“01”,这是 EMAC,并将位 2 设置为1. 将第 2 位设置为 1 目前是我们正在设置的一个神奇值,因为它是在 allwinner 提供的来源中设置的(大概,我没有追溯所有历史),没有进一步的解释。将此设置为 (0x4 << 2) 只会设置声明的寄存器,但在其他也需要魔法值的板上可能会有一些隐藏的破损。