1.1.7.4.1 DRV_SDSPI_Initialize Function

C

SYS_MODULE_OBJ DRV_SDSPI_Initialize
(
    const SYS_MODULE_INDEX drvIndex,
    const SYS_MODULE_INIT * const init
)

Summary

Initializes the SD Card driver.

Description

This routine initializes the SD Card driver, making it ready for clients to open and use the driver.

Precondition

None.

Parameters

ParamDescription
drvIndexIndex for the driver instance to be initialized
initPointer to a data structure containing any data necessary to initialize the driver.

Returns

If successful, returns a valid handle to a driver object. Otherwise, it returns SYS_MODULE_OBJ_INVALID.

Example

DRV_SDSPI_INIT drvSDSPI0InitData;
SYS_MODULE_OBJ objectHandle;

DRV_SDSPI_PLIB_INTERFACE drvSDSPI0PlibAPI = {
    // SPI PLIB WriteRead function
    .writeRead = (DRV_SDSPI_WRITEREAD)SPI0_WriteRead,
    // SPI PLIB Write function
    .write = (DRV_SDSPI_WRITE)SPI0_Write,
    // SPI PLIB Read function
    .read = (DRV_SDSPI_READ)SPI0_Read,
    // SPI PLIB Transfer Status function
    .isBusy = (DRV_SDSPI_IS_BUSY)SPI0_IsBusy,
    // SPI PLIB Transfer Setup function
    .transferSetup = (DRV_SDSPI_SETUP)SPI0_TransferSetup,
    // SPI PLIB Callback Register
    .callbackRegister = (DRV_SDSPI_CALLBACK_REGISTER)SPI0_CallbackRegister,
};

DRV_SDSPI_INIT drvSDSPI0InitData = {
    // SD Card SPI PLIB API interface
    .spiPlib = &drvSDSPI0PlibAPI,
    .remapDataBits = drvSDSPI0remapDataBits,
    .remapClockPolarity = drvSDSPI0remapClockPolarity,
    .remapClockPhase = drvSDSPI0remapClockPhase,
    // SDSPI Number of clients
    .numClients = DRV_SDSPI_CLIENTS_NUMBER_IDX0,
    // SDSPI Client Objects Pool
    .clientObjPool = (uintptr_t)&drvSDSPI0ClientObjPool[0],
    .chipSelectPin = DRV_SDSPI_CHIP_SELECT_PIN_IDX0,
    .SDSPISpeedHz = DRV_SDSPI_SPEED_HZ_IDX0,
    .writeProtectPin = SYS_PORT_PIN_NONE,
    .isFsEnabled = DRV_SDSPI_REGISTER_WITH_FS_IDX0,
    // DMA Channel for Transmit
    .txDMAChannel = DRV_SDSPI_XMIT_DMA_CH_IDX0,
    // DMA Channel for Receive
    .rxDMAChannel = DRV_SDSPI_RCV_DMA_CH_IDX0,
    // SPI Transmit Register
    .txAddress = (void *)&(SPI0_REGS->SPI_TDR),
    // SPI Receive Register
    .rxAddress = (void *)&(SPI0_REGS->SPI_RDR),
};

objectHandle = DRV_SDSPI_Initialize(DRV_SDSPI_INDEX_0, (SYS_MODULE_INIT *)&drvSDSPI0InitData);
if (objectHandle == SYS_MODULE_OBJ_INVALID)
{
    // Handle error
}

Remarks

This routine must be called before any other SD Card routine is called.

This routine should only be called once during system initialization.

The system must use DRV_SDSPI_Status to find out when the driver is in the ready state.