int main()
{
int i;
Set_PLL(16,3);
Init_EBIU();
SPI_init();
*pSPI_FLG &= ~FLG2; //将SPISEL2拉到0
while(!(*pSPI_STAT & SPIF)) ;//查看SPI传输状态是否完成
*pSPI_TDBR = 0x55; //将数据送入SPI传输数据寄存器
*pSPI_FLG |= FLG2; //将SPISEL2拉到1,完成数据传输
*pSPI_FLG &= ~FLG2;
while(*pSPI_STAT & RXS)//查看SPI传输状态是否有数据需要接收
i = *pSPI_RDBR; //读取数据
*pSPI_FLG |= FLG2;
while(1);
}*pSPI_TDBR = 0x55; //将数据送入SPI传输数据寄存器
对于上面这个 函数,我通过 单步 运行,运行到这一步的 时候*pSPI_TDBR = 0x55; //将数据送入SPI传输数据寄存器,我发现SPI_STAT寄存器由原来的0001变成了0021,SPI_TDBR变成了0055,SPI_RDBR变成了00FF,当运行到这一步的时候*pSPI_FLG |= FLG2; //将SPISEL2拉到1,完成数据传输
我的疑问
1,为什么我给SPI_TDBR赋值后,寄存器SPI-STAT为什么会变成0021呢?这个 0021说明了此时SPI_RDBR已经 full,所以我查看SPI_RDBR,,意外发现这个 寄存器竟然莫名其妙的变成了00FF,这是为什么 呢,感觉 很 奇怪,而且后面你 读寄存器SPI_RDBR,读到的值就 是 00ff,难道我给SPI-TDBR赋值的时候,衣 会影响SPI-RDBR这个寄存器
2,原来SPI-STAT是0001,表示数据 已经 发送 完毕,没有 可以 发送的数据了,我现在给 寄存器赋值0055,紧接着执行了*pSPI_FLG |= FLG2; //将SPISEL2拉到1,完成数据传输,那么意味着数据传输完毕,寄存器SPI_STAT是0021,我理解,那么,当没执行*pSPI_FLG |= FLG2; //将SPISEL2拉到1,完成数据传输,这一步的时候,意味着数据没有传输完成,为什么寄存器的值不是0000呢,为什么还是0021?