MCPcopy Create free account
hub / github.com/RT-Thread/rt-thread / FSdCtrl_WaitCmdEnd

Function FSdCtrl_WaitCmdEnd

bsp/ft2004/libraries/bsp/ft_sd/ft_sdctrl.c:388–463  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

386}
387
388ft_error_t FSdCtrl_WaitCmdEnd(FT_OUT FtsdCtrl_t *pFtsdCtrl,
389 FT_IN pFtsdCtrl_delayTimer_t pDelayTimer_fun,
390 FT_IN u32 rspType,
391 FT_OUT u32 *cmdRsp)
392{
393 u32 status;
394 u32 statusMask;
395 s32 timeout = 1000;
396 const FSdCtrl_Config_t *pConfig;
397 ft_error_t result = FST_SUCCESS;
398
399 Ft_assertNonvoid(FT_NULL != pFtsdCtrl);
400 pConfig = &pFtsdCtrl->config;
401
402 if (pConfig->workMode & FTSDCTRL_CMD_IRQ_MASK)
403 {
404 if (pFtsdCtrl->cmdWaitCallback)
405 {
406 result = pFtsdCtrl->cmdWaitCallback(pFtsdCtrl);
407 }
408 else
409 {
410 return FTSDC_INVALID_PARAM;
411 }
412 status = Ft_in32(pConfig->baseAddress + NORMAL_INT_STATUS_REG);
413 }
414 else
415 {
416 /* wait for cmd-error or cmd-finish respones */
417 statusMask = NORMAL_INT_STATUS_EI | NORMAL_INT_STATUS_CC;
418
419 do
420 {
421 status = (Ft_in32(pConfig->baseAddress + NORMAL_INT_STATUS_REG) & statusMask);
422 pDelayTimer_fun(1);
423 timeout--;
424
425 } while ((!status) && timeout);
426 }
427
428 if (status & NORMAL_INT_STATUS_EI)
429 {
430 /* error handle */
431 status = Ft_in32(pConfig->baseAddress + ERROR_INT_STATUS_REG);
432
433 if (!timeout)
434 {
435 return FTSDC_TIMEOUT;
436 }
437 else if ((status & NORMAL_INT_EN_ECCRCE))
438 {
439 return FTSDC_EILSEQ;
440 }
441 }
442
443 if (rspType != FTSDCTRL_CMD_RES_NONE)
444 {
445 /* get cmd respones */

Callers 2

rthw_sdctrl_docmdFunction · 0.85

Calls 1

Ft_in32Function · 0.85

Tested by

no test coverage detected