void SpiDeInit(Spi_t *obj) { /* First stop transfers */ DSPI_HAL_StopTransfer(obj->Spi); /* Restore the module to defaults then power it down. This also disables the DSPI module.*/ DSPI_HAL_Init(obj->Spi); /* disable the interrupt*/ INT_SYS_DisableIRQ (g_dspiIrqId[obj->instance]); /* Gate the clock for DSPI.*/ CLOCK_SYS_DisableSpiClock(obj->instance); GpioInit(&obj->Mosi, obj->Mosi.pin, PIN_OUTPUT, PIN_PUSH_PULL, PIN_NO_PULL, 0); GpioInit(&obj->Miso, obj->Miso.pin, PIN_OUTPUT, PIN_PUSH_PULL, PIN_PULL_DOWN, 0); GpioInit(&obj->Sclk, obj->Sclk.pin, PIN_OUTPUT, PIN_PUSH_PULL, PIN_NO_PULL, 0); GpioInit(&obj->Nss, obj->Nss.pin, PIN_OUTPUT, PIN_PUSH_PULL, PIN_NO_PULL, 1); }
/*FUNCTION********************************************************************** * * Function Name : SPI_DRV_DmaSlaveDeinit * Description : De-initializes the device. * Clears the control register and turns off the clock to the module. * *END**************************************************************************/ spi_status_t SPI_DRV_DmaSlaveDeinit(uint32_t instance) { spi_dma_slave_state_t * spiState = (spi_dma_slave_state_t *)g_spiStatePtr[instance]; SPI_Type *base = g_spiBase[instance]; assert(instance < SPI_INSTANCE_COUNT); /* Disable SPI interrupt */ INT_SYS_DisableIRQ(g_spiIrqId[instance]); /* Reset the SPI module to its default settings including disabling SPI and its interrupts */ SPI_HAL_Init(base); #if FSL_FEATURE_SPI_16BIT_TRANSFERS if (g_spiFifoSize[instance] != 0) { SPI_HAL_SetFifoIntCmd(base, kSpiRxFifoNearFullInt, false); } /* disable transmit interrupt */ SPI_HAL_SetIntMode(base, kSpiTxEmptyInt, false); #endif /* FSL_FEATURE_SPI_16BIT_TRANSFERS */ /* Free DMA channels */ DMA_DRV_FreeChannel(&spiState->dmaReceive); DMA_DRV_FreeChannel(&spiState->dmaTransmit); /* Disable clock for SPI */ CLOCK_SYS_DisableSpiClock(instance); /* Destroy the event */ OSA_EventDestroy(&spiState->event); /* Clear state pointer */ g_spiStatePtr[instance] = NULL; return kStatus_SPI_Success; }
/*FUNCTION********************************************************************** * * Function Name : SPI_DRV_MasterDeinit * Description : Shutdown a SPI instance. * This function resets the SPI peripheral, gates its clock, and disables the interrupt to * the core. * *END**************************************************************************/ spi_status_t SPI_DRV_MasterDeinit(uint32_t instance) { /* instantiate local variable of type spi_master_state_t and point to global state */ spi_master_state_t * spiState = (spi_master_state_t *)g_spiStatePtr[instance]; SPI_Type *base = g_spiBase[instance]; /* Restore the module to defaults which includes disabling the SPI then power it down.*/ SPI_HAL_Init(base); /* destroy the interrupt sync object.*/ OSA_SemaDestroy(&spiState->irqSync); /* Disable SPI interrupt.*/ INT_SYS_DisableIRQ(g_spiIrqId[instance]); /* Gate the clock for SPI.*/ CLOCK_SYS_DisableSpiClock(instance); /* Clear state pointer. */ g_spiStatePtr[instance] = NULL; return kStatus_SPI_Success; }