omap3中的u-boot spi初始化

时间:2014-05-01 15:54:50

标签: spi u-boot omap

我在u boot中查看了spi驱动程序,这是

中的一个小片段

omap_spi.c

void spi_init(void)
{
gpMCSPIRegs = (MCSPI_REGS *)MCSPI_SPI1_IO_BASE;

unsigned long u, n;

/* initialize the multipad and interface clock */
spi_init_spi1();

/* soft reset */
CSP_BITFINS(gpMCSPIRegs->SYSCONFIG, SPI_SYSCONFIG_SOFTRESET, 1);
for (n = 0; n < 100; n++) {
    u = CSP_BITFEXT(gpMCSPIRegs->SYSSTATUS,
            SPI_SYSSTATUS_RESETDONE);
    if (u)
        break;
}

  ...more code
}

在这里 omap_spi.h

  #define CSP_BITFINS(var, bit, val) \
      (CSP_BITFCLR(var, bit)); (var |= CSP_BITFVAL(bit, val))

我的困惑在于,当他们进行软复位时,他们会调用此CSP_BITFINS宏。在这个宏内部他们所做的只是操纵位和填充结构。他们在哪里访问硬件寄存器进行配置?

1 个答案:

答案 0 :(得分:0)

如果你进一步观察,你会发现他们使用的指针gpMCSPIRregs是易失性的,并指向内存映射器硬件寄存器。它们设置/清除的位在硬件寄存器中。