summary | shortlog | log | commit | commitdiff | tree
raw | patch | inline | side by side (parent: 65ee744)
raw | patch | inline | side by side (parent: 65ee744)
author | Borja Martinez <borja.martinez@gmail.com> | |
Sun, 11 Sep 2016 15:55:44 +0000 (17:55 +0200) | ||
committer | Borja Martinez <borja.martinez@gmail.com> | |
Sun, 11 Sep 2016 15:55:44 +0000 (17:55 +0200) |
diff --git a/Basic-Test-Package/CC2650/Test_CC2650_3wSPI_Master_MSP432_SlaveIRQ/Board.h b/Basic-Test-Package/CC2650/Test_CC2650_3wSPI_Master_MSP432_SlaveIRQ/Board.h
--- /dev/null
@@ -0,0 +1,86 @@
+/*
+ * Copyright (c) 2015-2016, Texas Instruments Incorporated
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * * Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * * Neither the name of Texas Instruments Incorporated nor the names of
+ * its contributors may be used to endorse or promote products derived
+ * from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
+ * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+ * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef __BOARD_H
+#define __BOARD_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include <ti/drivers/Power.h>
+
+#include "CC2650_I3M.h"
+
+/* These #defines allow us to reuse TI-RTOS across other device families */
+#define Board_LED0 Board_LEDR
+#define Board_LED1 Board_LEDG
+
+#define Board_BUTTON0 Board_BTN1
+#define Board_BUTTON1 Board_SPI1_IRQ
+
+#define Board_I2C0 Board_I2C
+
+#define Board_UART0 Board_UART
+#define Board_AES0 Board_AES
+#define Board_WATCHDOG0 Board_WATCHDOG
+
+#define Board_ADC0 CC2650_I3MOTE_ADCVSS
+#define Board_ADC1 CC2650_I3MOTE_ADCVDDS
+
+#define Board_ADCBuf0 CC2650_I3MOTE_ADCBuf0
+#define Board_ADCBufChannel0 (0)
+#define Board_ADCBufChannel1 (1)
+
+#define Board_initGeneral() { \
+ Power_init(); \
+ if (PIN_init(BoardGpioInitTable) != PIN_SUCCESS) \
+ {System_abort("Error with PIN_init\n"); \
+ } \
+}
+
+#define Board_initGPIO()
+#define Board_initPWM() PWM_init()
+#define Board_initSPI() SPI_init()
+#define Board_initI2C() I2C_init()
+#define Board_initUART() UART_init()
+#define Board_initWatchdog() Watchdog_init()
+#define Board_initADCBuf() ADCBuf_init()
+#define Board_initADC() ADC_init()
+#define GPIO_toggle(n)
+#define GPIO_write(n,m)
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __BOARD_H */
diff --git a/Basic-Test-Package/CC2650/Test_CC2650_3wSPI_Master_MSP432_SlaveIRQ/CC2650_I3M.c b/Basic-Test-Package/CC2650/Test_CC2650_3wSPI_Master_MSP432_SlaveIRQ/CC2650_I3M.c
--- /dev/null
@@ -0,0 +1,640 @@
+/*
+ * Copyright (c) 2016, Texas Instruments Incorporated
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * * Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * * Neither the name of Texas Instruments Incorporated nor the names of
+ * its contributors may be used to endorse or promote products derived
+ * from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
+ * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+ * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/*
+ * ====================== CC2650_I3MOTE.c ===================================
+ * This file is responsible for setting up the board specific items for the
+ * CC2650 LaunchPad.
+ */
+
+
+/*
+ * ====================== Includes ============================================
+ */
+#include <xdc/std.h>
+#include <xdc/runtime/System.h>
+
+#include <ti/sysbios/family/arm/m3/Hwi.h>
+#include <ti/drivers/PIN.h>
+#include <ti/drivers/pin/PINCC26XX.h>
+#include <ti/drivers/PWM.h>
+#include <ti/drivers/pwm/PWMTimerCC26XX.h>
+#include <ti/drivers/timer/GPTimerCC26XX.h>
+#include <ti/drivers/Power.h>
+#include <ti/drivers/power/PowerCC26XX.h>
+
+#include <inc/hw_memmap.h>
+#include <inc/hw_ints.h>
+#include <driverlib/ioc.h>
+#include <driverlib/udma.h>
+
+#include <Board.h>
+
+/*
+ * ========================= IO driver initialization =========================
+ * From main, PIN_init(BoardGpioInitTable) should be called to setup safe
+ * settings for this board.
+ * When a pin is allocated and then de-allocated, it will revert to the state
+ * configured in this table.
+ */
+/* Place into subsections to allow the TI linker to remove items properly */
+#if defined(__TI_COMPILER_VERSION__)
+#pragma DATA_SECTION(BoardGpioInitTable, ".const:BoardGpioInitTable")
+#pragma DATA_SECTION(PINCC26XX_hwAttrs, ".const:PINCC26XX_hwAttrs")
+#endif
+
+const PIN_Config BoardGpioInitTable[] = {
+
+ Board_LEDR | PIN_GPIO_OUTPUT_EN | PIN_GPIO_LOW | PIN_PUSHPULL | PIN_DRVSTR_MAX, /* LED initially off */
+ Board_LEDG | PIN_GPIO_OUTPUT_EN | PIN_GPIO_LOW | PIN_PUSHPULL | PIN_DRVSTR_MAX, /* LED initially off */
+ Board_BTN1 | PIN_INPUT_EN | PIN_PULLUP | PIN_IRQ_BOTHEDGES | PIN_HYSTERESIS, /* Button is active low */
+ Board_UART_RX | PIN_INPUT_EN | PIN_PULLDOWN, /* UART RX via debugger back channel */
+ Board_UART_TX | PIN_GPIO_OUTPUT_EN | PIN_GPIO_HIGH | PIN_PUSHPULL, /* UART TX via debugger back channel */
+ PIN_TERMINATE
+};
+
+const PINCC26XX_HWAttrs PINCC26XX_hwAttrs = {
+ .intPriority = ~0,
+ .swiPriority = 0
+};
+/*============================================================================*/
+
+/*
+ * ============================= Power begin ==================================
+ */
+/* Place into subsections to allow the TI linker to remove items properly */
+#if defined(__TI_COMPILER_VERSION__)
+#pragma DATA_SECTION(PowerCC26XX_config, ".const:PowerCC26XX_config")
+#endif
+const PowerCC26XX_Config PowerCC26XX_config = {
+ .policyInitFxn = NULL,
+ .policyFxn = &PowerCC26XX_standbyPolicy,
+ .calibrateFxn = &PowerCC26XX_calibrate,
+ .enablePolicy = TRUE,
+ .calibrateRCOSC_LF = TRUE,
+ .calibrateRCOSC_HF = TRUE,
+};
+/*
+ * ============================= Power end ====================================
+ */
+
+/*
+ * ============================= UART begin ===================================
+ */
+/* Place into subsections to allow the TI linker to remove items properly */
+#if defined(__TI_COMPILER_VERSION__)
+#pragma DATA_SECTION(UART_config, ".const:UART_config")
+#pragma DATA_SECTION(uartCC26XXHWAttrs, ".const:uartCC26XXHWAttrs")
+#endif
+
+/* Include drivers */
+#include <ti/drivers/UART.h>
+#include <ti/drivers/uart/UARTCC26XX.h>
+
+/* UART objects */
+UARTCC26XX_Object uartCC26XXObjects[CC2650_I3MOTE_UARTCOUNT];
+
+/* UART hardware parameter structure, also used to assign UART pins */
+const UARTCC26XX_HWAttrsV1 uartCC26XXHWAttrs[CC2650_I3MOTE_UARTCOUNT] = {
+ {
+ .baseAddr = UART0_BASE,
+ .powerMngrId = PowerCC26XX_PERIPH_UART0,
+ .intNum = INT_UART0_COMB,
+ .intPriority = ~0,
+ .swiPriority = 0,
+ .txPin = Board_UART_TX,
+ .rxPin = Board_UART_RX,
+ .ctsPin = PIN_UNASSIGNED,
+ .rtsPin = PIN_UNASSIGNED
+ }
+};
+
+/* UART configuration structure */
+const UART_Config UART_config[] = {
+ {
+ .fxnTablePtr = &UARTCC26XX_fxnTable,
+ .object = &uartCC26XXObjects[0],
+ .hwAttrs = &uartCC26XXHWAttrs[0]
+ },
+ {NULL, NULL, NULL}
+};
+/*
+ * ============================= UART end =====================================
+ */
+
+/*
+ * ============================= UDMA begin ===================================
+ */
+/* Place into subsections to allow the TI linker to remove items properly */
+#if defined(__TI_COMPILER_VERSION__)
+#pragma DATA_SECTION(UDMACC26XX_config, ".const:UDMACC26XX_config")
+#pragma DATA_SECTION(udmaHWAttrs, ".const:udmaHWAttrs")
+#endif
+
+/* Include drivers */
+#include <ti/drivers/dma/UDMACC26XX.h>
+
+/* UDMA objects */
+UDMACC26XX_Object udmaObjects[CC2650_I3MOTE_UDMACOUNT];
+
+/* UDMA configuration structure */
+const UDMACC26XX_HWAttrs udmaHWAttrs[CC2650_I3MOTE_UDMACOUNT] = {
+ {
+ .baseAddr = UDMA0_BASE,
+ .powerMngrId = PowerCC26XX_PERIPH_UDMA,
+ .intNum = INT_DMA_ERR,
+ .intPriority = ~0
+ }
+};
+
+/* UDMA configuration structure */
+const UDMACC26XX_Config UDMACC26XX_config[] = {
+ {
+ .object = &udmaObjects[0],
+ .hwAttrs = &udmaHWAttrs[0]
+ },
+ {NULL, NULL}
+};
+/*
+ * ============================= UDMA end =====================================
+ */
+
+/*
+ * ========================== SPI DMA begin ===================================
+ */
+/* Place into subsections to allow the TI linker to remove items properly */
+#if defined(__TI_COMPILER_VERSION__)
+#pragma DATA_SECTION(SPI_config, ".const:SPI_config")
+#pragma DATA_SECTION(spiCC26XXDMAHWAttrs, ".const:spiCC26XXDMAHWAttrs")
+#endif
+
+/* Include drivers */
+#include <ti/drivers/spi/SPICC26XXDMA.h>
+
+/* SPI objects */
+SPICC26XXDMA_Object spiCC26XXDMAObjects[CC2650_I3MOTE_SPICOUNT];
+
+/* SPI configuration structure, describing which pins are to be used */
+const SPICC26XXDMA_HWAttrsV1 spiCC26XXDMAHWAttrs[CC2650_I3MOTE_SPICOUNT] = {
+ {
+ .baseAddr = SSI0_BASE,
+ .intNum = INT_SSI0_COMB,
+ .intPriority = ~0,
+ .swiPriority = 0,
+ .powerMngrId = PowerCC26XX_PERIPH_SSI0,
+ .defaultTxBufValue = 0,
+ .rxChannelBitMask = 1<<UDMA_CHAN_SSI0_RX,
+ .txChannelBitMask = 1<<UDMA_CHAN_SSI0_TX,
+ .mosiPin = Board_SPI0_MOSI,
+ .misoPin = Board_SPI0_MISO,
+ .clkPin = Board_SPI0_CLK,
+ .csnPin = Board_SPI0_CSN
+ },
+ {
+ .baseAddr = SSI1_BASE,
+ .intNum = INT_SSI1_COMB,
+ .intPriority = ~0,
+ .swiPriority = 0,
+ .powerMngrId = PowerCC26XX_PERIPH_SSI1,
+ .defaultTxBufValue = 0,
+ .rxChannelBitMask = 1<<UDMA_CHAN_SSI1_RX,
+ .txChannelBitMask = 1<<UDMA_CHAN_SSI1_TX,
+ .mosiPin = Board_SPI1_MOSI,
+ .misoPin = Board_SPI1_MISO,
+ .clkPin = Board_SPI1_CLK,
+ .csnPin = Board_SPI1_CSN
+ }
+};
+
+/* SPI configuration structure */
+const SPI_Config SPI_config[] = {
+ {
+ .fxnTablePtr = &SPICC26XXDMA_fxnTable,
+ .object = &spiCC26XXDMAObjects[0],
+ .hwAttrs = &spiCC26XXDMAHWAttrs[0]
+ },
+ {
+ .fxnTablePtr = &SPICC26XXDMA_fxnTable,
+ .object = &spiCC26XXDMAObjects[1],
+ .hwAttrs = &spiCC26XXDMAHWAttrs[1]
+ },
+ {NULL, NULL, NULL}
+};
+/*
+ * ========================== SPI DMA end =====================================
+*/
+
+
+/*
+ * ============================= I2C Begin=====================================
+*/
+/* Place into subsections to allow the TI linker to remove items properly */
+#if defined(__TI_COMPILER_VERSION__)
+#pragma DATA_SECTION(I2C_config, ".const:I2C_config")
+#pragma DATA_SECTION(i2cCC26xxHWAttrs, ".const:i2cCC26xxHWAttrs")
+#endif
+
+/* Include drivers */
+#include <ti/drivers/i2c/I2CCC26XX.h>
+
+/* I2C objects */
+I2CCC26XX_Object i2cCC26xxObjects[CC2650_I3MOTE_I2CCOUNT];
+
+/* I2C configuration structure, describing which pins are to be used */
+const I2CCC26XX_HWAttrsV1 i2cCC26xxHWAttrs[CC2650_I3MOTE_I2CCOUNT] = {
+ {
+ .baseAddr = I2C0_BASE,
+ .powerMngrId = PowerCC26XX_PERIPH_I2C0,
+ .intNum = INT_I2C_IRQ,
+ .intPriority = ~0,
+ .swiPriority = 0,
+ .sdaPin = Board_I2C0_SDA0,
+ .sclPin = Board_I2C0_SCL0,
+ }
+};
+
+/* I2C configuration structure */
+const I2C_Config I2C_config[] = {
+ {
+ .fxnTablePtr = &I2CCC26XX_fxnTable,
+ .object = &i2cCC26xxObjects[0],
+ .hwAttrs = &i2cCC26xxHWAttrs[0]
+ },
+ {NULL, NULL, NULL}
+};
+/*
+ * ========================== I2C end =========================================
+ */
+
+/*
+ * ========================== Crypto begin ====================================
+ * NOTE: The Crypto implementation should be considered experimental
+ * and not validated!
+ */
+/* Place into subsections to allow the TI linker to remove items properly */
+#if defined(__TI_COMPILER_VERSION__)
+#pragma DATA_SECTION(CryptoCC26XX_config, ".const:CryptoCC26XX_config")
+#pragma DATA_SECTION(cryptoCC26XXHWAttrs, ".const:cryptoCC26XXHWAttrs")
+#endif
+
+/* Include drivers */
+#include <ti/drivers/crypto/CryptoCC26XX.h>
+
+/* Crypto objects */
+CryptoCC26XX_Object cryptoCC26XXObjects[CC2650_I3MOTE_CRYPTOCOUNT];
+
+/* Crypto configuration structure, describing which pins are to be used */
+const CryptoCC26XX_HWAttrs cryptoCC26XXHWAttrs[CC2650_I3MOTE_CRYPTOCOUNT] = {
+ {
+ .baseAddr = CRYPTO_BASE,
+ .powerMngrId = PowerCC26XX_PERIPH_CRYPTO,
+ .intNum = INT_CRYPTO_RESULT_AVAIL_IRQ,
+ .intPriority = ~0,
+ }
+};
+
+/* Crypto configuration structure */
+const CryptoCC26XX_Config CryptoCC26XX_config[] = {
+ {
+ .object = &cryptoCC26XXObjects[0],
+ .hwAttrs = &cryptoCC26XXHWAttrs[0]
+ },
+ {NULL, NULL}
+};
+/*
+ * ========================== Crypto end ======================================
+ */
+
+
+/*
+ * ========================= RF driver begin ==================================
+ */
+/* Place into subsections to allow the TI linker to remove items properly */
+#if defined(__TI_COMPILER_VERSION__)
+#pragma DATA_SECTION(RFCC26XX_hwAttrs, ".const:RFCC26XX_hwAttrs")
+#endif
+
+/* Include drivers */
+#include <ti/drivers/rf/RF.h>
+
+/* RF hwi and swi priority */
+const RFCC26XX_HWAttrs RFCC26XX_hwAttrs = {
+ .hwiCpe0Priority = ~0,
+ .hwiHwPriority = ~0,
+ .swiCpe0Priority = 0,
+ .swiHwPriority = 0,
+};
+
+/*
+ * ========================== RF driver end ===================================
+ */
+
+/*
+ * ========================= Display begin ====================================
+ */
+
+/*
+ * ========================= Display end ======================================
+ */
+
+/*
+ * ============================ GPTimer begin =================================
+ * Remove unused entries to reduce flash usage both in Board.c and Board.h
+ */
+/* Place into subsections to allow the TI linker to remove items properly */
+#if defined(__TI_COMPILER_VERSION__)
+#pragma DATA_SECTION(GPTimerCC26XX_config, ".const:GPTimerCC26XX_config")
+#pragma DATA_SECTION(gptimerCC26xxHWAttrs, ".const:gptimerCC26xxHWAttrs")
+#endif
+
+/* GPTimer hardware attributes, one per timer part (Timer 0A, 0B, 1A, 1B..) */
+const GPTimerCC26XX_HWAttrs gptimerCC26xxHWAttrs[CC2650_I3MOTE_GPTIMERPARTSCOUNT] = {
+ { .baseAddr = GPT0_BASE, .intNum = INT_GPT0A, .intPriority = (~0), .powerMngrId = PowerCC26XX_PERIPH_GPT0, .pinMux = GPT_PIN_0A, },
+ { .baseAddr = GPT0_BASE, .intNum = INT_GPT0B, .intPriority = (~0), .powerMngrId = PowerCC26XX_PERIPH_GPT0, .pinMux = GPT_PIN_0B, },
+ { .baseAddr = GPT1_BASE, .intNum = INT_GPT1A, .intPriority = (~0), .powerMngrId = PowerCC26XX_PERIPH_GPT1, .pinMux = GPT_PIN_1A, },
+ { .baseAddr = GPT1_BASE, .intNum = INT_GPT1B, .intPriority = (~0), .powerMngrId = PowerCC26XX_PERIPH_GPT1, .pinMux = GPT_PIN_1B, },
+ { .baseAddr = GPT2_BASE, .intNum = INT_GPT2A, .intPriority = (~0), .powerMngrId = PowerCC26XX_PERIPH_GPT2, .pinMux = GPT_PIN_2A, },
+ { .baseAddr = GPT2_BASE, .intNum = INT_GPT2B, .intPriority = (~0), .powerMngrId = PowerCC26XX_PERIPH_GPT2, .pinMux = GPT_PIN_2B, },
+ { .baseAddr = GPT3_BASE, .intNum = INT_GPT3A, .intPriority = (~0), .powerMngrId = PowerCC26XX_PERIPH_GPT3, .pinMux = GPT_PIN_3A, },
+ { .baseAddr = GPT3_BASE, .intNum = INT_GPT3B, .intPriority = (~0), .powerMngrId = PowerCC26XX_PERIPH_GPT3, .pinMux = GPT_PIN_3B, },
+};
+
+/* GPTimer objects, one per full-width timer (A+B) (Timer 0, Timer 1..) */
+GPTimerCC26XX_Object gptimerCC26XXObjects[CC2650_I3MOTE_GPTIMERCOUNT];
+
+/* GPTimer configuration (used as GPTimer_Handle by driver and application) */
+const GPTimerCC26XX_Config GPTimerCC26XX_config[CC2650_I3MOTE_GPTIMERPARTSCOUNT] = {
+ { &gptimerCC26XXObjects[0], &gptimerCC26xxHWAttrs[0], GPT_A },
+ { &gptimerCC26XXObjects[0], &gptimerCC26xxHWAttrs[1], GPT_B },
+ { &gptimerCC26XXObjects[1], &gptimerCC26xxHWAttrs[2], GPT_A },
+ { &gptimerCC26XXObjects[1], &gptimerCC26xxHWAttrs[3], GPT_B },
+ { &gptimerCC26XXObjects[2], &gptimerCC26xxHWAttrs[4], GPT_A },
+ { &gptimerCC26XXObjects[2], &gptimerCC26xxHWAttrs[5], GPT_B },
+ { &gptimerCC26XXObjects[3], &gptimerCC26xxHWAttrs[6], GPT_A },
+ { &gptimerCC26XXObjects[3], &gptimerCC26xxHWAttrs[7], GPT_B },
+};
+
+/*
+ * ============================ GPTimer end ===================================
+ */
+
+
+
+/*
+ * ============================= PWM begin ====================================
+ * Remove unused entries to reduce flash usage both in Board.c and Board.h
+ */
+/* Place into subsections to allow the TI linker to remove items properly */
+#if defined(__TI_COMPILER_VERSION__)
+#pragma DATA_SECTION(PWM_config, ".const:PWM_config")
+#pragma DATA_SECTION(pwmtimerCC26xxHWAttrs, ".const:pwmtimerCC26xxHWAttrs")
+#endif
+
+/* PWM configuration, one per PWM output. */
+PWMTimerCC26XX_HwAttrs pwmtimerCC26xxHWAttrs[CC2650_I3MOTE_PWMCOUNT] = {
+ { .pwmPin = Board_PWMPIN0, .gpTimerUnit = Board_GPTIMER0A },
+ { .pwmPin = Board_PWMPIN1, .gpTimerUnit = Board_GPTIMER0B },
+ { .pwmPin = Board_PWMPIN2, .gpTimerUnit = Board_GPTIMER1A },
+ { .pwmPin = Board_PWMPIN3, .gpTimerUnit = Board_GPTIMER1B },
+ { .pwmPin = Board_PWMPIN4, .gpTimerUnit = Board_GPTIMER2A },
+ { .pwmPin = Board_PWMPIN5, .gpTimerUnit = Board_GPTIMER2B },
+ { .pwmPin = Board_PWMPIN6, .gpTimerUnit = Board_GPTIMER3A },
+ { .pwmPin = Board_PWMPIN7, .gpTimerUnit = Board_GPTIMER3B },
+};
+
+/* PWM object, one per PWM output */
+PWMTimerCC26XX_Object pwmtimerCC26xxObjects[CC2650_I3MOTE_PWMCOUNT];
+
+extern const PWM_FxnTable PWMTimerCC26XX_fxnTable;
+
+/* PWM configuration (used as PWM_Handle by driver and application) */
+const PWM_Config PWM_config[CC2650_I3MOTE_PWMCOUNT + 1] = {
+ { &PWMTimerCC26XX_fxnTable, &pwmtimerCC26xxObjects[0], &pwmtimerCC26xxHWAttrs[0] },
+ { &PWMTimerCC26XX_fxnTable, &pwmtimerCC26xxObjects[1], &pwmtimerCC26xxHWAttrs[1] },
+ { &PWMTimerCC26XX_fxnTable, &pwmtimerCC26xxObjects[2], &pwmtimerCC26xxHWAttrs[2] },
+ { &PWMTimerCC26XX_fxnTable, &pwmtimerCC26xxObjects[3], &pwmtimerCC26xxHWAttrs[3] },
+ { &PWMTimerCC26XX_fxnTable, &pwmtimerCC26xxObjects[4], &pwmtimerCC26xxHWAttrs[4] },
+ { &PWMTimerCC26XX_fxnTable, &pwmtimerCC26xxObjects[5], &pwmtimerCC26xxHWAttrs[5] },
+ { &PWMTimerCC26XX_fxnTable, &pwmtimerCC26xxObjects[6], &pwmtimerCC26xxHWAttrs[6] },
+ { &PWMTimerCC26XX_fxnTable, &pwmtimerCC26xxObjects[7], &pwmtimerCC26xxHWAttrs[7] },
+ { NULL, NULL, NULL }
+};
+
+
+/*
+ * ============================= PWM end ======================================
+ */
+
+/*
+ * ========================== ADCBuf begin =========================================
+ */
+/* Place into subsections to allow the TI linker to remove items properly */
+#if defined(__TI_COMPILER_VERSION__)
+#pragma DATA_SECTION(ADCBuf_config, ".const:ADCBuf_config")
+#pragma DATA_SECTION(adcBufCC26xxHWAttrs, ".const:adcBufCC26xxHWAttrs")
+#pragma DATA_SECTION(ADCBufCC26XX_adcChannelLut, ".const:ADCBufCC26XX_adcChannelLut")
+#endif
+
+/* Include drivers */
+#include <ti/drivers/ADCBuf.h>
+#include <ti/drivers/adcbuf/ADCBufCC26XX.h>
+
+/* ADCBuf objects */
+ADCBufCC26XX_Object adcBufCC26xxObjects[CC2650_I3MOTE_ADCBufCOUNT];
+
+/*
+ * This table converts a virtual adc channel into a dio and internal analogue input signal.
+ * This table is necessary for the functioning of the adcBuf driver.
+ * Comment out unused entries to save flash.
+ * Dio and internal signal pairs are hardwired. Do not remap them in the table. You may reorder entire entries though.
+ * The mapping of dio and internal signals is package dependent.
+ */
+const ADCBufCC26XX_AdcChannelLutEntry ADCBufCC26XX_adcChannelLut[] = {
+ {PIN_UNASSIGNED, ADC_COMPB_IN_VDDS},
+ {PIN_UNASSIGNED, ADC_COMPB_IN_DCOUPL},
+ {PIN_UNASSIGNED, ADC_COMPB_IN_VSS},
+ //{Board_DIO23_ANALOG, ADC_COMPB_IN_AUXIO7},
+ //{Board_DIO24_ANALOG, ADC_COMPB_IN_AUXIO6},
+ //{Board_DIO25_ANALOG, ADC_COMPB_IN_AUXIO5},
+ //{Board_DIO26_ANALOG, ADC_COMPB_IN_AUXIO4},
+ //{Board_DIO27_ANALOG, ADC_COMPB_IN_AUXIO3},
+ //{Board_DIO28_ANALOG, ADC_COMPB_IN_AUXIO2},
+ //{Board_DIO29_ANALOG, ADC_COMPB_IN_AUXIO1},
+ //{Board_DIO30_ANALOG, ADC_COMPB_IN_AUXIO0},
+};
+
+const ADCBufCC26XX_HWAttrs adcBufCC26xxHWAttrs[CC2650_I3MOTE_ADCBufCOUNT] = {
+ {
+ .intPriority = ~0,
+ .swiPriority = 0,
+ .adcChannelLut = ADCBufCC26XX_adcChannelLut,
+ .gpTimerUnit = Board_GPTIMER0A,
+ .gptDMAChannelMask = 1 << UDMA_CHAN_TIMER0_A,
+ }
+};
+
+const ADCBuf_Config ADCBuf_config[] = {
+ {&ADCBufCC26XX_fxnTable, &adcBufCC26xxObjects[0], &adcBufCC26xxHWAttrs[0]},
+ {NULL, NULL, NULL},
+};
+/*
+ * ========================== ADCBuf end =========================================
+ */
+
+
+
+/*
+ * ========================== ADC begin =========================================
+ */
+/* Place into subsections to allow the TI linker to remove items properly */
+#if defined(__TI_COMPILER_VERSION__)
+#pragma DATA_SECTION(ADC_config, ".const:ADC_config")
+#pragma DATA_SECTION(adcCC26xxHWAttrs, ".const:adcCC26xxHWAttrs")
+#endif
+
+/* Include drivers */
+#include <ti/drivers/ADC.h>
+#include <ti/drivers/adc/ADCCC26XX.h>
+
+/* ADC objects */
+ADCCC26XX_Object adcCC26xxObjects[CC2650_I3MOTE_ADCCOUNT];
+
+
+const ADCCC26XX_HWAttrs adcCC26xxHWAttrs[CC2650_I3MOTE_ADCCOUNT] = {
+ {
+ .adcDIO = Board_DIO23_ANALOG,
+ .adcCompBInput = ADC_COMPB_IN_AUXIO7,
+ .refSource = ADCCC26XX_FIXED_REFERENCE,
+ .samplingDuration = ADCCC26XX_SAMPLING_DURATION_2P7_US,
+ .inputScalingEnabled = true,
+ .triggerSource = ADCCC26XX_TRIGGER_MANUAL
+ },
+ {
+ .adcDIO = Board_DIO24_ANALOG,
+ .adcCompBInput = ADC_COMPB_IN_AUXIO6,
+ .refSource = ADCCC26XX_FIXED_REFERENCE,
+ .samplingDuration = ADCCC26XX_SAMPLING_DURATION_2P7_US,
+ .inputScalingEnabled = true,
+ .triggerSource = ADCCC26XX_TRIGGER_MANUAL
+ },
+ {
+ .adcDIO = Board_DIO25_ANALOG,
+ .adcCompBInput = ADC_COMPB_IN_AUXIO5,
+ .refSource = ADCCC26XX_FIXED_REFERENCE,
+ .samplingDuration = ADCCC26XX_SAMPLING_DURATION_2P7_US,
+ .inputScalingEnabled = true,
+ .triggerSource = ADCCC26XX_TRIGGER_MANUAL
+ },
+ {
+ .adcDIO = Board_DIO26_ANALOG,
+ .adcCompBInput = ADC_COMPB_IN_AUXIO4,
+ .refSource = ADCCC26XX_FIXED_REFERENCE,
+ .samplingDuration = ADCCC26XX_SAMPLING_DURATION_2P7_US,
+ .inputScalingEnabled = true,
+ .triggerSource = ADCCC26XX_TRIGGER_MANUAL
+ },
+ {
+ .adcDIO = Board_DIO27_ANALOG,
+ .adcCompBInput = ADC_COMPB_IN_AUXIO3,
+ .refSource = ADCCC26XX_FIXED_REFERENCE,
+ .samplingDuration = ADCCC26XX_SAMPLING_DURATION_2P7_US,
+ .inputScalingEnabled = true,
+ .triggerSource = ADCCC26XX_TRIGGER_MANUAL
+ },
+ {
+ .adcDIO = Board_DIO28_ANALOG,
+ .adcCompBInput = ADC_COMPB_IN_AUXIO2,
+ .refSource = ADCCC26XX_FIXED_REFERENCE,
+ .samplingDuration = ADCCC26XX_SAMPLING_DURATION_2P7_US,
+ .inputScalingEnabled = true,
+ .triggerSource = ADCCC26XX_TRIGGER_MANUAL
+ },
+ {
+ .adcDIO = Board_DIO29_ANALOG,
+ .adcCompBInput = ADC_COMPB_IN_AUXIO1,
+ .refSource = ADCCC26XX_FIXED_REFERENCE,
+ .samplingDuration = ADCCC26XX_SAMPLING_DURATION_2P7_US,
+ .inputScalingEnabled = true,
+ .triggerSource = ADCCC26XX_TRIGGER_MANUAL
+ },
+ {
+ .adcDIO = Board_DIO30_ANALOG,
+ .adcCompBInput = ADC_COMPB_IN_AUXIO0,
+ .refSource = ADCCC26XX_FIXED_REFERENCE,
+ .samplingDuration = ADCCC26XX_SAMPLING_DURATION_10P9_MS,
+ .inputScalingEnabled = true,
+ .triggerSource = ADCCC26XX_TRIGGER_MANUAL
+ },
+ {
+ .adcDIO = PIN_UNASSIGNED,
+ .adcCompBInput = ADC_COMPB_IN_DCOUPL,
+ .refSource = ADCCC26XX_FIXED_REFERENCE,
+ .samplingDuration = ADCCC26XX_SAMPLING_DURATION_2P7_US,
+ .inputScalingEnabled = true,
+ .triggerSource = ADCCC26XX_TRIGGER_MANUAL
+ },
+ {
+ .adcDIO = PIN_UNASSIGNED,
+ .adcCompBInput = ADC_COMPB_IN_VSS,
+ .refSource = ADCCC26XX_FIXED_REFERENCE,
+ .samplingDuration = ADCCC26XX_SAMPLING_DURATION_2P7_US,
+ .inputScalingEnabled = true,
+ .triggerSource = ADCCC26XX_TRIGGER_MANUAL
+ },
+ {
+ .adcDIO = PIN_UNASSIGNED,
+ .adcCompBInput = ADC_COMPB_IN_VDDS,
+ .refSource = ADCCC26XX_FIXED_REFERENCE,
+ .samplingDuration = ADCCC26XX_SAMPLING_DURATION_2P7_US,
+ .inputScalingEnabled = true,
+ .triggerSource = ADCCC26XX_TRIGGER_MANUAL
+ }
+};
+
+const ADC_Config ADC_config[] = {
+ {&ADCCC26XX_fxnTable, &adcCC26xxObjects[0], &adcCC26xxHWAttrs[0]},
+ {&ADCCC26XX_fxnTable, &adcCC26xxObjects[1], &adcCC26xxHWAttrs[1]},
+ {&ADCCC26XX_fxnTable, &adcCC26xxObjects[2], &adcCC26xxHWAttrs[2]},
+ {&ADCCC26XX_fxnTable, &adcCC26xxObjects[3], &adcCC26xxHWAttrs[3]},
+ {&ADCCC26XX_fxnTable, &adcCC26xxObjects[4], &adcCC26xxHWAttrs[4]},
+ {&ADCCC26XX_fxnTable, &adcCC26xxObjects[5], &adcCC26xxHWAttrs[5]},
+ {&ADCCC26XX_fxnTable, &adcCC26xxObjects[6], &adcCC26xxHWAttrs[6]},
+ {&ADCCC26XX_fxnTable, &adcCC26xxObjects[7], &adcCC26xxHWAttrs[7]},
+ {&ADCCC26XX_fxnTable, &adcCC26xxObjects[8], &adcCC26xxHWAttrs[8]},
+ {&ADCCC26XX_fxnTable, &adcCC26xxObjects[9], &adcCC26xxHWAttrs[9]},
+ {&ADCCC26XX_fxnTable, &adcCC26xxObjects[10], &adcCC26xxHWAttrs[10]},
+ {NULL, NULL, NULL},
+};
+
+/*
+ * ========================== ADC end =========================================
+ */
diff --git a/Basic-Test-Package/CC2650/Test_CC2650_3wSPI_Master_MSP432_SlaveIRQ/CC2650_I3M.cfg b/Basic-Test-Package/CC2650/Test_CC2650_3wSPI_Master_MSP432_SlaveIRQ/CC2650_I3M.cfg
--- /dev/null
@@ -0,0 +1,617 @@
+/*
+ * Copyright (c) 2015-2016, Texas Instruments Incorporated
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * * Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * * Neither the name of Texas Instruments Incorporated nor the names of
+ * its contributors may be used to endorse or promote products derived
+ * from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
+ * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+ * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+
+
+/* ================ Boot configuration ================ */
+var Boot = xdc.useModule('ti.sysbios.family.arm.cc26xx.Boot');
+/*
+ * This module contains family specific Boot APIs and configuration settings.
+ * See the SYS/BIOS API guide for more information.
+ */
+
+
+
+/* ================ Clock configuration ================ */
+var Clock = xdc.useModule('ti.sysbios.knl.Clock');
+/*
+ * When using Power and calibrateRCOSC is set to true, this should be set to 10.
+ * The timer used by the Clock module supports TickMode_DYNAMIC. This enables us
+ * to set the tick period to 10 us without generating the overhead of additional
+ * interrupts.
+ *
+ * Note: The calibrateRCOSC parameter is set within the Power configuration
+ * structure in the "Board.c" file.
+ */
+Clock.tickPeriod = 10;
+
+
+
+/* ================ Defaults (module) configuration ================ */
+var Defaults = xdc.useModule('xdc.runtime.Defaults');
+/*
+ * A flag to allow module names to be loaded on the target. Module name
+ * strings are placed in the .const section for debugging purposes.
+ *
+ * Pick one:
+ * - true (default)
+ * Setting this parameter to true will include name strings in the .const
+ * section so that Errors and Asserts are easier to debug.
+ * - false
+ * Setting this parameter to false will reduce footprint in the .const
+ * section. As a result, Error and Assert messages will contain an
+ * "unknown module" prefix instead of the actual module name.
+ *
+ * When using BIOS in ROM:
+ * This option must be set to false.
+ */
+//Defaults.common$.namedModule = true;
+Defaults.common$.namedModule = false;
+
+
+
+/* ================ Error configuration ================ */
+var Error = xdc.useModule('xdc.runtime.Error');
+/*
+ * This function is called to handle all raised errors, but unlike
+ * Error.raiseHook, this function is responsible for completely handling the
+ * error with an appropriately initialized Error_Block.
+ *
+ * Pick one:
+ * - Error.policyDefault (default)
+ * Calls Error.raiseHook with an initialized Error_Block structure and logs
+ * the error using the module's logger.
+ * - Error.policySpin
+ * Simple alternative that traps on a while(1) loop for minimized target
+ * footprint.
+ * Using Error.policySpin, the Error.raiseHook will NOT called.
+ */
+//Error.policyFxn = Error.policyDefault;
+Error.policyFxn = Error.policySpin;
+
+/*
+ * If Error.policyFxn is set to Error.policyDefault, this function is called
+ * whenever an error is raised by the Error module.
+ *
+ * Pick one:
+ * - Error.print (default)
+ * Errors are formatted and output via System_printf() for easier
+ * debugging.
+ * - null
+ * Errors are not formatted or logged. This option reduces code footprint.
+ * - non-null function
+ * Errors invoke custom user function. See the Error module documentation
+ * for more details.
+ */
+//Error.raiseHook = Error.print;
+Error.raiseHook = null;
+//Error.raiseHook = "&myErrorFxn";
+
+/*
+ * If Error.policyFxn is set to Error.policyDefault, this option applies to the
+ * maximum number of times the Error.raiseHook function can be recursively
+ * invoked. This option limits the possibility of an infinite recursion that
+ * could lead to a stack overflow.
+ * The default value is 16.
+ */
+Error.maxDepth = 2;
+
+
+
+/* ================ Hwi configuration ================ */
+var halHwi = xdc.useModule('ti.sysbios.hal.Hwi');
+var m3Hwi = xdc.useModule('ti.sysbios.family.arm.m3.Hwi');
+/*
+ * Checks for Hwi (system) stack overruns while in the Idle loop.
+ *
+ * Pick one:
+ * - true (default)
+ * Checks the top word for system stack overflows during the idle loop and
+ * raises an Error if one is detected.
+ * - false
+ * Disabling the runtime check improves runtime performance and yields a
+ * reduced flash footprint.
+ */
+//halHwi.checkStackFlag = true;
+halHwi.checkStackFlag = false;
+
+/*
+ * The following options alter the system's behavior when a hardware exception
+ * is detected.
+ *
+ * Pick one:
+ * - Hwi.enableException = true
+ * This option causes the default m3Hwi.excHandlerFunc function to fully
+ * decode an exception and dump the registers to the system console.
+ * This option raises errors in the Error module and displays the
+ * exception in ROV.
+ * - Hwi.enableException = false
+ * This option reduces code footprint by not decoding or printing the
+ * exception to the system console.
+ * It however still raises errors in the Error module and displays the
+ * exception in ROV.
+ * - Hwi.excHandlerFunc = null
+ * This is the most aggressive option for code footprint savings; but it
+ * can difficult to debug exceptions. It reduces flash footprint by
+ * plugging in a default while(1) trap when exception occur. This option
+ * does not raise an error with the Error module.
+ */
+//m3Hwi.enableException = true;
+//m3Hwi.enableException = false;
+m3Hwi.excHandlerFunc = null;
+
+/*
+ * Enable hardware exception generation when dividing by zero.
+ *
+ * Pick one:
+ * - 0 (default)
+ * Disables hardware exceptions when dividing by zero
+ * - 1
+ * Enables hardware exceptions when dividing by zero
+ */
+m3Hwi.nvicCCR.DIV_0_TRP = 0;
+//m3Hwi.nvicCCR.DIV_0_TRP = 1;
+
+/*
+ * Enable hardware exception generation for invalid data alignment.
+ *
+ * Pick one:
+ * - 0 (default)
+ * Disables hardware exceptions for data alignment
+ * - 1
+ * Enables hardware exceptions for data alignment
+ */
+m3Hwi.nvicCCR.UNALIGN_TRP = 0;
+//m3Hwi.nvicCCR.UNALIGN_TRP = 1;
+
+/*
+ * Assign an address for the reset vector.
+ *
+ * Default is 0x0, which is the start of Flash. Ordinarily this setting should
+ * not be changed.
+ */
+m3Hwi.resetVectorAddress = 0x0;
+
+/*
+ * Assign an address for the vector table in RAM.
+ *
+ * The default is the start of RAM. This table is placed in RAM so interrupts
+ * can be added at runtime.
+ *
+ * Note: To change, verify address in the device specific datasheets'
+ * memory map.
+ */
+m3Hwi.vectorTableAddress = 0x20000000;
+
+
+
+/* ================ Idle configuration ================ */
+var Idle = xdc.useModule('ti.sysbios.knl.Idle');
+/*
+ * The Idle module is used to specify a list of functions to be called when no
+ * other tasks are running in the system.
+ *
+ * Functions added here will be run continuously within the idle task.
+ *
+ * Function signature:
+ * Void func(Void);
+ */
+//Idle.addFunc("&myIdleFunc");
+Idle.addFunc('&uartPrintf_flush'); // BMH flushing function.
+
+
+/* ================ Kernel (SYS/BIOS) configuration ================ */
+var BIOS = xdc.useModule('ti.sysbios.BIOS');
+/*
+ * Enable asserts in the BIOS library.
+ *
+ * Pick one:
+ * - true (default)
+ * Enables asserts for debugging purposes.
+ * - false
+ * Disables asserts for a reduced code footprint and better performance.
+ *
+ * When using BIOS in ROM:
+ * This option must be set to false.
+ */
+//BIOS.assertsEnabled = true;
+BIOS.assertsEnabled = false;
+
+/*
+ * Specify default heap size for BIOS.
+ */
+BIOS.heapSize = 1024;
+
+/*
+ * Specify default CPU Frequency.
+ */
+BIOS.cpuFreq.lo = 48000000;
+
+/*
+ * A flag to determine if xdc.runtime sources are to be included in a custom
+ * built BIOS library.
+ *
+ * Pick one:
+ * - false (default)
+ * The pre-built xdc.runtime library is provided by the respective target
+ * used to build the application.
+ * - true
+ * xdc.runtime library sources are to be included in the custom BIOS
+ * library. This option yields the most efficient library in both code
+ * footprint and runtime performance.
+ */
+//BIOS.includeXdcRuntime = false;
+BIOS.includeXdcRuntime = true;
+
+/*
+ * The SYS/BIOS runtime is provided in the form of a library that is linked
+ * with the application. Several forms of this library are provided with the
+ * SYS/BIOS product.
+ *
+ * Pick one:
+ * - BIOS.LibType_Custom
+ * Custom built library that is highly optimized for code footprint and
+ * runtime performance.
+ * - BIOS.LibType_Debug
+ * Custom built library that is non-optimized that can be used to
+ * single-step through APIs with a debugger.
+ *
+ */
+BIOS.libType = BIOS.LibType_Custom;
+//BIOS.libType = BIOS.LibType_Debug;
+
+/*
+ * Runtime instance creation enable flag.
+ *
+ * Pick one:
+ * - true (default)
+ * Allows Mod_create() and Mod_delete() to be called at runtime which
+ * requires a default heap for dynamic memory allocation.
+ * - false
+ * Reduces code footprint by disallowing Mod_create() and Mod_delete() to
+ * be called at runtime. Object instances are constructed via
+ * Mod_construct() and destructed via Mod_destruct().
+ *
+ * When using BIOS in ROM:
+ * This option must be set to true.
+ */
+BIOS.runtimeCreatesEnabled = true;
+//BIOS.runtimeCreatesEnabled = false;
+
+/*
+ * Enable logs in the BIOS library.
+ *
+ * Pick one:
+ * - true (default)
+ * Enables logs for debugging purposes.
+ * - false
+ * Disables logging for reduced code footprint and improved runtime
+ * performance.
+ *
+ * When using BIOS in ROM:
+ * This option must be set to false.
+ */
+//BIOS.logsEnabled = true;
+BIOS.logsEnabled = false;
+
+
+
+/* ================ Memory configuration ================ */
+var Memory = xdc.useModule('xdc.runtime.Memory');
+/*
+ * The Memory module itself simply provides a common interface for any
+ * variety of system and application specific memory management policies
+ * implemented by the IHeap modules(Ex. HeapMem, HeapBuf).
+ */
+
+
+
+/* ================ Program configuration ================ */
+/*
+ * Program.stack is ignored with IAR. Use the project options in
+ * IAR Embedded Workbench to alter the system stack size.
+ */
+if (!Program.build.target.$name.match(/iar/)) {
+ /*
+ * Reducing the system stack size (used by ISRs and Swis) to reduce
+ * RAM usage.
+ */
+ Program.stack = 768;
+}
+
+
+
+/*
+ * Uncomment to enable Semihosting for GNU targets to print to the CCS console.
+ * Please read the following TIRTOS Wiki page for more information on Semihosting:
+ * http://processors.wiki.ti.com/index.php/TI-RTOS_Examples_SemiHosting
+ */
+
+if (Program.build.target.$name.match(/gnu/)) {
+ //var SemiHost = xdc.useModule('ti.sysbios.rts.gnu.SemiHostSupport');
+}
+
+/* ================ ROM configuration ================ */
+/*
+ * To use BIOS in flash, comment out the code block below.
+ */
+var ROM = xdc.useModule('ti.sysbios.rom.ROM');
+if (Program.cpu.deviceName.match(/CC26/)) {
+ ROM.romName = ROM.CC2650;
+}
+else if (Program.cpu.deviceName.match(/CC13/)) {
+ ROM.romName = ROM.CC1350;
+}
+
+
+
+/* ================ Semaphore configuration ================ */
+var Semaphore = xdc.useModule('ti.sysbios.knl.Semaphore');
+/*
+ * Enables global support for Task priority pend queuing.
+ *
+ * Pick one:
+ * - true (default)
+ * This allows pending tasks to be serviced based on their task priority.
+ * - false
+ * Pending tasks are services based on first in, first out basis.
+ *
+ * When using BIOS in ROM:
+ * This option must be set to false.
+ */
+//Semaphore.supportsPriority = true;
+Semaphore.supportsPriority = false;
+
+/*
+ * Allows for the implicit posting of events through the semaphore,
+ * disable for additional code saving.
+ *
+ * Pick one:
+ * - true
+ * This allows the Semaphore module to post semaphores and events
+ * simultaneously.
+ * - false (default)
+ * Events must be explicitly posted to unblock tasks.
+ *
+ * When using BIOS in ROM:
+ * This option must be set to false.
+ */
+//Semaphore.supportsEvents = true;
+Semaphore.supportsEvents = false;
+
+
+
+/* ================ Swi configuration ================ */
+var Swi = xdc.useModule('ti.sysbios.knl.Swi');
+/*
+ * A software interrupt is an object that encapsulates a function to be
+ * executed and a priority. Software interrupts are prioritized, preempt tasks
+ * and are preempted by hardware interrupt service routines.
+ *
+ * This module is included to allow Swi's in a users' application.
+ */
+
+/*
+ * Reduce the number of swi priorities from the default of 16.
+ * Decreasing the number of swi priorities yields memory savings.
+ */
+Swi.numPriorities = 6;
+
+
+
+/* ================ System configuration ================ */
+var System = xdc.useModule('xdc.runtime.System');
+/*
+ * The Abort handler is called when the system exits abnormally.
+ *
+ * Pick one:
+ * - System.abortStd (default)
+ * Call the ANSI C Standard 'abort()' to terminate the application.
+ * - System.abortSpin
+ * A lightweight abort function that loops indefinitely in a while(1) trap
+ * function.
+ * - A custom abort handler
+ * A user-defined function. See the System module documentation for
+ * details.
+ */
+//System.abortFxn = System.abortStd;
+System.abortFxn = System.abortSpin;
+//System.abortFxn = "&myAbortSystem";
+
+/*
+ * The Exit handler is called when the system exits normally.
+ *
+ * Pick one:
+ * - System.exitStd (default)
+ * Call the ANSI C Standard 'exit()' to terminate the application.
+ * - System.exitSpin
+ * A lightweight exit function that loops indefinitely in a while(1) trap
+ * function.
+ * - A custom exit function
+ * A user-defined function. See the System module documentation for
+ * details.
+ */
+//System.exitFxn = System.exitStd;
+System.exitFxn = System.exitSpin;
+//System.exitFxn = "&myExitSystem";
+
+/*
+ * Minimize exit handler array in the System module. The System module includes
+ * an array of functions that are registered with System_atexit() which is
+ * called by System_exit(). The default value is 8.
+ */
+System.maxAtexitHandlers = 0;
+
+/*
+ * The System.SupportProxy defines a low-level implementation of System
+ * functions such as System_printf(), System_flush(), etc.
+ *
+ * Pick one pair:
+ * - SysMin
+ * This module maintains an internal configurable circular buffer that
+ * stores the output until System_flush() is called.
+ * The size of the circular buffer is set via SysMin.bufSize.
+ * - SysCallback
+ * SysCallback allows for user-defined implementations for System APIs.
+ * The SysCallback support proxy has a smaller code footprint and can be
+ * used to supply custom System_printf services.
+ * The default SysCallback functions point to stub functions. See the
+ * SysCallback module's documentation.
+ */
+//var SysMin = xdc.useModule('xdc.runtime.SysMin');
+//SysMin.bufSize = 128;
+//System.SupportProxy = SysMin;
+var SysCallback = xdc.useModule('xdc.runtime.SysCallback');
+System.SupportProxy = SysCallback;
+//SysCallback.abortFxn = "&myUserAbort";
+//SysCallback.exitFxn = "&myUserExit";
+//SysCallback.flushFxn = "&myUserFlush";
+//SysCallback.putchFxn = "&myUserPutch";
+SysCallback.putchFxn = "&uartPrintf_putch"; // BMH Modified
+//SysCallback.readyFxn = "&myUserReady";
+
+
+
+/* ================ Task configuration ================ */
+var Task = xdc.useModule('ti.sysbios.knl.Task');
+/*
+ * Check task stacks for overflow conditions.
+ *
+ * Pick one:
+ * - true (default)
+ * Enables runtime checks for task stack overflow conditions during
+ * context switching ("from" and "to")
+ * - false
+ * Disables runtime checks for task stack overflow conditions.
+ *
+ * When using BIOS in ROM:
+ * This option must be set to false.
+ */
+//Task.checkStackFlag = true;
+Task.checkStackFlag = false;
+
+/*
+ * Set the default task stack size when creating tasks.
+ *
+ * The default is dependent on the device being used. Reducing the default stack
+ * size yields greater memory savings.
+ */
+Task.defaultStackSize = 512;
+
+/*
+ * Enables the idle task.
+ *
+ * Pick one:
+ * - true (default)
+ * Creates a task with priority of 0 which calls idle hook functions. This
+ * option must be set to true to gain power savings provided by the Power
+ * module.
+ * - false
+ * No idle task is created. This option consumes less memory as no
+ * additional default task stack is needed.
+ * To gain power savings by the Power module without having the idle task,
+ * add Idle.run as the Task.allBlockedFunc.
+ */
+Task.enableIdleTask = true;
+//Task.enableIdleTask = false;
+//Task.allBlockedFunc = Idle.run;
+
+/*
+ * If Task.enableIdleTask is set to true, this option sets the idle task's
+ * stack size.
+ *
+ * Reducing the idle stack size yields greater memory savings.
+ */
+Task.idleTaskStackSize = 512;
+
+/*
+ * Reduce the number of task priorities.
+ * The default is 16.
+ * Decreasing the number of task priorities yield memory savings.
+ */
+Task.numPriorities = 4;
+
+
+
+/* ================ Text configuration ================ */
+var Text = xdc.useModule('xdc.runtime.Text');
+/*
+ * These strings are placed in the .const section. Setting this parameter to
+ * false will save space in the .const section. Error, Assert and Log messages
+ * will print raw ids and args instead of a formatted message.
+ *
+ * Pick one:
+ * - true (default)
+ * This option loads test string into the .const for easier debugging.
+ * - false
+ * This option reduces the .const footprint.
+ */
+//Text.isLoaded = true;
+Text.isLoaded = false;
+
+
+
+/* ================ Types configuration ================ */
+var Types = xdc.useModule('xdc.runtime.Types');
+/*
+ * This module defines basic constants and types used throughout the
+ * xdc.runtime package.
+ */
+
+
+
+/* ================ TI-RTOS middleware configuration ================ */
+var mwConfig = xdc.useModule('ti.mw.Config');
+/*
+ * Include TI-RTOS middleware libraries
+ */
+
+
+
+/* ================ TI-RTOS drivers' configuration ================ */
+var driversConfig = xdc.useModule('ti.drivers.Config');
+/*
+ * Include TI-RTOS drivers
+ *
+ * Pick one:
+ * - driversConfig.LibType_NonInstrumented (default)
+ * Use TI-RTOS drivers library optimized for footprint and performance
+ * without asserts or logs.
+ * - driversConfig.LibType_Instrumented
+ * Use TI-RTOS drivers library for debugging with asserts and logs enabled.
+ */
+driversConfig.libType = driversConfig.LibType_NonInstrumented;
+//driversConfig.libType = driversConfig.LibType_Instrumented;
+
+
+
+/* ================ Application Specific Instances ================ */
diff --git a/Basic-Test-Package/CC2650/Test_CC2650_3wSPI_Master_MSP432_SlaveIRQ/CC2650_I3M.cmd b/Basic-Test-Package/CC2650/Test_CC2650_3wSPI_Master_MSP432_SlaveIRQ/CC2650_I3M.cmd
--- /dev/null
@@ -0,0 +1,88 @@
+/*
+ * Copyright (c) 2015-2016, Texas Instruments Incorporated
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * * Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * * Neither the name of Texas Instruments Incorporated nor the names of
+ * its contributors may be used to endorse or promote products derived
+ * from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
+ * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+ * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+/*
+ * ======== CC2650_LAUNCHXL.cmd ========
+ * CC26x0F128 PG2 linker configuration file for Code Composer Studio
+ */
+
+/* Override default entry point. */
+--entry_point ResetISR
+/* Allow main() to take args */
+--args 0x8
+/* Suppress warnings and errors: */
+/* - 10063: Warning about entry point not being _c_int00 */
+/* - 16011, 16012: 8-byte alignment errors. Observed when linking in object */
+/* files compiled using Keil (ARM compiler) */
+--diag_suppress=10063,16011,16012
+
+/* The starting address of the application. Normally the interrupt vectors */
+/* must be located at the beginning of the application. */
+#define FLASH_BASE 0x0
+#define FLASH_SIZE 0x20000
+#define RAM_BASE 0x20000000
+#define RAM_SIZE 0x5000
+
+/* System memory map */
+
+MEMORY
+{
+ /* Application stored in and executes from internal flash */
+ FLASH (RX) : origin = FLASH_BASE, length = FLASH_SIZE
+ /* Application uses internal RAM for data */
+ SRAM (RWX) : origin = RAM_BASE, length = RAM_SIZE
+}
+
+/* Section allocation in memory */
+
+SECTIONS
+{
+ .text : > FLASH
+ .const : > FLASH
+ .constdata : > FLASH
+ .rodata : > FLASH
+ .cinit : > FLASH
+ .pinit : > FLASH
+ .init_array : > FLASH
+ .emb_text : > FLASH
+ .ccfg : > FLASH (HIGH)
+
+#ifdef __TI_COMPILER_VERSION__
+#if __TI_COMPILER_VERSION__ >= 15009000
+ .TI.ramfunc : {} load=FLASH, run=SRAM, table(BINIT)
+#endif
+#endif
+ .data : > SRAM
+ .bss : > SRAM
+ .sysmem : > SRAM
+ .stack : > SRAM (HIGH)
+ .nonretenvar : > SRAM
+}
diff --git a/Basic-Test-Package/CC2650/Test_CC2650_3wSPI_Master_MSP432_SlaveIRQ/CC2650_I3M.h b/Basic-Test-Package/CC2650/Test_CC2650_3wSPI_Master_MSP432_SlaveIRQ/CC2650_I3M.h
--- /dev/null
@@ -0,0 +1,324 @@
+/*
+ * Copyright (c) 2015-2016, Texas Instruments Incorporated
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * * Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * * Neither the name of Texas Instruments Incorporated nor the names of
+ * its contributors may be used to endorse or promote products derived
+ * from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
+ * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+ * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+/** ============================================================================
+ * @file CC2650_I3MOTE.h
+ *
+ * @brief CC2650 LaunchPad Board Specific header file.
+ *
+ * NB! This is the board file for CC2650 LaunchPad PCB version 1.1
+ *
+ * ============================================================================
+ */
+#ifndef __CC2650_I3MOTE_BOARD_H__
+#define __CC2650_I3MOTE_BOARD_H__
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/** ============================================================================
+ * Includes
+ * ==========================================================================*/
+#include <ti/drivers/PIN.h>
+#include <driverlib/ioc.h>
+
+/** ============================================================================
+ * Externs
+ * ==========================================================================*/
+extern const PIN_Config BoardGpioInitTable[];
+
+/** ============================================================================
+ * Defines
+ * ==========================================================================*/
+
+/* Same RF Configuration as 7x7 EM */
+#define CC2650EM_7ID
+#define CC2650_I3MOTE
+
+
+/* Sensors */
+#define Board_INA219_ADDR (0x41)
+#define Board_HDC1000_ADDR (0x43)
+#define Board_HDC1080_ADDR (0x40)
+#define Board_TMP007_ADDR (0x44)
+#define Board_OPT3001_ADDR (0x45)
+#define Board_MPU9250_ADDR (0x68)
+#define Board_BMP280_ADDR (0x77)
+
+
+/* Mapping of pins to board signals using general board aliases
+ * <board signal alias> <pin mapping>
+ */
+/* Discrete outputs */
+/* I2C */
+
+#define Board_I2C0_SDA0 IOID_23
+#define Board_I2C0_SCL0 IOID_24
+
+#define Board_LEDR IOID_5
+#define Board_LEDG IOID_6
+
+#define Board_LED_ON 1
+#define Board_LED_OFF 0
+
+/* Discrete inputs */
+#define Board_BTN1 IOID_4
+#define Board_BTN2 PIN_UNASSIGNED
+
+/* Debug UART */
+#define Board_UART_RX IOID_2 /* RXD */
+#define Board_UART_TX IOID_3 /* TXD */
+
+/* DAC8730 UART */
+//#define Board_UART_TX IOID_8 /* TCD to DAC*/
+//#define Board_UART_RX IOID_9 /* RXD from DAC */
+
+/* SPI Board */
+#define Board_SPI0_IRQ IOID_10
+#define Board_SPI0_MISO IOID_12
+#define Board_SPI0_MOSI IOID_13
+#define Board_SPI0_CLK IOID_14
+#define Board_SPI0_CSN IOID_15
+
+#define Board_SPI1_MISO IOID_18
+#define Board_SPI1_MOSI IOID_19
+#define Board_SPI1_CLK IOID_20
+#define Board_SPI1_CSN IOID_21
+#define Board_SPI1_IRQ IOID_22
+
+/* Power */
+//#define Board_DIO0 IOID_0 // VCCIO_DAC
+//#define Board_DIO1 IOID_1 // GPS_PWR_nEN
+//#define Board_DIO7 IOID_7 // EH_nBYPASS
+//#define Board_DIO25 IOID_25 // SSM_PWR_nEN
+//#define Board_DIO26 IOID_26 // GPS_PWR_nEN
+//#define Board_DIO27 IOID_27 // VBAT_OK
+//#define Board_DIO28 IOID_28 // SSM_5V_EN
+
+/* Misc */
+//#define Board_DIO11 IOID_11 // BSL
+//#define Board_DIO16 IOID_16 // JTAG_TDO
+//#define Board_DIO17 IOID_17 // JTAG_TDI
+
+
+
+/* Analog */
+#define Board_DIO23_ANALOG PIN_UNASSIGNED
+#define Board_DIO24_ANALOG PIN_UNASSIGNED
+#define Board_DIO25_ANALOG PIN_UNASSIGNED
+#define Board_DIO26_ANALOG PIN_UNASSIGNED
+#define Board_DIO27_ANALOG PIN_UNASSIGNED
+#define Board_DIO28_ANALOG PIN_UNASSIGNED
+#define Board_DIO29_ANALOG PIN_UNASSIGNED
+#define Board_DIO30_ANALOG PIN_UNASSIGNED
+
+
+/* PWM outputs */
+#define Board_PWMPIN0 PIN_UNASSIGNED
+#define Board_PWMPIN1 PIN_UNASSIGNED
+#define Board_PWMPIN2 PIN_UNASSIGNED
+#define Board_PWMPIN3 PIN_UNASSIGNED
+#define Board_PWMPIN4 PIN_UNASSIGNED
+#define Board_PWMPIN5 PIN_UNASSIGNED
+#define Board_PWMPIN6 PIN_UNASSIGNED
+#define Board_PWMPIN7 PIN_UNASSIGNED
+
+
+/** ============================================================================
+ * Instance identifiers
+ * ==========================================================================*/
+/* Generic I2C instance identifiers */
+#define Board_I2C CC2650_I3MOTE_I2C0
+/* Generic SPI instance identifiers */
+#define Board_SPI0 CC2650_I3MOTE_SPI0
+#define Board_SPI1 CC2650_I3MOTE_SPI1
+/* Generic UART instance identifiers */
+#define Board_UART CC2650_I3MOTE_UART0
+/* Generic Crypto instance identifiers */
+#define Board_CRYPTO CC2650_I3MOTE_CRYPTO0
+/* Generic GPTimer instance identifiers */
+#define Board_GPTIMER0A CC2650_I3MOTE_GPTIMER0A
+#define Board_GPTIMER0B CC2650_I3MOTE_GPTIMER0B
+#define Board_GPTIMER1A CC2650_I3MOTE_GPTIMER1A
+#define Board_GPTIMER1B CC2650_I3MOTE_GPTIMER1B
+#define Board_GPTIMER2A CC2650_I3MOTE_GPTIMER2A
+#define Board_GPTIMER2B CC2650_I3MOTE_GPTIMER2B
+#define Board_GPTIMER3A CC2650_I3MOTE_GPTIMER3A
+#define Board_GPTIMER3B CC2650_I3MOTE_GPTIMER3B
+/* Generic PWM instance identifiers */
+#define Board_PWM0 CC2650_I3MOTE_PWM0
+#define Board_PWM1 CC2650_I3MOTE_PWM1
+#define Board_PWM2 CC2650_I3MOTE_PWM2
+#define Board_PWM3 CC2650_I3MOTE_PWM3
+#define Board_PWM4 CC2650_I3MOTE_PWM4
+#define Board_PWM5 CC2650_I3MOTE_PWM5
+#define Board_PWM6 CC2650_I3MOTE_PWM6
+#define Board_PWM7 CC2650_I3MOTE_PWM7
+
+/** ============================================================================
+ * Number of peripherals and their names
+ * ==========================================================================*/
+
+/*!
+ * @def CC2650_I3MOTE_I2CName
+ * @brief Enum of I2C names on the CC2650 dev board
+ */
+typedef enum CC2650_I3MOTE_I2CName {
+ CC2650_I3MOTE_I2C0 = 0,
+
+ CC2650_I3MOTE_I2CCOUNT
+} CC2650_I3MOTE_I2CName;
+
+/*!
+ * @def CC2650_I3MOTE_CryptoName
+ * @brief Enum of Crypto names on the CC2650 dev board
+ */
+typedef enum CC2650_I3MOTE_CryptoName {
+ CC2650_I3MOTE_CRYPTO0 = 0,
+
+ CC2650_I3MOTE_CRYPTOCOUNT
+} CC2650_I3MOTE_CryptoName;
+
+
+/*!
+ * @def CC2650_I3MOTE_SPIName
+ * @brief Enum of SPI names on the CC2650 dev board
+ */
+typedef enum CC2650_I3MOTE_SPIName {
+ CC2650_I3MOTE_SPI0 = 0,
+ CC2650_I3MOTE_SPI1,
+
+ CC2650_I3MOTE_SPICOUNT
+} CC2650_I3MOTE_SPIName;
+
+/*!
+ * @def CC2650_I3MOTE_UARTName
+ * @brief Enum of UARTs on the CC2650 dev board
+ */
+typedef enum CC2650_I3MOTE_UARTName {
+ CC2650_I3MOTE_UART0 = 0,
+
+ CC2650_I3MOTE_UARTCOUNT
+} CC2650_I3MOTE_UARTName;
+
+/*!
+ * @def CC2650_I3MOTE_UdmaName
+ * @brief Enum of DMA buffers
+ */
+typedef enum CC2650_I3MOTE_UdmaName {
+ CC2650_I3MOTE_UDMA0 = 0,
+
+ CC2650_I3MOTE_UDMACOUNT
+} CC2650_I3MOTE_UdmaName;
+
+/*!
+ * @def CC2650_I3MOTE_GPTimerName
+ * @brief Enum of GPTimer parts
+ */
+typedef enum CC2650_I3MOTE_GPTimerName
+{
+ CC2650_I3MOTE_GPTIMER0A = 0,
+ CC2650_I3MOTE_GPTIMER0B,
+ CC2650_I3MOTE_GPTIMER1A,
+ CC2650_I3MOTE_GPTIMER1B,
+ CC2650_I3MOTE_GPTIMER2A,
+ CC2650_I3MOTE_GPTIMER2B,
+ CC2650_I3MOTE_GPTIMER3A,
+ CC2650_I3MOTE_GPTIMER3B,
+ CC2650_I3MOTE_GPTIMERPARTSCOUNT
+} CC2650_I3MOTE_GPTimerName;
+
+/*!
+ * @def CC2650_I3MOTE_GPTimers
+ * @brief Enum of GPTimers
+ */
+typedef enum CC2650_I3MOTE_GPTimers
+{
+ CC2650_I3MOTE_GPTIMER0 = 0,
+ CC2650_I3MOTE_GPTIMER1,
+ CC2650_I3MOTE_GPTIMER2,
+ CC2650_I3MOTE_GPTIMER3,
+ CC2650_I3MOTE_GPTIMERCOUNT
+} CC2650_I3MOTE_GPTimers;
+
+/*!
+ * @def CC2650_I3MOTE_PWM
+ * @brief Enum of PWM outputs on the board
+ */
+typedef enum CC2650_I3MOTE_PWM
+{
+ CC2650_I3MOTE_PWM0 = 0,
+ CC2650_I3MOTE_PWM1,
+ CC2650_I3MOTE_PWM2,
+ CC2650_I3MOTE_PWM3,
+ CC2650_I3MOTE_PWM4,
+ CC2650_I3MOTE_PWM5,
+ CC2650_I3MOTE_PWM6,
+ CC2650_I3MOTE_PWM7,
+ CC2650_I3MOTE_PWMCOUNT
+} CC2650_I3MOTE_PWM;
+
+/*!
+ * @def CC2650_I3MOTE_ADCBufName
+ * @brief Enum of ADCs
+ */
+typedef enum CC2650_I3MOTE_ADCBufName {
+ CC2650_I3MOTE_ADCBuf0 = 0,
+ CC2650_I3MOTE_ADCBufCOUNT
+} CC2650_I3MOTE_ADCBufName;
+
+
+/*!
+ * @def CC2650_I3MOTE_ADCName
+ * @brief Enum of ADCs
+ */
+typedef enum CC2650_I3MOTE_ADCName {
+ CC2650_I3MOTE_ADC0 = 0,
+ CC2650_I3MOTE_ADC1,
+ CC2650_I3MOTE_ADC2,
+ CC2650_I3MOTE_ADC3,
+ CC2650_I3MOTE_ADC4,
+ CC2650_I3MOTE_ADC5,
+ CC2650_I3MOTE_ADC6,
+ CC2650_I3MOTE_ADC7,
+ CC2650_I3MOTE_ADCDCOUPL,
+ CC2650_I3MOTE_ADCVSS,
+ CC2650_I3MOTE_ADCVDDS,
+ CC2650_I3MOTE_ADCCOUNT
+} CC2650_I3MOTE_ADCName;
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __CC2650_I3MOTE_BOARD_H__ */
diff --git a/Basic-Test-Package/CC2650/Test_CC2650_3wSPI_Master_MSP432_SlaveIRQ/ccfg.c b/Basic-Test-Package/CC2650/Test_CC2650_3wSPI_Master_MSP432_SlaveIRQ/ccfg.c
--- /dev/null
@@ -0,0 +1,56 @@
+/*
+ * Copyright (c) 2015, Texas Instruments Incorporated
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * * Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * * Neither the name of Texas Instruments Incorporated nor the names of
+ * its contributors may be used to endorse or promote products derived
+ * from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
+ * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+ * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/*
+ * ======== ccfg.c ========
+ * Customer Configuration for CC26xx and CC13xx devices. This file is used to
+ * configure Boot ROM, start-up code, and SW radio behaviour.
+ *
+ * By default, driverlib startup_files/ccfg.c settings are used. However, if
+ * changes are required there are two means to do so:
+ *
+ * 1. Remove this file and copy driverlib's startup_files/ccfg.c file in
+ * its place. Make all changes to the file. Changes made are local to
+ * the project and will not affect other projects.
+ *
+ * 2. Perform changes to driverlib startup_files/ccfg.c file. Changes
+ * made to this file will be applied to all projects. This file must
+ * remain unmodified.
+ */
+
+#define SET_CCFG_BL_CONFIG_BOOTLOADER_ENABLE 0xC5 // Enable ROM boot loader
+#define SET_CCFG_BL_CONFIG_BL_LEVEL 0x00 // Active low to open boot loader backdoor
+#define SET_CCFG_BL_CONFIG_BL_PIN_NUMBER 0x0B // DIO number for boot loader backdoor
+#define SET_CCFG_BL_CONFIG_BL_ENABLE 0xC5 // Enabled boot loader backdoor
+
+
+#include <startup_files/ccfg.c>
diff --git a/Basic-Test-Package/CC2650/Test_CC2650_3wSPI_Master_MSP432_SlaveIRQ/main.c b/Basic-Test-Package/CC2650/Test_CC2650_3wSPI_Master_MSP432_SlaveIRQ/main.c
--- /dev/null
@@ -0,0 +1,196 @@
+/*
+ * ======== empty_min.c ========
+ */
+/* XDCtools Header files */
+#include <xdc/std.h>
+#include <xdc/runtime/System.h>
+
+/* BIOS Header files */
+#include <ti/sysbios/BIOS.h>
+#include <ti/sysbios/knl/Task.h>
+#include <ti/sysbios/knl/Clock.h>
+#include <ti/sysbios/knl/Semaphore.h>
+
+/* TI-RTOS Header files */
+//#include <ti/drivers/I2C.h>
+#include <ti/drivers/PIN.h>
+#include <ti/drivers/SPI.h>
+#include <ti/drivers/UART.h>
+// #include <ti/drivers/Watchdog.h>
+
+/* Board Header files */
+#include "Board.h"
+#include "uart_printf.h"
+
+#define TASKSTACKSIZE 512
+
+Task_Struct task0Struct;
+Char task0Stack[TASKSTACKSIZE];
+
+Task_Struct task1Struct;
+Char task1Stack[TASKSTACKSIZE];
+
+Semaphore_Struct semStruct;
+Semaphore_Handle semHandle;
+
+
+/*
+ * Application LED pin configuration table:
+ * - All LEDs board LEDs are off.
+ */
+static PIN_Handle ledPinHandle;
+static PIN_State ledPinState;
+
+PIN_Config ledPinTable[] = {
+ Board_LED0 | PIN_GPIO_OUTPUT_EN | PIN_GPIO_LOW | PIN_PUSHPULL | PIN_DRVSTR_MAX,
+ Board_LED1 | PIN_GPIO_OUTPUT_EN | PIN_GPIO_LOW | PIN_PUSHPULL | PIN_DRVSTR_MAX,
+ PIN_TERMINATE
+};
+
+
+/* Global memory storage for a PIN_Config table */
+static PIN_Handle buttonPinHandle;
+static PIN_State buttonPinState;
+
+PIN_Config buttonPinTable[] = {
+ Board_BUTTON1 | PIN_INPUT_EN | PIN_PULLUP | PIN_IRQ_NEGEDGE,
+ PIN_TERMINATE
+};
+
+void buttonCallbackFxn(PIN_Handle handle, PIN_Id pinId) {
+
+ /* Wait IRQ from MSP432 line*/
+ PIN_setOutputValue(ledPinHandle, Board_LED1,1);
+ Semaphore_post(semHandle);
+ CPUdelay(8000*100);
+ PIN_setOutputValue(ledPinHandle, Board_LED1,0);
+
+}
+
+
+
+Void echoFxn(UArg arg0, UArg arg1)
+{
+ uint8_t i=0;
+ uint8_t txBufferPointer[4];
+ uint8_t rxBufferPointer[4];
+ SPI_Handle spi;
+ SPI_Params spiParams;
+ SPI_Transaction spiTransaction;
+
+
+ SPI_Params_init(&spiParams);
+ // Slave mode
+ spiParams.mode = SPI_MASTER;
+ spiParams.bitRate = 1000000;
+ spiParams.frameFormat = SPI_POL1_PHA1;
+
+ spi=SPI_open(Board_SPI1,&spiParams);
+ if(!spi){
+ System_printf("SPI did not open");
+ }
+ System_printf("SPI Init Done\r\n");
+
+ spiTransaction.rxBuf= rxBufferPointer;
+ spiTransaction.txBuf = txBufferPointer;
+ spiTransaction.count=1;
+
+ while(1) {
+
+ Semaphore_pend(semHandle, BIOS_WAIT_FOREVER);
+
+ txBufferPointer[0]=i++;
+ rxBufferPointer[0]=0;
+
+ if (SPI_transfer(spi,&spiTransaction)) {
+ System_printf("TxData: %x RxData: %x\r\n",txBufferPointer[0],rxBufferPointer[0]);
+ }
+ }
+
+ /* Deinitialized I2C */
+ SPI_close(spi);
+}
+
+
+/*
+ * ======== heartBeatFxn ========
+ * Toggle the Board_LED0. The Task_sleep is determined by arg0 which
+ * is configured for the heartBeat Task instance.
+ */
+Void heartBeatFxn(UArg arg0, UArg arg1)
+{
+ while (1) {
+ Task_sleep((UInt)arg0);
+ //PIN_setOutputValue(ledPinHandle, Board_LED0,!PIN_getOutputValue(Board_LED0));
+ //PIN_setOutputValue(ledPinHandle, Board_LED1,!PIN_getOutputValue(Board_LED1));
+ }
+}
+
+/*
+ * ======== main ========
+ */
+int main(void)
+{
+ Task_Params taskParams;
+ Semaphore_Params semParams;
+
+ /* Call board init functions */
+ Board_initGeneral();
+ Board_initSPI();
+ // Board_initI2C();
+ // Board_initUART();
+ // Board_initWatchdog();
+
+ /* UART */
+ /* Init UART for System_printf()*/
+ UART_Params uartParams;
+ UART_Params_init(&uartParams);
+ //uartParams.baudRate = 9600;
+ uartParams.baudRate = 115200;
+ UartPrintf_init(UART_open(Board_UART, &uartParams));
+ System_printf("Uart open\r\n");
+
+ /* Construct heartBeat Task thread */
+ Task_Params_init(&taskParams);
+ taskParams.arg0 = 500000 / Clock_tickPeriod;
+ taskParams.stackSize = TASKSTACKSIZE;
+ taskParams.stack = &task0Stack;
+ Task_construct(&task0Struct, (Task_FuncPtr)heartBeatFxn, &taskParams, NULL);
+
+ /* Construct SPI Echo Task thread */
+ Task_Params_init(&taskParams);
+ taskParams.arg0 = 1000000 / Clock_tickPeriod;
+ taskParams.stackSize = TASKSTACKSIZE;
+ taskParams.stack = &task1Stack;
+ Task_construct(&task1Struct, (Task_FuncPtr)echoFxn, &taskParams, NULL);
+
+ /* Construct Semaphore */
+ Semaphore_Params_init(&semParams);
+ Semaphore_construct(&semStruct, 1, &semParams);
+
+ /* Obtain instance handle */
+ semHandle = Semaphore_handle(&semStruct);
+
+ /* Setup callback for button pins */
+ buttonPinHandle = PIN_open(&buttonPinState, buttonPinTable);
+ if(!buttonPinHandle) {
+ System_abort("Error initializing button pins\n");
+ }
+ if (PIN_registerIntCb(buttonPinHandle, &buttonCallbackFxn) != 0) {
+ System_abort("Error registering button callback function");
+ }
+
+ /* Open LED pins */
+ ledPinHandle = PIN_open(&ledPinState, ledPinTable);
+ if(!ledPinHandle) {
+ System_abort("Error initializing board LED pins\n");
+ }
+
+ PIN_setOutputValue(ledPinHandle, Board_LED0, 0);
+ PIN_setOutputValue(ledPinHandle, Board_LED1, 0);
+
+ /* Start BIOS */
+ BIOS_start();
+
+ return (0);
+}
diff --git a/Basic-Test-Package/CC2650/Test_CC2650_3wSPI_Master_MSP432_SlaveIRQ/uart_printf.c b/Basic-Test-Package/CC2650/Test_CC2650_3wSPI_Master_MSP432_SlaveIRQ/uart_printf.c
--- /dev/null
@@ -0,0 +1,173 @@
+/**************************************************************************************************\r
+ Filename: uart_printf.c\r
+\r
+ Description: This file contains the TI-RTOS hooks for printing to UART via\r
+ System_printf(..).\r
+\r
+ This is a very basic implementation made for the purposes of\r
+ terminal feedback in workshops, trainings and debug.\r
+\r
+ Copyright 2015 Texas Instruments Incorporated. All rights reserved.\r
+\r
+ IMPORTANT: Your use of this Software is limited to those specific rights\r
+ granted under the terms of a software license agreement between the user\r
+ who downloaded the software, his/her employer (which must be your employer)\r
+ and Texas Instruments Incorporated (the "License"). You may not use this\r
+ Software unless you agree to abide by the terms of the License. The License\r
+ limits your use, and you acknowledge, that the Software may not be modified,\r
+ copied or distributed unless embedded on a Texas Instruments microcontroller\r
+ or used solely and exclusively in conjunction with a Texas Instruments radio\r
+ frequency transceiver, which is integrated into your product. Other than for\r
+ the foregoing purpose, you may not use, reproduce, copy, prepare derivative\r
+ works of, modify, distribute, perform, display or sell this Software and/or\r
+ its documentation for any purpose.\r
+\r
+ YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE\r
+ PROVIDED \93AS IS\94 WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED,\r
+ INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE,\r
+ NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL\r
+ TEXAS INSTRUMENTS OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT,\r
+ NEGLIGENCE, STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER\r
+ LEGAL EQUITABLE THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES\r
+ INCLUDING BUT NOT LIMITED TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE\r
+ OR CONSEQUENTIAL DAMAGES, LOST PROFITS OR LOST DATA, COST OF PROCUREMENT\r
+ OF SUBSTITUTE GOODS, TECHNOLOGY, SERVICES, OR ANY CLAIMS BY THIRD PARTIES\r
+ (INCLUDING BUT NOT LIMITED TO ANY DEFENSE THEREOF), OR OTHER SIMILAR COSTS.\r
+\r
+ Should you have any questions regarding your right to use this Software,\r
+ contact Texas Instruments Incorporated at www.TI.com.\r
+**************************************************************************************************/\r
+\r
+/*********************************************************************\r
+ * INCLUDES\r
+ */\r
+#include <Board.h>\r
+#include <ti/drivers/UART.h>\r
+#include <ti/drivers/uart/UARTCC26XX.h>\r
+#include <stdint.h>\r
+\r
+/*********************************************************************\r
+ * CONSTANTS\r
+ */\r
+#define UART_PRINTF_BUF_LEN 1024\r
+\r
+/*********************************************************************\r
+ * TYPEDEFS\r
+ */\r
+\r
+/*********************************************************************\r
+ * LOCAL VARIABLES\r
+ */\r
+static uint8_t uartPrintf_outArray[UART_PRINTF_BUF_LEN];\r
+static uint16_t uartPrintf_head = 0;\r
+static uint16_t uartPrintf_tail = 0;\r
+static UART_Handle hUart = NULL;\r
+\r
+\r
+/*********************************************************************\r
+ * PUBLIC FUNCTIONS\r
+ */\r
+\r
+/*********************************************************************\r
+ * @fn UartPrintf_init\r
+ *\r
+ * @brief Initializes the putchar hooks with the handle to the UART.\r
+ *\r
+ * @param handle - UART driver handle to an initialized and opened UART.\r
+ *\r
+ * @return None.\r
+ */\r
+void UartPrintf_init(UART_Handle handle)\r
+{\r
+ hUart = handle;\r
+}\r
+\r
+/*********************************************************************\r
+ * SYSTEM HOOK FUNCTIONS\r
+ */\r
+\r
+/*********************************************************************\r
+ * @fn uartPrintf_putch\r
+ *\r
+ * @brief User supplied PutChar function.\r
+ * typedef Void (*SysCallback_PutchFxn)(Char);\r
+ *\r
+ * This function is called whenever the System module needs\r
+ * to output a character.\r
+ *\r
+ * This implementation fills a very basic ring-buffer, and relies\r
+ * on another function to flush this buffer out to UART.\r
+ *\r
+ * Requires SysCallback to be the system provider module.\r
+ * Initialized via SysCallback.putchFxn = "&uartPrintf_putch"; in the\r
+ * TI-RTOS configuration script.\r
+ *\r
+ * @param ch - Character\r
+ *\r
+ * @return None.\r
+ *\r
+ * @post ::uartPrintf_head is incremented by one with wrap at UART_PRINTF_BUF_LEN\r
+ * if there is room.\r
+ */\r
+void uartPrintf_putch(char ch)\r
+{\r
+ // uartPrintf_tail should never catch up with uartPrintf_head. Discard in-between bytes.\r
+ if ( (uartPrintf_head + 1) % UART_PRINTF_BUF_LEN == uartPrintf_tail )\r
+ return;\r
+\r
+ uartPrintf_outArray[uartPrintf_head] = ch;\r
+ uartPrintf_head++;\r
+\r
+ if (uartPrintf_head >= UART_PRINTF_BUF_LEN)\r
+ uartPrintf_head = 0;\r
+}\r
+\r
+/*********************************************************************\r
+ * @fn uartPrintf_flush\r
+ *\r
+ * @brief Printf-buffer flush function\r
+ *\r
+ * In this implementation it is intended to be called by the\r
+ * Idle task when nothing else is running.\r
+ *\r
+ * This is achieved by setting up the Idle task in the TI-RTOS\r
+ * configuration script like so:\r
+ *\r
+ * var Idle = xdc.useModule('ti.sysbios.knl.Idle');\r
+ * Idle.addFunc('&uartPrintf_flush');\r
+ *\r
+ * @param None. Relies on global state.\r
+ *\r
+ * @return None.\r
+ *\r
+ * @post ::uartPrintf_tail is incremented to where uartPrintf_head\r
+ * was at the time the function was called.\r
+ */\r
+void uartPrintf_flush()\r
+{\r
+ // Abort in case UART hasn't been initialized.\r
+ if (NULL == hUart)\r
+ return;\r
+\r
+ // Lock head position to avoid race conditions\r
+ uint16_t curHead = uartPrintf_head;\r
+\r
+ // Find out how much data must be output, and how to output it.\r
+ bool needWrap = curHead < uartPrintf_tail;\r
+ uint16_t outLen = needWrap?(UART_PRINTF_BUF_LEN-uartPrintf_tail+curHead):(curHead-uartPrintf_tail);\r
+\r
+ if (outLen)\r
+ {\r
+ if (needWrap)\r
+ {\r
+ UART_write(hUart, &uartPrintf_outArray[uartPrintf_tail], UART_PRINTF_BUF_LEN - uartPrintf_tail);\r
+ UART_write(hUart, uartPrintf_outArray, curHead);\r
+ }\r
+ else\r
+ {\r
+ UART_write(hUart, &uartPrintf_outArray[uartPrintf_tail], outLen);\r
+ }\r
+ }\r
+\r
+ uartPrintf_tail = curHead;\r
+}\r
diff --git a/Basic-Test-Package/CC2650/Test_CC2650_3wSPI_Master_MSP432_SlaveIRQ/uart_printf.h b/Basic-Test-Package/CC2650/Test_CC2650_3wSPI_Master_MSP432_SlaveIRQ/uart_printf.h
--- /dev/null
@@ -0,0 +1,81 @@
+/**************************************************************************************************\r
+ Filename: uart_printf.c\r
+\r
+ Description: This file contains the TI-RTOS hooks for printing to UART via\r
+ System_printf(..).\r
+\r
+ This is a very basic implementation made for the purposes of\r
+ terminal feedback in workshops, trainings and debug.\r
+\r
+ Copyright 2015 Texas Instruments Incorporated. All rights reserved.\r
+\r
+ IMPORTANT: Your use of this Software is limited to those specific rights\r
+ granted under the terms of a software license agreement between the user\r
+ who downloaded the software, his/her employer (which must be your employer)\r
+ and Texas Instruments Incorporated (the "License"). You may not use this\r
+ Software unless you agree to abide by the terms of the License. The License\r
+ limits your use, and you acknowledge, that the Software may not be modified,\r
+ copied or distributed unless embedded on a Texas Instruments microcontroller\r
+ or used solely and exclusively in conjunction with a Texas Instruments radio\r
+ frequency transceiver, which is integrated into your product. Other than for\r
+ the foregoing purpose, you may not use, reproduce, copy, prepare derivative\r
+ works of, modify, distribute, perform, display or sell this Software and/or\r
+ its documentation for any purpose.\r
+\r
+ YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE\r
+ PROVIDED \93AS IS\94 WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED,\r
+ INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE,\r
+ NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL\r
+ TEXAS INSTRUMENTS OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT,\r
+ NEGLIGENCE, STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER\r
+ LEGAL EQUITABLE THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES\r
+ INCLUDING BUT NOT LIMITED TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE\r
+ OR CONSEQUENTIAL DAMAGES, LOST PROFITS OR LOST DATA, COST OF PROCUREMENT\r
+ OF SUBSTITUTE GOODS, TECHNOLOGY, SERVICES, OR ANY CLAIMS BY THIRD PARTIES\r
+ (INCLUDING BUT NOT LIMITED TO ANY DEFENSE THEREOF), OR OTHER SIMILAR COSTS.\r
+\r
+ Should you have any questions regarding your right to use this Software,\r
+ contact Texas Instruments Incorporated at www.TI.com.\r
+**************************************************************************************************/\r
+\r
+#ifndef UART_PRINTF_H\r
+#define UART_PRINTF_H\r
+\r
+#ifdef __cplusplus\r
+extern "C"\r
+{\r
+#endif\r
+/*********************************************************************\r
+ * INCLUDES\r
+ */\r
+#include <ti/drivers/UART.h>\r
+\r
+/*********************************************************************\r
+ * CONSTANTS\r
+ */\r
+\r
+/*********************************************************************\r
+ * TYPEDEFS\r
+ */\r
+\r
+/*********************************************************************\r
+ * PUBLIC FUNCTIONS\r
+ */\r
+\r
+/*********************************************************************\r
+ * @fn UartPrintf_init\r
+ *\r
+ * @brief Initializes the putchar hooks with the handle to the UART.\r
+ *\r
+ * @param handle - UART driver handle to an initialized and opened UART.\r
+ *\r
+ * @return None.\r
+ */\r
+void UartPrintf_init(UART_Handle handle);\r
+\r
+\r
+#ifdef __cplusplus\r
+}\r
+#endif\r
+\r
+#endif // UART_PRINTF_H\r