0

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 マクロを呼び出すことです。このマクロ内では、ビットを操作して構造体を埋めるだけです。設定するハードウェア レジスタはどこにアクセスしますか。

4

1 に答える 1

0

さらに詳しく調べると、彼らが使用しているポインター gpMCSPIRregs が揮発性であり、メモリ マッパー ハードウェア レジスタを指していることがわかります。それらが設定/クリアしているビットは、ハードウェアレジスタにあります。

于 2014-05-02T17:04:15.247 に答える