好久没上论坛了,最近遇到个问题解决不了,各位大神帮帮忙
SD_ReadBlock(u32 *SDBuffer,u32 block)
{
SDIO->DCTRL|=1<<3;
DMA2->IFCR|=0xFFFFFFF;
DMA2_Channel4->CCR&=~0x1;
DMA2_Channel4->CCR =(0<<14)|(3<<12)|(2<<10)|(2<<8)|(1<<7)|(0<<6)|(0<<5)|(0<<4);
DMA2_Channel4->CNDTR =128;
DMA2_Channel4->CPAR =0x40018080;
DMA2_Channel4->CMAR =(u32)SDBuffer;
DMA2_Channel4->CCR|=0x1;
while (!(DMA2->ISR&(1<<13)))
{
}
if(SDIO->STA&(1<<1))return 0;
SDIO->ICR=0xFFFFFF;
return 1;
}
SD_ReadOneBlock(u32 Page,u32 *SDBuffer)
{
u8 errorstatus;
SDIO->DTIMER=0xFFFFFF;
SDIO->DLEN=512;
SDIO->DCTRL&=~0xF;
SDIO->DCTRL|=0x3;
SDIO_SendCommand1(17,Page*512,Response_No);
errorstatus = CmdError(1,17,0);
if (errorstatus != 1)return(0);
if(SD_ReadBlock(SDBuffer,1)!= 1)return 0;
return 1;
}
这个是读扇区函数,确定是死循环在
while (!(DMA2->ISR&(1<<13)))
{
}
就是没有传输完成事件产生
SDIO_init();
aa=SD_ReadOneBlock(0,buffer);
while(1)
{
times++;
if(times%1000==0)
{
USART2->DR=aa;
while((USART2->SR&0X40)==0);//等待发送结束
USART_RX_STA=0;
}
delay_ms(1);
}
这个是主函数,像串口循环打印返回值,现象是没输出,死循环在扇区读取函数了,复位和初始化已经通过的
|