Jump to main content

##

# 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

Param | Description
--- | ---
drvIndex | Index for the driver instance to be initialized
init | Pointer 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.