问题5:读取SCR寄存器的时候为什么要这样写
[C] 纯文本查看 复制代码 while (!(SDIO->STA & (SDIO_FLAG_RXOVERR | SDIO_FLAG_DCRCFAIL | SDIO_FLAG_DTIMEOUT | SDIO_FLAG_DBCKEND | SDIO_FLAG_STBITERR)))
{
if (SDIO_GetFlagStatus(SDIO_FLAG_RXDAVL) != RESET)
{
*(tempscr + index) = SDIO_ReadData();
index++;
}
}
*(pscr + 1) = ((tempscr[0] & SD_0TO7BITS) << 24) | ((tempscr[0] & SD_8TO15BITS) << 8) | ((tempscr[0] & SD_16TO23BITS) >> 8) | ((tempscr[0] & SD_24TO31BITS) >> 24);
*(pscr) = ((tempscr[1] & SD_0TO7BITS) << 24) | ((tempscr[1] & SD_8TO15BITS) << 8) | ((tempscr[1] & SD_16TO23BITS) >> 8) | ((tempscr[1] & SD_24TO31BITS) >> 24);
从fifo读的数据tempscr[0]赋值给了pscr[1],反过来的。FIFO先进先出,如果SD卡按顺序发过来F1,F2,那在读的时候tempscr[0] = F1 tempscr[1] = F2,顺序是正确的,为什么要反过来呢?另外后面各种移位运算,相当于进行了一次高位字节和低位字节的调换,和大小端有关?但是FIFO是32位宽的啊。 |