菜地早发现此问题: <a href="https://bbs.21ic.com/club/bbs/ShowAnnounce.asp?id=2140869" target=_blank>https://bbs.21ic.com/club/bbs/ShowAnnounce.asp?id=2140869</a><br />unsigned char AdsObj::AdsReadWriteByte(unsigned char cData) <br />{<br /> SSP->SSP_DR = cData;<br />// while( !(SSP->SSP_SR & (1 << TFE)) );// 等待TFE置位,即发送FIFO空 <br />//应该改为:<br /> while( SSP->SSP_SR & (1 << BSY) );// 等待BSY清零,即控制器空闲 <br /> return SSP->SSP_DR;<br />}<br /><br /><br />不过IAR的例程为:(通过验证没问题)<br /><br />/*************************************************************************<br /> * Function Name: MmcTranserByte<br /> * Parameters: Int8U ch<br /> * Return: Int8U<br /> *<br /> * Description: Read byte from SPI<br /> *<br /> *************************************************************************/<br />Int8U MmcTranserByte (Int8U ch)<br />{<br /> while(!SSPSR_bit.TNF);<br /> SSPDR = ch;<br /> while(!SSPSR_bit.RNE);<br /> return((Int8U)SSPDR);<br />}<br /><br />/*************************************************************************<br /> * Function Name: MmcSendBlock<br /> * Parameters: pInt8U pData, Int32U Size<br /> *<br /> * Return: void<br /> *<br /> * Description: Read byte from SPI<br /> *<br /> *************************************************************************/<br />void MmcSendBlock (pInt8U pData, Int32U Size)<br />{<br />Int32U OutCount = Size;<br /> while (OutCount)<br /> {<br /> while(SSPSR_bit.TNF && OutCount)<br /> {<br /> SSPDR = *pData++;<br /> --OutCount;<br /> }<br /> }<br /> while (SSPSR_bit.RNE || !SSPSR_bit.TFE)<br /> {<br /> volatile Int32U Dummy = SSPDR;<br /> }<br />}<br /><br />/*************************************************************************<br /> * Function Name: MmcReceiveBlock<br /> * Parameters: pInt8U pData, Int32U Size<br /> *<br /> * Return: void<br /> *<br /> * Description: Read byte from SPI<br /> *<br /> *************************************************************************/<br />void MmcReceiveBlock (pInt8U pData, Int32U Size)<br />{<br />Int32U Delta = 0;<br /> while (Size || Delta)<br /> {<br /> while(SSPSR_bit.TNF && (Delta < SSP_FIFO_SIZE) && Size)<br /> {<br /> SSPDR = 0xFF;<br /> --Size; ++Delta;<br /> }<br /> while (SSPSR_bit.RNE)<br /> {<br /> *pData++ = SSPDR;<br /> --Delta;<br /> }<br /> }<br />}<br /> <br /> 相关链接:<a href='http://blog.**/hotpower/68890/message.aspx'>http://blog.**/hotpower/68890/message.aspx</a>
|