Wrapped the SDIO MMC IO busy wait statement in a function such that it can be called by any API needing it
This commit is contained in:
parent
2b79a31165
commit
e8583254e6
@ -99,7 +99,7 @@ void mmc_sdio_driver_write_dma_async(uint32_t *data, uint32_t dataLengthInBytes)
|
|||||||
void mmc_sdio_driver_write_one(uint8_t data)
|
void mmc_sdio_driver_write_one(uint8_t data)
|
||||||
{
|
{
|
||||||
/* Wait for MMC device to be ready to send the data */
|
/* Wait for MMC device to be ready to send the data */
|
||||||
while (SDIO_HOST->MMC_IO & 0x01);
|
mmc_sdio_driver_blocking_wait_bus_free();
|
||||||
|
|
||||||
SDIO_HOST->BUF_CTL = 0x4820;
|
SDIO_HOST->BUF_CTL = 0x4820;
|
||||||
SDIO_HOST->DATA_BUF[0] = (uint32_t)data;
|
SDIO_HOST->DATA_BUF[0] = (uint32_t)data;
|
||||||
@ -107,19 +107,25 @@ void mmc_sdio_driver_write_one(uint8_t data)
|
|||||||
/* Start the transfer */
|
/* Start the transfer */
|
||||||
SDIO_HOST->MMC_IO = 0x01;
|
SDIO_HOST->MMC_IO = 0x01;
|
||||||
/* Wait for MMC device to be done sending the data */
|
/* Wait for MMC device to be done sending the data */
|
||||||
while (SDIO_HOST->MMC_IO & 0x01);
|
mmc_sdio_driver_blocking_wait_bus_free();
|
||||||
}
|
}
|
||||||
|
|
||||||
void mmc_sdio_driver_write(const uint8_t *data, uint16_t dataLengthInBytes)
|
void mmc_sdio_driver_write(const uint8_t *data, uint16_t dataLengthInBytes)
|
||||||
{
|
{
|
||||||
/* Wait for MMC device to be ready to send the data */
|
/* Wait for MMC device to be ready to send the data */
|
||||||
while (SDIO_HOST->MMC_IO & 0x01);
|
mmc_sdio_driver_blocking_wait_bus_free();
|
||||||
|
|
||||||
SDIO_HOST->BUF_CTL = 0x4820;
|
SDIO_HOST->BUF_CTL = 0x4820;
|
||||||
memcpy((void *)SDIO_HOST->DATA_BUF, (void *)data, dataLengthInBytes);
|
memcpy((void *)SDIO_HOST->DATA_BUF, (void *)data, dataLengthInBytes);
|
||||||
SDIO_HOST->MMC_BYTECNTL = dataLengthInBytes;
|
SDIO_HOST->MMC_BYTECNTL = dataLengthInBytes;
|
||||||
/* Start the transfer */
|
/* Start the transfer */
|
||||||
SDIO_HOST->MMC_IO = 0x01;
|
SDIO_HOST->MMC_IO = 0x01;
|
||||||
|
|
||||||
/* Wait for MMC device to be done sending the data */
|
/* Wait for MMC device to be done sending the data */
|
||||||
|
mmc_sdio_driver_blocking_wait_bus_free();
|
||||||
|
}
|
||||||
|
|
||||||
|
void mmc_sdio_driver_blocking_wait_bus_free(void)
|
||||||
|
{
|
||||||
while (SDIO_HOST->MMC_IO & 0x01);
|
while (SDIO_HOST->MMC_IO & 0x01);
|
||||||
}
|
}
|
||||||
|
@ -23,7 +23,7 @@ void mmc_sdio_driver_periph_init(DMATransferDoneCb_t DMATransferDoneCb, void *ar
|
|||||||
* @param dataLengthInBytes the size in bytes of the data to transfer.
|
* @param dataLengthInBytes the size in bytes of the data to transfer.
|
||||||
* Maximum length is 65535 bytes.
|
* Maximum length is 65535 bytes.
|
||||||
*/
|
*/
|
||||||
void mmc_sdio_driver_write_dma_async(uint32_t *data, u32 dataLengthInBytes);
|
void mmc_sdio_driver_write_dma_async(uint32_t *data, uint32_t dataLengthInBytes);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Sends one byte of data to the slave
|
* @brief Sends one byte of data to the slave
|
||||||
@ -43,4 +43,10 @@ void mmc_sdio_driver_write_one(uint8_t data);
|
|||||||
*/
|
*/
|
||||||
void mmc_sdio_driver_write(const uint8_t *data, uint16_t dataLengthInBytes);
|
void mmc_sdio_driver_write(const uint8_t *data, uint16_t dataLengthInBytes);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Performs a busy wait until the data bus is free for us to use.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
void mmc_sdio_driver_blocking_wait_bus_free(void);
|
||||||
|
|
||||||
#endif //MMC_SDIO_H
|
#endif //MMC_SDIO_H
|
Loading…
Reference in New Issue
Block a user