本帖最后由 tony129 于 2017-1-4 19:39 编辑
在跑了ucosIII +SD卡播放歌曲时,如果把卡拔下,或者有时不拔卡正常播放时都会卡死,发现大部分时候都是死在了这个循环
[mw_shl_code=c,true] while(!(SDIO->STA&((1<<4)|(1<<1)|(1<<8)|(1<<3)|(1<<9))))//下溢/CRC/数据结束/超时/起始位错误
{
if(SDIO_GetFlagStatus(SDIO_FLAG_TXFIFOHE) != RESET)
{
if((tlen-bytestransferred)<SD_HALFFIFOBYTES)
{
restwords=((tlen-bytestransferred)%4==0)?((tlen-bytestransferred)/4)
(tlen-bytestransferred)/4+1);
for(count=0;count<restwords;count++,tempbuff++,bytestransferred+=4)
{
SDIO->FIFO=*tempbuff;
}
}else
{
for(count=0;count<SD_HALFFIFO;count++)
{
SDIO->FIFO=*(tempbuff+count);
}
tempbuff+=SD_HALFFIFO;
bytestransferred+=SD_HALFFIFOBYTES;
}
timeout=0X3FFFFFFF; //写数据溢出时间
}else
{
if(timeout==0)return SD_DATA_TIMEOUT;
timeout--;
}
}
[/mw_shl_code]
一直进入timeout--,此时 SDIO_STA寄存器 还处于数据传输中状态,无超时,下溢,CRC校验等错误,所以一直在while里面循环,任务也不切换了,这一段该如何处理呢?
一周热门 更多>