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