我试图弄清楚如何在u-boot中使用以下语句设置“SRAM_CTL1_CFG”寄存器的第4和第5位:
/* 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) 只会设置声明的寄存器,但在其他也需要魔法值的板上可能会出现一些隐藏的损坏。
关于c - 如何在 u-boot 中设置该寄存器的位,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36055594/