Hello everyone,
I try to change the sdhost example to support dma transfer, but "SDHOST_INT_DMARD" never occurs. I think I missed something in documentation or with my configuration? Maybe someone could point me in the right direction?
Here's what I've done:
static void _ISRHandler() {
unsigned long tmp = SDHostIntStatus(SDHOST_BASE);
MAP_SDHostIntClear(SDHOST_BASE, ALL_IRQS);
if (tmp & SDHOST_INT_DMARD) {
(void)osi_SyncObjSignalFromISR(ReadWriteSyncObj);
}
}
static DRESULT _ReadWithDma(UINT32 cmd, BYTE* buff, DWORD sector, UINT32 ulSize) {
DRESULT Res = RES_ERROR;
if (NULL == ReadWriteSyncObj) {
if (OSI_OK != osi_SyncObjCreate(&ReadWriteSyncObj)) {
return (RES_NOTRDY);
}
MAP_SDHostIntRegister(SDHOST_BASE, _ISRHandler);
}
SetupTransfer(UDMA_CH23_SDHOST_RX,
UDMA_MODE_BASIC,
ulSize,
UDMA_SIZE_32,
UDMA_ARB_8,
(void *)(SDHOST_BASE + MMCHS_O_DATA),
UDMA_SRC_INC_NONE,
(void *)buff,
UDMA_DST_INC_32);
if( CardSendCmd((cmd | SDHOST_DMA_EN), sector) == 0 )
{
MAP_SDHostIntClear(SDHOST_BASE, ALL_IRQS);
MAP_SDHostIntEnable(SDHOST_BASE, SDHOST_INT_DMARD);
(void)osi_SyncObjWait(ReadWriteSyncObj, OSI_WAIT_FOREVER);
if (CMD_READ_MULTI_BLK == cmd) {
CardSendCmd(CMD_STOP_TRANS,0);
}
Res = RES_OK;
}
return (Res);
}
Thanks in advance,
Markus