如何在u-boot中设置该寄存器的位

时间:2016-03-17 08:52:46

标签: c arm linux-device-driver armv7 u-boot

我想弄清楚" SRAM_CTL1_CFG"寄存器的第4和第5位使用u-boot中的以下语句设置:

/* Map SRAM to EMAC */
   setbits_le32(&sram->ctrl1, 0x5 << 2);

http://git.denx.de/?p=u-boot.git;a=blob;f=drivers/net/sunxi_emac.c;h=11cd0ea06888ba8e271b0c10376306df5291a3e2;hb=HEAD#l503

根据数据表,如果这是&#34; SRAM_CTL1_CFG&#34;的第4:5位成为&#34; 01&#34;  SRAM将映射到EMAC外设。

http://linux-sunxi.org/SRAM_Controller_Register_Guide

这个setbits_le32(&sram->ctrl1, 0x5 << 2)不应该setbits_le32(&sram->ctrl1, 0x4 << 2)吗?

1 个答案:

答案 0 :(得分:2)

所以,答案是肯定的,(0x5&lt;&lt;&lt; 2),二进制20十进制是010100二进制,我们设置&#39; 4:5&#39;到&#39; 01&#39;这是EMAC以及将第2位设置为1.将第2位设置为1当前是我们设置的神奇值,因为它已被设置(可能,我没有追踪所有的历史背影)在所有人提供的来源中,没有进一步解释。将其设置为(0x4&lt;&lt; 2)将仅设置所声明的寄存器,但是在其他需要魔术值的板上也可能存在一些隐藏的断裂。

相关问题