?? main.c
字號:
SendCmdWaitIdle(0x52a,0x80ff8000,0xfff); //ACMD41
}while(*(RP)SDC_RESPONSE0<0X80008000);
SendCmdWaitRespIni(0x49,0X0,0X0,0x0,0x0,0Xfff);//CMD2
SendCmdWaitRespIni(0x6a,0X0,0X0,0x0,0x0,0Xfff);//CMD3
rca=*(RP)SDC_RESPONSE0;
SendCmdWaitRespIni(0xea,rca,0X0,0x0,0x0,0Xfff);//CMD7
return rca;
}
/*************************************************************
* FUNCTION
*
* void SdSingleW1r1(U32 rca)
*
* DESCRIPTION
*
* 單塊一位寫一位讀
*
* AUTHOR
*
* yao
*
* INPUTS
*
* rca SD卡的rca地址號
*
* OUTPUTS
*
* 無
*
*************************************************/
void SdSingleW1r1(U32 rca)
{
U32 i,complete;
erase();//擦除
//***********************配置DMA2進行一位寫*************************
*(RP)DMAC_C2SRCADDR = MEM_BLOCK_BEGIN;
*(RP)DMAC_C2DESTADDR = SDC_WRITE_BUFER_ACCESS;
*(RP)DMAC_C2CONTROL = 0x20149b; //0x1e149b
*(RP)DMAC_C2CONFIGURATION = 0x380b;
//配置SD卡位單線傳輸模式
SendCmdWaitIdle(0x6ea,rca,0xfff);//CMD55
SendCmdWaitIdle(0xca,0x0,0xfff); //ACMD6
//發送單塊寫命令
SendCmdWaitResp(0x30e,0x00000000,0X2,0x0200,0x1,0Xfff); //CMD24 1bit mode
complete = *(RP)SDC_INTERRUPT_STATUS;
while((complete |0xfffffffe) !=0xfffffffe)
{
printf("CRC ERROR");
complete = *(RP)SDC_INTERRUPT_STATUS;
}
for (i=0;i<500;i++);
//***********************配置DMA2進行一位讀*************************
*(RP)DMAC_C2SRCADDR = SDC_READ_BUFER_ACCESS;
*(RP)DMAC_C2DESTADDR = END(0);
*(RP)DMAC_C2CONTROL = 0x20249b;
*(RP)DMAC_C2CONFIGURATION = 0x38d;
//發送單塊讀命令
SendCmdWaitResp(0x22e,0x00000000,0X0,0x0200,0x1,0Xfff); //CMD17 1bit mode
complete = *(RP)SDC_INTERRUPT_STATUS;
while((complete |0xfffffffd) !=0xfffffffd)
{
printf("CRC ERROR");
complete = *(RP)SDC_INTERRUPT_STATUS;
}
CompareMem(MEM_BLOCK_BEGIN,END(0),0x200);
}
/*************************************************************
* FUNCTION
*
* void SdSingleW1r4(U32 rca)
*
* DESCRIPTION
*
* 單塊一位寫四位讀
*
* AUTHOR
*
* yao
*
* INPUTS
*
* rca SD卡的rca地址號
*
* OUTPUTS
*
* 無
*
*************************************************/
void SdSingleW1r4(U32 rca)
{
U32 i,complete;
erase();//擦除
//***********************配置DMA1進行一位寫*************************
*(RP)DMAC_C2SRCADDR = MEM_BLOCK_BEGIN;
*(RP)DMAC_C2DESTADDR = SDC_WRITE_BUFER_ACCESS;
*(RP)DMAC_C2CONTROL = 0x20149b; //0x1e149b
*(RP)DMAC_C2CONFIGURATION = 0x380b;
SendCmdWaitIdle(0x6ea,rca,0xfff);//CMD55
SendCmdWaitIdle(0xca,0x0,0xfff); //ACMD6
SendCmdWaitResp(0x30e,0x00000000,0X2,0x0200,0x1,0Xfff); //CMD24 1bit mode
complete = *(RP)SDC_INTERRUPT_STATUS;
while((complete |0xfffffffe) !=0xfffffffe)
{
printf("CRC ERROR");
complete = *(RP)SDC_INTERRUPT_STATUS;
}
for (i=0;i<5000;i++);
//***********************配置DMA1進行*************************
*(RP)DMAC_C2SRCADDR = SDC_READ_BUFER_ACCESS;
*(RP)DMAC_C2DESTADDR = END(1);
*(RP)DMAC_C2CONTROL = 0x20249b;
*(RP)DMAC_C2CONFIGURATION = 0x38d;
SendCmdWaitIdle(0x6ea,rca,0xfff);//CMD55
SendCmdWaitIdle(0xca,0x2,0xfff); //ACMD6
//***********************配置DMA1進行四位讀*************************
SendCmdWaitResp(0x22e,0x00000000,0X1,0x0200,0x1,0Xfff); //CMD17 4bit mode
complete = *(RP)SDC_INTERRUPT_STATUS;
while((complete |0xfffffffd) !=0xfffffffd)
{
printf("CRC ERROR");
complete = *(RP)SDC_INTERRUPT_STATUS;
}
CompareMem(MEM_BLOCK_BEGIN,END(1),0x200);
}
/*************************************************************
* FUNCTION
*
* void SdSingleW4r1(U32 rca)
*
* DESCRIPTION
*
* 單塊四位寫一位讀
*
* AUTHOR
*
* yao
*
* INPUTS
*
* rca SD卡的rca地址號
*
* OUTPUTS
*
* 無
*
*************************************************/
void SdSingleW4r1(U32 rca)
{
U32 i,complete;
erase();//擦除
//***********************配置DMA1進行一位寫*************************
*(RP)DMAC_C2SRCADDR = MEM_BLOCK_BEGIN;
*(RP)DMAC_C2DESTADDR = SDC_WRITE_BUFER_ACCESS;
*(RP)DMAC_C2CONTROL = 0x20149b; //0x1e149b
*(RP)DMAC_C2CONFIGURATION = 0x380b;
SendCmdWaitIdle(0x6ea,rca,0xfff);//CMD55
SendCmdWaitIdle(0xca,0x2,0xfff); //ACMD6
SendCmdWaitResp(0x30e,0x00000000,0X3,0x0200,0x1,0Xfff); //CMD24 1bit mode
complete = *(RP)SDC_INTERRUPT_STATUS;
while((complete |0xfffffffe) !=0xfffffffe)
{
printf("CRC ERROR");
complete = *(RP)SDC_INTERRUPT_STATUS;
}
for (i=0;i<5000;i++);
*(RP)DMAC_C2SRCADDR = SDC_READ_BUFER_ACCESS;
*(RP)DMAC_C2DESTADDR = END(2);
*(RP)DMAC_C2CONTROL = 0x20249b;//0x2024ad;//
*(RP)DMAC_C2CONFIGURATION = 0x38d;
SendCmdWaitIdle(0x6ea,rca,0xfff);//CMD55
SendCmdWaitIdle(0xca,0x0,0xfff); //ACMD6
//***********************配置DMA1進行一位讀*************************
SendCmdWaitResp(0x22e,0x00000000,0X0,0x0200,0x1,0Xfff); //CMD17 1bit mode
complete = *(RP)SDC_INTERRUPT_STATUS;
while((complete |0xfffffffd) !=0xfffffffd)
{
printf("CRC ERROR");
complete = *(RP)SDC_INTERRUPT_STATUS;
}
CompareMem(MEM_BLOCK_BEGIN,END(2),0x200);
for (i=0;i<10000;i++);
}
/*************************************************************
* FUNCTION
*
* void SdSingleW4r4(U32 rca)
*
* DESCRIPTION
*
* 單塊四位寫四位讀
*
* AUTHOR
*
* yao
*
* INPUTS
*
* rca SD卡的rca地址號
*
* OUTPUTS
*
* 無
*
*************************************************/
void SdSingleW4r4(U32 rca)
{
U32 i,complete;
erase();//擦除
//***********************配置DMA1進行一位寫*************************
*(RP)DMAC_C2SRCADDR = MEM_BLOCK_BEGIN;
*(RP)DMAC_C2DESTADDR = SDC_WRITE_BUFER_ACCESS;
*(RP)DMAC_C2CONTROL = 0x20149b; //0x1e149b
*(RP)DMAC_C2CONFIGURATION = 0x380b;
SendCmdWaitIdle(0x6ea,rca,0xfff);//CMD55
SendCmdWaitIdle(0xca,0x2,0xfff); //ACMD6
SendCmdWaitResp(0x30e,0x00000000,0X3,0x0200,0x1,0Xfff); //CMD24 1bit mode
complete = *(RP)SDC_INTERRUPT_STATUS;
while ((complete & 0x00000040) != 0x00000040)
{
complete = *(RP)SDC_INTERRUPT_STATUS;
}
while((complete |0xfffffffe) != 0xfffffffe)
{
printf("CRC ERROR");
complete = *(RP)SDC_INTERRUPT_STATUS;
}
for (i=0;i<5000;i++);
*(RP)DMAC_C2SRCADDR = SDC_READ_BUFER_ACCESS;
*(RP)DMAC_C2DESTADDR = END(3);
*(RP)DMAC_C2CONTROL = 0x20249b;//0x2024ad;//
*(RP)DMAC_C2CONFIGURATION = 0x38d;
SendCmdWaitIdle(0x6ea,rca,0xfff);//CMD55
SendCmdWaitIdle(0xca,0x2,0xfff); //ACMD6
//***********************配置DMA1進行一位讀*************************
SendCmdWaitResp(0x22e,0x00000000,0X1,0x0200,0x1,0Xfff); //CMD17 1bit mode
complete = *(RP)SDC_INTERRUPT_STATUS;
while((complete |0xfffffffd) != 0xfffffffd)
{
printf("CRC ERROR");
complete = *(RP)SDC_INTERRUPT_STATUS;
}
CompareMem(MEM_BLOCK_BEGIN,END(3),0x200);
}
/*************************************************************
* FUNCTION
*
* void SdMultiW1r1(U32 rca)
*
* DESCRIPTION
*
* 多塊一位寫一位讀
*
* AUTHOR
*
* yao
*
* INPUTS
*
* rca SD卡的rca地址號
*
* OUTPUTS
*
* 無
*
*************************************************/
void SdMultiW1r1(U32 rca)
{
U32 i,complete;
erase();//擦除
//***********************配置DMA1進行一位寫*************************
*(RP)DMAC_C2SRCADDR = MEM_BLOCK_BEGIN;
*(RP)DMAC_C2DESTADDR = SDC_WRITE_BUFER_ACCESS;
*(RP)DMAC_C2CONTROL = 0x80149b;
*(RP)DMAC_C2CONFIGURATION = 0x380b;
SendCmdWaitIdle(0x6ea,rca,0xfff);//CMD55
SendCmdWaitIdle(0xca,0x0,0xfff); //ACMD6 配置傳輸模式為單線模式
SendCmdWaitResp(0x32e,0,0X2,0x0200,0x4,0Xfff); // CMD25 多塊寫命令 1bit mode
SendCmdWaitIdle(0x18a,0x0,0xfff); //stop CMD12 多塊傳輸需要發送stop命令以停止傳輸
complete = *(RP)SDC_INTERRUPT_STATUS;
while((complete |0xfffffffe) != 0xfffffffe)
{
printf("CRC ERROR");
complete = *(RP)SDC_INTERRUPT_STATUS;
}
//***********************配置DMA1進行一位讀*************************
*(RP)DMAC_C2SRCADDR = SDC_READ_BUFER_ACCESS;
*(RP)DMAC_C2DESTADDR = END(4);
*(RP)DMAC_C2CONTROL = 0x80249b;
*(RP)DMAC_C2CONFIGURATION = 0x38d;
SendCmdWaitIdle(0x6ea,rca,0xfff);//CMD55
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -