/** * @brief Initializes the SDIO data path according to the specified * parameters in the SDIO_DataInitStruct. * @param SDIO_DataInitStruct : pointer to a SDIO_DataInitTypeDef structure that * contains the configuration information for the SDIO command. * @retval None */ void SDIO_DataConfig(SDIO_DataInitTypeDef* SDIO_DataInitStruct) { uint32_t tmpreg = 0; /* Check the parameters */ assert_param(IS_SDIO_DATA_LENGTH(SDIO_DataInitStruct->SDIO_DataLength)); assert_param(IS_SDIO_BLOCK_SIZE(SDIO_DataInitStruct->SDIO_DataBlockSize)); assert_param(IS_SDIO_TRANSFER_DIR(SDIO_DataInitStruct->SDIO_TransferDir)); assert_param(IS_SDIO_TRANSFER_MODE(SDIO_DataInitStruct->SDIO_TransferMode)); assert_param(IS_SDIO_DPSM(SDIO_DataInitStruct->SDIO_DPSM)); /*---------------------------- SDIO DTIMER Configuration ---------------------*/ /* Set the SDIO Data TimeOut value */ SDIO->DTIMER = SDIO_DataInitStruct->SDIO_DataTimeOut; /*---------------------------- SDIO DLEN Configuration -----------------------*/ /* Set the SDIO DataLength value */ SDIO->DLEN = SDIO_DataInitStruct->SDIO_DataLength; /*---------------------------- SDIO DCTRL Configuration ----------------------*/ /* Get the SDIO DCTRL value */ tmpreg = SDIO->DCTRL; /* Clear DEN, DTMODE, DTDIR and DBCKSIZE bits */ tmpreg &= DCTRL_CLEAR_MASK; /* Set DEN bit according to SDIO_DPSM value */ /* Set DTMODE bit according to SDIO_TransferMode value */ /* Set DTDIR bit according to SDIO_TransferDir value */ /* Set DBCKSIZE bits according to SDIO_DataBlockSize value */ tmpreg |= (uint32_t)SDIO_DataInitStruct->SDIO_DataBlockSize | SDIO_DataInitStruct->SDIO_TransferDir | SDIO_DataInitStruct->SDIO_TransferMode | SDIO_DataInitStruct->SDIO_DPSM; /* Write to SDIO DCTRL */ SDIO->DCTRL = tmpreg; }
/** * @brief Configure the SDIO data path according to the specified * parameters in the SDIO_DataInitTypeDef. * @param SDIOx: Pointer to SDIO register base * @param Data : pointer to a SDIO_DataInitTypeDef structure * that contains the configuration information for the SDIO data. * @retval HAL status */ HAL_StatusTypeDef SDIO_DataConfig(SDIO_TypeDef *SDIOx, SDIO_DataInitTypeDef* Data) { /* Check the parameters */ assert_param(IS_SDIO_DATA_LENGTH(Data->DataLength)); assert_param(IS_SDIO_BLOCK_SIZE(Data->DataBlockSize)); assert_param(IS_SDIO_TRANSFER_DIR(Data->TransferDir)); assert_param(IS_SDIO_TRANSFER_MODE(Data->TransferMode)); assert_param(IS_SDIO_DPSM(Data->DPSM)); /* Set the SDIO Data TimeOut value */ SDIOx->DTIMER = Data->DataTimeOut; /* Set the SDIO DataLength value */ SDIOx->DLEN = Data->DataLength; /* Set the SDIO data configuration parameters */ /* Write to SDIO DCTRL */ MODIFY_REG(SDIOx->DCTRL, DCTRL_CLEAR_MASK, Data->DataBlockSize |\ Data->TransferDir |\ Data->TransferMode |\ Data->DPSM); return HAL_OK; }
/** * @brief Configure the SDIO data path according to the specified * parameters in the SDIO_DataInitTypeDef. * @param SDIOx: Pointer to SDIO register base * @param SDIO_DataInitStruct : pointer to a SDIO_DataInitTypeDef structure * that contains the configuration information for the SDIO command. * @retval HAL status */ HAL_StatusTypeDef SDIO_DataConfig(SDIO_TypeDef *SDIOx, SDIO_DataInitTypeDef* SDIO_DataInitStruct) { uint32_t tmpreg = 0; /* Check the parameters */ assert_param(IS_SDIO_DATA_LENGTH(SDIO_DataInitStruct->DataLength)); assert_param(IS_SDIO_BLOCK_SIZE(SDIO_DataInitStruct->DataBlockSize)); assert_param(IS_SDIO_TRANSFER_DIR(SDIO_DataInitStruct->TransferDir)); assert_param(IS_SDIO_TRANSFER_MODE(SDIO_DataInitStruct->TransferMode)); assert_param(IS_SDIO_DPSM(SDIO_DataInitStruct->DPSM)); /* Set the SDIO Data Timeout value */ SDIOx->DTIMER = SDIO_DataInitStruct->DataTimeOut; /* Set the SDIO DataLength value */ SDIOx->DLEN = SDIO_DataInitStruct->DataLength; /* Set the SDIO data configuration parameters */ tmpreg |= (uint32_t)(SDIO_DataInitStruct->DataBlockSize |\ SDIO_DataInitStruct->TransferDir |\ SDIO_DataInitStruct->TransferMode |\ SDIO_DataInitStruct->DPSM); /* Write to SDIO DCTRL */ MODIFY_REG(SDIOx->DCTRL, DCTRL_CLEAR_MASK, tmpreg); return HAL_OK; }