/* * Copyright (c) 2017-2019, Texas Instruments Incorporated * * SPDX-License-Identifier: Apache-2.0 * */ /* =========================== SPI Driver Fxns ========================= */ #include #include #include #include #include #include #include #include typedef enum CC3220SF_LAUNCHXL_SPIName { CC3220SF_LAUNCHXL_SPI0 = 0, CC3220SF_LAUNCHXL_SPI1 = 1, CC3220SF_LAUNCHXL_SPICOUNT } CC3220SF_LAUNCHXL_SPIName; #include #include SPICC32XXDMA_Object spiCC3220SDMAObjects[CC3220SF_LAUNCHXL_SPICOUNT]; uint32_t spiCC3220SDMAscratchBuf[CC3220SF_LAUNCHXL_SPICOUNT]; const SPICC32XXDMA_HWAttrsV1 spiCC3220SDMAHWAttrs[CC3220SF_LAUNCHXL_SPICOUNT] = { /* index 0 is reserved for LSPI that links to the NWP */ { .baseAddr = LSPI_BASE, .intNum = INT_LSPI, .intPriority = (~0), .spiPRCM = PRCM_LSPI, .csControl = SPI_SW_CTRL_CS, .csPolarity = SPI_CS_ACTIVEHIGH, .pinMode = SPI_4PIN_MODE, .turboMode = SPI_TURBO_OFF, .scratchBufPtr = &spiCC3220SDMAscratchBuf[CC3220SF_LAUNCHXL_SPI0], .defaultTxBufValue = 0, .rxChannelIndex = UDMA_CH12_LSPI_RX, .txChannelIndex = UDMA_CH13_LSPI_TX, .minDmaTransferSize = 100, .mosiPin = SPICC32XXDMA_PIN_NO_CONFIG, .misoPin = SPICC32XXDMA_PIN_NO_CONFIG, .clkPin = SPICC32XXDMA_PIN_NO_CONFIG, .csPin = SPICC32XXDMA_PIN_NO_CONFIG }, { .baseAddr = GSPI_BASE, .intNum = INT_GSPI, .intPriority = (~0), .spiPRCM = PRCM_GSPI, .csControl = SPI_HW_CTRL_CS, .csPolarity = SPI_CS_ACTIVELOW, .pinMode = SPI_4PIN_MODE, .turboMode = SPI_TURBO_OFF, .scratchBufPtr = &spiCC3220SDMAscratchBuf[CC3220SF_LAUNCHXL_SPI1], .defaultTxBufValue = 0, .rxChannelIndex = UDMA_CH6_GSPI_RX, .txChannelIndex = UDMA_CH7_GSPI_TX, .minDmaTransferSize = 10, .mosiPin = SPICC32XXDMA_PIN_07_MOSI, .misoPin = SPICC32XXDMA_PIN_06_MISO, .clkPin = SPICC32XXDMA_PIN_05_CLK, .csPin = SPICC32XXDMA_PIN_08_CS } }; const SPI_Config SPI_config[CC3220SF_LAUNCHXL_SPICOUNT] = { { .fxnTablePtr = &SPICC32XXDMA_fxnTable, .object = &spiCC3220SDMAObjects[CC3220SF_LAUNCHXL_SPI0], .hwAttrs = &spiCC3220SDMAHWAttrs[CC3220SF_LAUNCHXL_SPI0] }, { .fxnTablePtr = &SPICC32XXDMA_fxnTable, .object = &spiCC3220SDMAObjects[CC3220SF_LAUNCHXL_SPI1], .hwAttrs = &spiCC3220SDMAHWAttrs[CC3220SF_LAUNCHXL_SPI1] } }; const uint_least8_t SPI_count = CC3220SF_LAUNCHXL_SPICOUNT; /* * =============================== DMA =============================== */ #include static tDMAControlTable dmaControlTable[64] __attribute__ ((aligned (1024))); /* * ======== dmaErrorFxn ======== * This is the handler for the uDMA error interrupt. */ static void dmaErrorFxn(uintptr_t arg) { int status = MAP_uDMAErrorStatusGet(); MAP_uDMAErrorStatusClear(); /* Suppress unused variable warning */ (void)status; while (1); } UDMACC32XX_Object udmaCC3220SObject; const UDMACC32XX_HWAttrs udmaCC3220SHWAttrs = { .controlBaseAddr = (void *)dmaControlTable, .dmaErrorFxn = (UDMACC32XX_ErrorFxn)dmaErrorFxn, .intNum = INT_UDMAERR, .intPriority = (~0) }; const UDMACC32XX_Config UDMACC32XX_config = { .object = &udmaCC3220SObject, .hwAttrs = &udmaCC3220SHWAttrs }; /* * ======== CC3220SF_LAUNCHXL_init ======== * Zephyr-port-specific general initialization */ void CC3220SF_LAUNCHXL_init() { MAP_PRCMLPDSWakeupSourceEnable(PRCM_LPDS_HOST_IRQ); SPI_init(); } /* * ======== Board_debugHeader ======== * This structure prevents the CC32XXSF bootloader from overwriting the * internal FLASH; this allows us to flash a program that will not be * overwritten by the bootloader with the encrypted program saved in * "secure/serial flash". * * This structure must be placed at the beginning of internal FLASH (so * the bootloader is able to recognize that it should not overwrite * internal FLASH). */ #if defined (__SF_DEBUG__) || defined(__SF_NODEBUG__) #if defined(__TI_COMPILER_VERSION__) #pragma DATA_SECTION(Board_debugHeader, ".dbghdr") #pragma RETAIN(Board_debugHeader) #elif defined(__IAR_SYSTEMS_ICC__) #pragma location=".dbghdr" #elif defined(__GNUC__) __attribute__ ((section (".dbghdr"))) #endif #if defined(__SF_DEBUG__) const uint32_t Board_debugHeader[] = { 0x5AA5A55A, 0x000FF800, 0xEFA3247D }; #elif defined (__SF_NODEBUG__) const uint32_t Board_debugHeader[] = { 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF }; #endif #endif