2 * Copyright (c) 2016, Texas Instruments Incorporated
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
9 * * Redistributions of source code must retain the above copyright
10 * notice, this list of conditions and the following disclaimer.
12 * * Redistributions in binary form must reproduce the above copyright
13 * notice, this list of conditions and the following disclaimer in the
14 * documentation and/or other materials provided with the distribution.
16 * * Neither the name of Texas Instruments Incorporated nor the names of
17 * its contributors may be used to endorse or promote products derived
18 * from this software without specific prior written permission.
20 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
21 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
22 * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
23 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
24 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
25 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
26 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
27 * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
28 * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
29 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
30 * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
34 * ======== CC3220SF_LAUNCHXL.c ========
35 * This file is responsible for setting up the board specific items for the
36 * CC3220SF_LAUNCHXL board.
42 #include <ti/devices/cc32xx/inc/hw_ints.h>
43 #include <ti/devices/cc32xx/inc/hw_memmap.h>
44 #include <ti/devices/cc32xx/inc/hw_types.h>
46 #include <ti/devices/cc32xx/driverlib/rom.h>
47 #include <ti/devices/cc32xx/driverlib/rom_map.h>
48 #include <ti/devices/cc32xx/driverlib/adc.h>
49 #include <ti/devices/cc32xx/driverlib/gpio.h>
50 #include <ti/devices/cc32xx/driverlib/pin.h>
51 #include <ti/devices/cc32xx/driverlib/prcm.h>
52 #include <ti/devices/cc32xx/driverlib/spi.h>
53 #include <ti/devices/cc32xx/driverlib/sdhost.h>
54 #include <ti/devices/cc32xx/driverlib/timer.h>
55 #include <ti/devices/cc32xx/driverlib/uart.h>
56 #include <ti/devices/cc32xx/driverlib/udma.h>
57 #include <ti/devices/cc32xx/driverlib/wdt.h>
59 #include <ti/drivers/Power.h>
60 #include <ti/drivers/power/PowerCC32XX.h>
62 #include "CC3220SF_LAUNCHXL.h"
65 * This define determines whether to use the UARTCC32XXDMA driver
66 * or the UARTCC32XX (no DMA) driver. Set to 1 to use the UARTCC32XXDMA
69 #ifndef TI_DRIVERS_UART_DMA
70 #define TI_DRIVERS_UART_DMA 0
74 * =============================== ADC ===============================
76 #include <ti/drivers/ADC.h>
77 #include <ti/drivers/adc/ADCCC32XX.h>
79 ADCCC32XX_Object adcCC3220SObjects[CC3220SF_LAUNCHXL_ADCCOUNT];
81 const ADCCC32XX_HWAttrsV1 adcCC3220SHWAttrs[CC3220SF_LAUNCHXL_ADCCOUNT] = {
83 .adcPin = ADCCC32XX_PIN_59_CH_2
86 .adcPin = ADCCC32XX_PIN_60_CH_3
90 const ADC_Config ADC_config[CC3220SF_LAUNCHXL_ADCCOUNT] = {
92 .fxnTablePtr = &ADCCC32XX_fxnTable,
93 .object = &adcCC3220SObjects[CC3220SF_LAUNCHXL_ADC0],
94 .hwAttrs = &adcCC3220SHWAttrs[CC3220SF_LAUNCHXL_ADC0]
97 .fxnTablePtr = &ADCCC32XX_fxnTable,
98 .object = &adcCC3220SObjects[CC3220SF_LAUNCHXL_ADC1],
99 .hwAttrs = &adcCC3220SHWAttrs[CC3220SF_LAUNCHXL_ADC1]
103 const uint_least8_t ADC_count = CC3220SF_LAUNCHXL_ADCCOUNT;
106 * =============================== Crypto ===============================
108 #include <ti/drivers/crypto/CryptoCC32XX.h>
110 CryptoCC32XX_Object cryptoCC3220SObjects[CC3220SF_LAUNCHXL_CRYPTOCOUNT];
112 const CryptoCC32XX_Config CryptoCC32XX_config[CC3220SF_LAUNCHXL_CRYPTOCOUNT] = {
114 .object = &cryptoCC3220SObjects[CC3220SF_LAUNCHXL_CRYPTO0]
118 const uint_least8_t CryptoCC32XX_count = CC3220SF_LAUNCHXL_CRYPTOCOUNT;
121 * =============================== DMA ===============================
123 #include <ti/drivers/dma/UDMACC32XX.h>
125 #if defined(__TI_COMPILER_VERSION__)
126 #pragma DATA_ALIGN(dmaControlTable, 1024)
127 #elif defined(__IAR_SYSTEMS_ICC__)
128 #pragma data_alignment=1024
129 #elif defined(__GNUC__)
130 __attribute__ ((aligned (1024)))
132 static tDMAControlTable dmaControlTable[64];
135 * ======== dmaErrorFxn ========
136 * This is the handler for the uDMA error interrupt.
138 static void dmaErrorFxn(uintptr_t arg)
140 int status = MAP_uDMAErrorStatusGet();
141 MAP_uDMAErrorStatusClear();
143 /* Suppress unused variable warning */
149 UDMACC32XX_Object udmaCC3220SObject;
151 const UDMACC32XX_HWAttrs udmaCC3220SHWAttrs = {
152 .controlBaseAddr = (void *)dmaControlTable,
153 .dmaErrorFxn = (UDMACC32XX_ErrorFxn)dmaErrorFxn,
154 .intNum = INT_UDMAERR,
158 const UDMACC32XX_Config UDMACC32XX_config = {
159 .object = &udmaCC3220SObject,
160 .hwAttrs = &udmaCC3220SHWAttrs
164 * =============================== General ===============================
167 * ======== CC3220SF_LAUNCHXL_initGeneral ========
169 void CC3220SF_LAUNCHXL_initGeneral(void)
176 * =============================== GPIO ===============================
178 #include <ti/drivers/GPIO.h>
179 #include <ti/drivers/gpio/GPIOCC32XX.h>
182 * Array of Pin configurations
183 * NOTE: The order of the pin configurations must coincide with what was
184 * defined in CC3220SF_LAUNCHXL.h
185 * NOTE: Pins not used for interrupts should be placed at the end of the
186 * array. Callback entries can be omitted from callbacks array to
187 * reduce memory usage.
189 GPIO_PinConfig gpioPinConfigs[] = {
190 /* input pins with callbacks */
191 /* CC3220SF_LAUNCHXL_GPIO_SW2 */
192 GPIOCC32XX_GPIO_22 | GPIO_CFG_INPUT | GPIO_CFG_IN_INT_RISING,
193 /* CC3220SF_LAUNCHXL_GPIO_SW3 */
194 GPIOCC32XX_GPIO_13 | GPIO_CFG_INPUT | GPIO_CFG_IN_INT_RISING,
197 /* CC3220SF_LAUNCHXL_GPIO_LED_D7 */
198 GPIOCC32XX_GPIO_09 | GPIO_CFG_OUT_STD | GPIO_CFG_OUT_STR_HIGH | GPIO_CFG_OUT_LOW,
201 * CC3220SF_LAUNCHXL_GPIO_LED_D5 and CC3220SF_LAUNCHXL_GPIO_LED_D6 are shared with the
202 * I2C and PWM peripherals. In order for those examples to work, these
203 * LEDs are taken out of gpioPinCOnfig[]
205 /* CC3220SF_LAUNCHXL_GPIO_LED_D6 */
206 //GPIOCC32XX_GPIO_10 | GPIO_CFG_OUT_STD | GPIO_CFG_OUT_STR_HIGH | GPIO_CFG_OUT_LOW,
207 /* CC3220SF_LAUNCHXL_GPIO_LED_D5 */
208 //GPIOCC32XX_GPIO_11 | GPIO_CFG_OUT_STD | GPIO_CFG_OUT_STR_HIGH | GPIO_CFG_OUT_LOW,
212 * Array of callback function pointers
213 * NOTE: The order of the pin configurations must coincide with what was
214 * defined in CC3220SF_LAUNCHXL.h
215 * NOTE: Pins not used for interrupts can be omitted from callbacks array to
216 * reduce memory usage (if placed at end of gpioPinConfigs array).
218 GPIO_CallbackFxn gpioCallbackFunctions[] = {
219 NULL, /* CC3220SF_LAUNCHXL_GPIO_SW2 */
220 NULL /* CC3220SF_LAUNCHXL_GPIO_SW3 */
223 /* The device-specific GPIO_config structure */
224 const GPIOCC32XX_Config GPIOCC32XX_config = {
225 .pinConfigs = (GPIO_PinConfig *)gpioPinConfigs,
226 .callbacks = (GPIO_CallbackFxn *)gpioCallbackFunctions,
227 .numberOfPinConfigs = sizeof(gpioPinConfigs)/sizeof(GPIO_PinConfig),
228 .numberOfCallbacks = sizeof(gpioCallbackFunctions)/sizeof(GPIO_CallbackFxn),
233 * ============================= Display =============================
236 #include <ti/display/Display.h>
237 #include <ti/display/DisplayUart.h>
238 #define MAXPRINTLEN 1024
240 DisplayUart_Object displayUartObject;
242 static char displayBuf[MAXPRINTLEN];
244 const DisplayUart_HWAttrs displayUartHWAttrs = {
247 .mutexTimeout = (unsigned int)(-1),
248 .strBuf = displayBuf,
249 .strBufLen = MAXPRINTLEN
252 #ifndef BOARD_DISPLAY_USE_UART_ANSI
253 #define BOARD_DISPLAY_USE_UART_ANSI 0
256 const Display_Config Display_config[] = {
258 # if (BOARD_DISPLAY_USE_UART_ANSI)
259 .fxnTablePtr = &DisplayUartAnsi_fxnTable,
260 # else /* Default to minimal UART with no cursor placement */
261 .fxnTablePtr = &DisplayUartMin_fxnTable,
263 .object = &displayUartObject,
264 .hwAttrs = &displayUartHWAttrs
268 const uint_least8_t Display_count = sizeof(Display_config) / sizeof(Display_Config);
271 * =============================== I2C ===============================
273 #include <ti/drivers/I2C.h>
274 #include <ti/drivers/i2c/I2CCC32XX.h>
276 I2CCC32XX_Object i2cCC3220SObjects[CC3220SF_LAUNCHXL_I2CCOUNT];
278 const I2CCC32XX_HWAttrsV1 i2cCC3220SHWAttrs[CC3220SF_LAUNCHXL_I2CCOUNT] = {
280 .baseAddr = I2CA0_BASE,
283 .clkPin = I2CCC32XX_PIN_01_I2C_SCL,
284 .dataPin = I2CCC32XX_PIN_02_I2C_SDA
288 const I2C_Config I2C_config[CC3220SF_LAUNCHXL_I2CCOUNT] = {
290 .fxnTablePtr = &I2CCC32XX_fxnTable,
291 .object = &i2cCC3220SObjects[CC3220SF_LAUNCHXL_I2C0],
292 .hwAttrs = &i2cCC3220SHWAttrs[CC3220SF_LAUNCHXL_I2C0]
296 const uint_least8_t I2C_count = CC3220SF_LAUNCHXL_I2CCOUNT;
299 * =============================== I2S ===============================
301 #include <ti/drivers/I2S.h>
302 #include <ti/drivers/i2s/I2SCC32XXDMA.h>
304 I2SCC32XXDMA_Object i2sCC3220SObjects[CC3220SF_LAUNCHXL_I2SCOUNT];
306 const I2SCC32XXDMA_HWAttrsV1 i2sCC3220SHWAttrs[CC3220SF_LAUNCHXL_I2SCOUNT] = {
308 .baseAddr = I2S_BASE,
311 .rxChannelIndex = UDMA_CH4_I2S_RX,
312 .txChannelIndex = UDMA_CH5_I2S_TX,
313 .xr0Pin = I2SCC32XXDMA_PIN_64_McAXR0,
314 .xr1Pin = I2SCC32XXDMA_PIN_50_McAXR1,
315 .clkxPin = I2SCC32XXDMA_PIN_62_McACLKX,
316 .clkPin = I2SCC32XXDMA_PIN_53_McACLK,
317 .fsxPin = I2SCC32XXDMA_PIN_63_McAFSX,
321 const I2S_Config I2S_config[CC3220SF_LAUNCHXL_I2SCOUNT] = {
323 .fxnTablePtr = &I2SCC32XXDMA_fxnTable,
324 .object = &i2sCC3220SObjects[CC3220SF_LAUNCHXL_I2S0],
325 .hwAttrs = &i2sCC3220SHWAttrs[CC3220SF_LAUNCHXL_I2S0]
329 const uint_least8_t I2S_count = CC3220SF_LAUNCHXL_I2SCOUNT;
332 * =============================== Power ===============================
335 * This table defines the parking state to be set for each parkable pin
336 * during LPDS. (Device pins must be parked during LPDS to achieve maximum
337 * power savings.) If the pin should be left unparked, specify the state
338 * PowerCC32XX_DONT_PARK. For example, for a UART TX pin, the device
339 * will automatically park the pin in a high state during transition to LPDS,
340 * so the Power Manager does not need to explictly park the pin. So the
341 * corresponding entries in this table should indicate PowerCC32XX_DONT_PARK.
343 PowerCC32XX_ParkInfo parkInfo[] = {
344 /* PIN PARK STATE PIN ALIAS (FUNCTION)
345 ----------------- ------------------------------ -------------------- */
346 {PowerCC32XX_PIN01, PowerCC32XX_WEAK_PULL_DOWN_STD}, /* GPIO10 */
347 {PowerCC32XX_PIN02, PowerCC32XX_WEAK_PULL_DOWN_STD}, /* GPIO11 */
348 {PowerCC32XX_PIN03, PowerCC32XX_WEAK_PULL_DOWN_STD}, /* GPIO12 */
349 {PowerCC32XX_PIN04, PowerCC32XX_WEAK_PULL_DOWN_STD}, /* GPIO13 */
350 {PowerCC32XX_PIN05, PowerCC32XX_WEAK_PULL_DOWN_STD}, /* GPIO14 */
351 {PowerCC32XX_PIN06, PowerCC32XX_WEAK_PULL_DOWN_STD}, /* GPIO15 */
352 {PowerCC32XX_PIN07, PowerCC32XX_WEAK_PULL_DOWN_STD}, /* GPIO16 */
353 {PowerCC32XX_PIN08, PowerCC32XX_WEAK_PULL_DOWN_STD}, /* GPIO17 */
354 {PowerCC32XX_PIN13, PowerCC32XX_WEAK_PULL_DOWN_STD}, /* FLASH_SPI_DIN */
355 {PowerCC32XX_PIN15, PowerCC32XX_WEAK_PULL_DOWN_STD}, /* GPIO22 */
356 {PowerCC32XX_PIN16, PowerCC32XX_WEAK_PULL_DOWN_STD}, /* TDI (JTAG DEBUG) */
357 {PowerCC32XX_PIN17, PowerCC32XX_WEAK_PULL_DOWN_STD}, /* TDO (JTAG DEBUG) */
358 {PowerCC32XX_PIN19, PowerCC32XX_WEAK_PULL_DOWN_STD}, /* TCK (JTAG DEBUG) */
359 {PowerCC32XX_PIN20, PowerCC32XX_WEAK_PULL_DOWN_STD}, /* TMS (JTAG DEBUG) */
360 {PowerCC32XX_PIN18, PowerCC32XX_WEAK_PULL_DOWN_STD}, /* GPIO28 */
361 {PowerCC32XX_PIN21, PowerCC32XX_WEAK_PULL_DOWN_STD}, /* SOP2 */
362 {PowerCC32XX_PIN29, PowerCC32XX_WEAK_PULL_DOWN_STD}, /* ANTSEL1 */
363 {PowerCC32XX_PIN30, PowerCC32XX_WEAK_PULL_DOWN_STD}, /* ANTSEL2 */
364 {PowerCC32XX_PIN45, PowerCC32XX_WEAK_PULL_DOWN_STD}, /* DCDC_ANA2_SW_P */
365 {PowerCC32XX_PIN50, PowerCC32XX_WEAK_PULL_DOWN_STD}, /* GPIO0 */
366 {PowerCC32XX_PIN52, PowerCC32XX_WEAK_PULL_DOWN_STD}, /* RTC_XTAL_N */
367 {PowerCC32XX_PIN53, PowerCC32XX_WEAK_PULL_DOWN_STD}, /* GPIO30 */
368 {PowerCC32XX_PIN55, PowerCC32XX_WEAK_PULL_UP_STD}, /* GPIO1 (UART0_TX) */
369 {PowerCC32XX_PIN57, PowerCC32XX_WEAK_PULL_UP_STD}, /* GPIO2 */
370 {PowerCC32XX_PIN58, PowerCC32XX_WEAK_PULL_DOWN_STD}, /* GPIO3 */
371 {PowerCC32XX_PIN59, PowerCC32XX_WEAK_PULL_DOWN_STD}, /* GPIO4 */
372 {PowerCC32XX_PIN60, PowerCC32XX_WEAK_PULL_DOWN_STD}, /* GPIO5 */
373 {PowerCC32XX_PIN61, PowerCC32XX_WEAK_PULL_DOWN_STD}, /* GPIO6 */
374 {PowerCC32XX_PIN62, PowerCC32XX_WEAK_PULL_DOWN_STD}, /* GPIO7 */
375 {PowerCC32XX_PIN63, PowerCC32XX_WEAK_PULL_DOWN_STD}, /* GPIO8 */
376 {PowerCC32XX_PIN64, PowerCC32XX_WEAK_PULL_DOWN_STD}, /* GPIO9 */
380 * This structure defines the configuration for the Power Manager.
382 * In this configuration the Power policy is disabled by default (because
383 * enablePolicy is set to false). The Power policy can be enabled dynamically
384 * at runtime by calling Power_enablePolicy(), or at build time, by changing
385 * enablePolicy to true in this structure.
387 const PowerCC32XX_ConfigV1 PowerCC32XX_config = {
388 .policyInitFxn = &PowerCC32XX_initPolicy,
389 .policyFxn = &PowerCC32XX_sleepPolicy,
390 .enterLPDSHookFxn = NULL,
391 .resumeLPDSHookFxn = NULL,
392 .enablePolicy = false,
393 .enableGPIOWakeupLPDS = true,
394 .enableGPIOWakeupShutdown = false,
395 .enableNetworkWakeupLPDS = true,
396 .wakeupGPIOSourceLPDS = PRCM_LPDS_GPIO13,
397 .wakeupGPIOTypeLPDS = PRCM_LPDS_FALL_EDGE,
398 .wakeupGPIOFxnLPDS = NULL,
399 .wakeupGPIOFxnLPDSArg = 0,
400 .wakeupGPIOSourceShutdown = 0,
401 .wakeupGPIOTypeShutdown = 0,
402 .ramRetentionMaskLPDS = PRCM_SRAM_COL_1 | PRCM_SRAM_COL_2 |
403 PRCM_SRAM_COL_3 | PRCM_SRAM_COL_4,
404 .keepDebugActiveDuringLPDS = false,
405 .ioRetentionShutdown = PRCM_IO_RET_GRP_1,
406 .pinParkDefs = parkInfo,
407 .numPins = sizeof(parkInfo) / sizeof(PowerCC32XX_ParkInfo)
411 * =============================== PWM ===============================
413 #include <ti/drivers/PWM.h>
414 #include <ti/drivers/pwm/PWMTimerCC32XX.h>
416 PWMTimerCC32XX_Object pwmTimerCC3220SObjects[CC3220SF_LAUNCHXL_PWMCOUNT];
418 const PWMTimerCC32XX_HWAttrsV2 pwmTimerCC3220SHWAttrs[CC3220SF_LAUNCHXL_PWMCOUNT] = {
419 { /* CC3220SF_LAUNCHXL_PWM6 */
420 .pwmPin = PWMTimerCC32XX_PIN_01
422 { /* CC3220SF_LAUNCHXL_PWM7 */
423 .pwmPin = PWMTimerCC32XX_PIN_02
427 const PWM_Config PWM_config[CC3220SF_LAUNCHXL_PWMCOUNT] = {
429 .fxnTablePtr = &PWMTimerCC32XX_fxnTable,
430 .object = &pwmTimerCC3220SObjects[CC3220SF_LAUNCHXL_PWM6],
431 .hwAttrs = &pwmTimerCC3220SHWAttrs[CC3220SF_LAUNCHXL_PWM6]
434 .fxnTablePtr = &PWMTimerCC32XX_fxnTable,
435 .object = &pwmTimerCC3220SObjects[CC3220SF_LAUNCHXL_PWM7],
436 .hwAttrs = &pwmTimerCC3220SHWAttrs[CC3220SF_LAUNCHXL_PWM7]
440 const uint_least8_t PWM_count = CC3220SF_LAUNCHXL_PWMCOUNT;
443 * =============================== SDFatFS ===============================
446 #include <ti/drivers/SD.h>
447 #include <ti/drivers/SDFatFS.h>
449 /* Note: The SDFatFS and SD drivers must use the same count */
450 SDFatFS_Object sdfatfsObjects[CC3220SF_LAUNCHXL_SDFatFSCOUNT];
452 const SDFatFS_Config SDFatFS_config[CC3220SF_LAUNCHXL_SDFatFSCOUNT] = {
454 .object = &sdfatfsObjects[CC3220SF_LAUNCHXL_SDFatFS0]
458 const uint_least8_t SDFatFS_count = CC3220SF_LAUNCHXL_SDFatFSCOUNT;
461 * =============================== SD ===============================
463 #include <ti/drivers/SD.h>
464 #include <ti/drivers/sd/SDHostCC32XX.h>
466 SDHostCC32XX_Object sdhostCC3220SObjects[CC3220SF_LAUNCHXL_SDCOUNT];
468 /* SDHost configuration structure, describing which pins are to be used */
469 const SDHostCC32XX_HWAttrsV1 sdhostCC3220SHWattrs[CC3220SF_LAUNCHXL_SDCOUNT] = {
473 .baseAddr = SDHOST_BASE,
474 .rxChIdx = UDMA_CH23_SDHOST_RX,
475 .txChIdx = UDMA_CH24_SDHOST_TX,
476 .dataPin = SDHostCC32XX_PIN_06_SDCARD_DATA,
477 .cmdPin = SDHostCC32XX_PIN_08_SDCARD_CMD,
478 .clkPin = SDHostCC32XX_PIN_07_SDCARD_CLK
482 const SD_Config SD_config[CC3220SF_LAUNCHXL_SDCOUNT] = {
484 .fxnTablePtr = &sdHostCC32XX_fxnTable,
485 .object = &sdhostCC3220SObjects[CC3220SF_LAUNCHXL_SD0],
486 .hwAttrs = &sdhostCC3220SHWattrs[CC3220SF_LAUNCHXL_SD0]
490 const uint_least8_t SD_count = CC3220SF_LAUNCHXL_SDCOUNT;
493 * =============================== SDSPI ===============================
495 #include <ti/drivers/SDSPI.h>
496 #include <ti/drivers/sdspi/SDSPICC32XX.h>
498 SDSPICC32XX_Object sdspiCC3220SObjects[CC3220SF_LAUNCHXL_SDSPICOUNT];
500 /* SDSPI configuration structure, describing which pins are to be used */
501 const SDSPICC32XX_HWAttrsV1 sdspiCC3220SHWattrs[CC3220SF_LAUNCHXL_SDSPICOUNT] = {
503 .baseAddr = GSPI_BASE,
504 .spiPRCM = PRCM_GSPI,
505 .clkPin = SDSPICC32XX_PIN_05_CLK,
506 .mosiPin = SDSPICC32XX_PIN_07_MOSI,
507 .misoPin = SDSPICC32XX_PIN_06_MISO,
508 .csPin = SDSPICC32XX_PIN_62_GPIO
512 const SDSPI_Config SDSPI_config[CC3220SF_LAUNCHXL_SDSPICOUNT] = {
514 .fxnTablePtr = &SDSPICC32XX_fxnTable,
515 .object = &sdspiCC3220SObjects[CC3220SF_LAUNCHXL_SDSPI0],
516 .hwAttrs = &sdspiCC3220SHWattrs[CC3220SF_LAUNCHXL_SDSPI0]
520 const uint_least8_t SDSPI_count = CC3220SF_LAUNCHXL_SDSPICOUNT;
524 * =============================== SPI ===============================
526 #include <ti/drivers/SPI.h>
527 #include <ti/drivers/spi/SPICC32XXDMA.h>
529 SPICC32XXDMA_Object spiCC3220SDMAObjects[CC3220SF_LAUNCHXL_SPICOUNT];
531 #if defined(__TI_COMPILER_VERSION__)
532 #pragma DATA_ALIGN(spiCC3220SDMAscratchBuf, 32)
533 #elif defined(__IAR_SYSTEMS_ICC__)
534 #pragma data_alignment=32
535 #elif defined(__GNUC__)
536 __attribute__ ((aligned (32)))
538 uint32_t spiCC3220SDMAscratchBuf[CC3220SF_LAUNCHXL_SPICOUNT];
540 const SPICC32XXDMA_HWAttrsV1 spiCC3220SDMAHWAttrs[CC3220SF_LAUNCHXL_SPICOUNT] = {
541 /* index 0 is reserved for LSPI that links to the NWP */
543 .baseAddr = LSPI_BASE,
546 .spiPRCM = PRCM_LSPI,
547 .csControl = SPI_SW_CTRL_CS,
548 .csPolarity = SPI_CS_ACTIVEHIGH,
549 .pinMode = SPI_4PIN_MODE,
550 .turboMode = SPI_TURBO_OFF,
551 .scratchBufPtr = &spiCC3220SDMAscratchBuf[CC3220SF_LAUNCHXL_SPI0],
552 .defaultTxBufValue = 0,
553 .rxChannelIndex = UDMA_CH12_LSPI_RX,
554 .txChannelIndex = UDMA_CH13_LSPI_TX,
555 .minDmaTransferSize = 100,
556 .mosiPin = SPICC32XXDMA_PIN_NO_CONFIG,
557 .misoPin = SPICC32XXDMA_PIN_NO_CONFIG,
558 .clkPin = SPICC32XXDMA_PIN_NO_CONFIG,
559 .csPin = SPICC32XXDMA_PIN_NO_CONFIG
562 .baseAddr = GSPI_BASE,
565 .spiPRCM = PRCM_GSPI,
566 .csControl = SPI_HW_CTRL_CS,
567 .csPolarity = SPI_CS_ACTIVELOW,
568 .pinMode = SPI_4PIN_MODE,
569 .turboMode = SPI_TURBO_OFF,
570 .scratchBufPtr = &spiCC3220SDMAscratchBuf[CC3220SF_LAUNCHXL_SPI1],
571 .defaultTxBufValue = 0,
572 .rxChannelIndex = UDMA_CH6_GSPI_RX,
573 .txChannelIndex = UDMA_CH7_GSPI_TX,
574 .minDmaTransferSize = 100,
575 .mosiPin = SPICC32XXDMA_PIN_07_MOSI,
576 .misoPin = SPICC32XXDMA_PIN_06_MISO,
577 .clkPin = SPICC32XXDMA_PIN_05_CLK,
578 .csPin = SPICC32XXDMA_PIN_08_CS
582 const SPI_Config SPI_config[CC3220SF_LAUNCHXL_SPICOUNT] = {
584 .fxnTablePtr = &SPICC32XXDMA_fxnTable,
585 .object = &spiCC3220SDMAObjects[CC3220SF_LAUNCHXL_SPI0],
586 .hwAttrs = &spiCC3220SDMAHWAttrs[CC3220SF_LAUNCHXL_SPI0]
589 .fxnTablePtr = &SPICC32XXDMA_fxnTable,
590 .object = &spiCC3220SDMAObjects[CC3220SF_LAUNCHXL_SPI1],
591 .hwAttrs = &spiCC3220SDMAHWAttrs[CC3220SF_LAUNCHXL_SPI1]
595 const uint_least8_t SPI_count = CC3220SF_LAUNCHXL_SPICOUNT;
598 * =============================== UART ===============================
600 #include <ti/drivers/UART.h>
601 #if TI_DRIVERS_UART_DMA
602 #include <ti/drivers/uart/UARTCC32XXDMA.h>
604 UARTCC32XXDMA_Object uartCC3220SDmaObjects[CC3220SF_LAUNCHXL_UARTCOUNT];
606 /* UART configuration structure */
607 const UARTCC32XXDMA_HWAttrsV1 uartCC3220SDmaHWAttrs[CC3220SF_LAUNCHXL_UARTCOUNT] = {
609 .baseAddr = UARTA0_BASE,
610 .intNum = INT_UARTA0,
612 .rxChannelIndex = UDMA_CH8_UARTA0_RX,
613 .txChannelIndex = UDMA_CH9_UARTA0_TX,
614 .rxPin = UARTCC32XXDMA_PIN_57_UART0_RX,
615 .txPin = UARTCC32XXDMA_PIN_55_UART0_TX
618 .baseAddr = UARTA1_BASE,
619 .intNum = INT_UARTA1,
621 .rxChannelIndex = UDMA_CH10_UARTA1_RX,
622 .txChannelIndex = UDMA_CH11_UARTA1_TX,
623 .rxPin = UARTCC32XXDMA_PIN_08_UART1_RX,
624 .txPin = UARTCC32XXDMA_PIN_07_UART1_TX
628 const UART_Config UART_config[CC3220SF_LAUNCHXL_UARTCOUNT] = {
630 .fxnTablePtr = &UARTCC32XXDMA_fxnTable,
631 .object = &uartCC3220SDmaObjects[CC3220SF_LAUNCHXL_UART0],
632 .hwAttrs = &uartCC3220SDmaHWAttrs[CC3220SF_LAUNCHXL_UART0]
635 .fxnTablePtr = &UARTCC32XXDMA_fxnTable,
636 .object = &uartCC3220SDmaObjects[CC3220SF_LAUNCHXL_UART1],
637 .hwAttrs = &uartCC3220SDmaHWAttrs[CC3220SF_LAUNCHXL_UART1]
642 #include <ti/drivers/uart/UARTCC32XX.h>
644 UARTCC32XX_Object uartCC3220SObjects[CC3220SF_LAUNCHXL_UARTCOUNT];
645 unsigned char uartCC3220SRingBuffer[CC3220SF_LAUNCHXL_UARTCOUNT][32];
647 /* UART configuration structure */
648 const UARTCC32XX_HWAttrsV1 uartCC3220SHWAttrs[CC3220SF_LAUNCHXL_UARTCOUNT] = {
650 .baseAddr = UARTA0_BASE,
651 .intNum = INT_UARTA0,
653 .flowControl = UART_FLOWCONTROL_NONE,
654 .ringBufPtr = uartCC3220SRingBuffer[CC3220SF_LAUNCHXL_UART0],
655 .ringBufSize = sizeof(uartCC3220SRingBuffer[CC3220SF_LAUNCHXL_UART0]),
656 .rxPin = UARTCC32XX_PIN_57_UART0_RX,
657 .txPin = UARTCC32XX_PIN_55_UART0_TX
660 .baseAddr = UARTA1_BASE,
661 .intNum = INT_UARTA1,
663 .flowControl = UART_FLOWCONTROL_NONE,
664 .ringBufPtr = uartCC3220SRingBuffer[CC3220SF_LAUNCHXL_UART1],
665 .ringBufSize = sizeof(uartCC3220SRingBuffer[CC3220SF_LAUNCHXL_UART1]),
666 .rxPin = UARTCC32XX_PIN_08_UART1_RX,
667 .txPin = UARTCC32XX_PIN_07_UART1_TX
671 const UART_Config UART_config[CC3220SF_LAUNCHXL_UARTCOUNT] = {
673 .fxnTablePtr = &UARTCC32XX_fxnTable,
674 .object = &uartCC3220SObjects[CC3220SF_LAUNCHXL_UART0],
675 .hwAttrs = &uartCC3220SHWAttrs[CC3220SF_LAUNCHXL_UART0]
678 .fxnTablePtr = &UARTCC32XX_fxnTable,
679 .object = &uartCC3220SObjects[CC3220SF_LAUNCHXL_UART1],
680 .hwAttrs = &uartCC3220SHWAttrs[CC3220SF_LAUNCHXL_UART1]
683 #endif /* TI_DRIVERS_UART_DMA */
685 const uint_least8_t UART_count = CC3220SF_LAUNCHXL_UARTCOUNT;
688 * =============================== Watchdog ===============================
690 #include <ti/drivers/Watchdog.h>
691 #include <ti/drivers/watchdog/WatchdogCC32XX.h>
693 WatchdogCC32XX_Object watchdogCC3220SObjects[CC3220SF_LAUNCHXL_WATCHDOGCOUNT];
695 const WatchdogCC32XX_HWAttrs watchdogCC3220SHWAttrs[CC3220SF_LAUNCHXL_WATCHDOGCOUNT] = {
697 .baseAddr = WDT_BASE,
700 .reloadValue = 80000000 // 1 second period at default CPU clock freq
704 const Watchdog_Config Watchdog_config[CC3220SF_LAUNCHXL_WATCHDOGCOUNT] = {
706 .fxnTablePtr = &WatchdogCC32XX_fxnTable,
707 .object = &watchdogCC3220SObjects[CC3220SF_LAUNCHXL_WATCHDOG0],
708 .hwAttrs = &watchdogCC3220SHWAttrs[CC3220SF_LAUNCHXL_WATCHDOG0]
712 const uint_least8_t Watchdog_count = CC3220SF_LAUNCHXL_WATCHDOGCOUNT;
714 #if defined(__SF_DEBUG__)
715 #if defined(__TI_COMPILER_VERSION__)
716 #pragma DATA_SECTION(ulDebugHeader, ".dbghdr")
717 #elif defined(__IAR_SYSTEMS_ICC__)
718 #pragma data_location=".dbghdr"
719 #elif defined(__GNUC__)
720 __attribute__ ((section (".dbghdr")))
722 const unsigned long ulDebugHeader[]=