高级会员
- 积分
- 879
- 威望
- 496
- 贡献
- 245
- 兑换币
- 161
- 注册时间
- 2012-2-25
- 在线时间
- 69 小时
|
- /*******************************************************************************
- 函数名称:SPI_RdWr_Byte
- 函数功能:打开指定的SPI端口并打开指定的片选信号CS,向SD卡写入一字节数据并读取SD卡回响
- 入口参数:spin:指定的SPI端口,如SPI0,SPI1,SPI2
- data:待向SD卡中写入的数据
- 出口参数:temp
- *******************************************************************************/
- u8 SPI_RdWr_Byte(SPIn spin,u8 data)
- {
- u8 temp;
- SPI_TX_WAIT(spin);
- do
- {
- /************* 清标志位 ***************/
- SPI_SR_REG(SPIN[spin]) = (SPI_SR_EOQF_MASK
- | SPI_SR_TFUF_MASK
- | SPI_SR_TFFF_MASK
- | SPI_SR_RFOF_MASK
- | SPI_SR_RFDF_MASK
- );
-
- /************** 清FIFO计数器 **************/
- SPI_MCR_REG(SPIN[spin]) |= (SPI_MCR_CLR_TXF_MASK //Clear TX FIFO.写1清 Tx FIFO counter
- |SPI_MCR_CLR_RXF_MASK //Clear RX FIFO. 写1清 the Rx FIFO counter.
- );
- //SPI_SR_REG(SPIN[spin]) |= SPI_SR_RFDF_MASK;
- }while( (SPI_SR_REG(SPIN[spin]) & SPI_SR_RFDF_MASK)); //如果 Rx FIFO 非空,则清FIFO.
- /***************** 发送一个数据 *******************/
- SPI_PUSHR_REG(SPIN[spin]) = 0
- | SPI_PUSHR_CTAS(0)
- | SPI_PUSHR_EOQ_MASK //End Of Queue,1为 传输SPI最后的数据
- | SPI_PUSHR_TXDATA(data);
-
- SPI_EOQF_WAIT(spin); //要及时把RX FIFO的东西清掉,不然这里就无限等待
-
- while( !(SPI_SR_REG(SPIN[spin]) & SPI_SR_RFDF_MASK)); //RFDF为1,Rx FIFO is not empty.
- temp = (u8)SPI_POPR_REG(SPIN[spin]); //读取一次接收的数据
- //SPI_SR_REG(SPIN[spin]) |= SPI_SR_RFDF_MASK;
- return(temp);
-
- }
复制代码 这是我像SD卡发送一个数据并读取SD返回的值,但发现每次读取的值是不对的,请问哪位大神能指点一下!
|
|