From 373dc57f03329746a4415f9b682e06c09eedd212 Mon Sep 17 00:00:00 2001 From: Borja Martinez Date: Sun, 11 Sep 2016 17:55:44 +0200 Subject: [PATCH] Created Test CC2650 3wSPI_Mastee MSP432_SlaveIRQ --- .../Board.h | 86 +++ .../CC2650_I3M.c | 640 ++++++++++++++++++ .../CC2650_I3M.cfg | 617 +++++++++++++++++ .../CC2650_I3M.cmd | 88 +++ .../CC2650_I3M.h | 324 +++++++++ .../ccfg.c | 56 ++ .../main.c | 196 ++++++ .../uart_printf.c | 173 +++++ .../uart_printf.h | 81 +++ 9 files changed, 2261 insertions(+) create mode 100644 Basic-Test-Package/CC2650/Test_CC2650_3wSPI_Master_MSP432_SlaveIRQ/Board.h create mode 100644 Basic-Test-Package/CC2650/Test_CC2650_3wSPI_Master_MSP432_SlaveIRQ/CC2650_I3M.c create mode 100644 Basic-Test-Package/CC2650/Test_CC2650_3wSPI_Master_MSP432_SlaveIRQ/CC2650_I3M.cfg create mode 100644 Basic-Test-Package/CC2650/Test_CC2650_3wSPI_Master_MSP432_SlaveIRQ/CC2650_I3M.cmd create mode 100644 Basic-Test-Package/CC2650/Test_CC2650_3wSPI_Master_MSP432_SlaveIRQ/CC2650_I3M.h create mode 100644 Basic-Test-Package/CC2650/Test_CC2650_3wSPI_Master_MSP432_SlaveIRQ/ccfg.c create mode 100644 Basic-Test-Package/CC2650/Test_CC2650_3wSPI_Master_MSP432_SlaveIRQ/main.c create mode 100644 Basic-Test-Package/CC2650/Test_CC2650_3wSPI_Master_MSP432_SlaveIRQ/uart_printf.c create mode 100644 Basic-Test-Package/CC2650/Test_CC2650_3wSPI_Master_MSP432_SlaveIRQ/uart_printf.h 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 new file mode 100644 index 0000000..cda3635 --- /dev/null +++ b/Basic-Test-Package/CC2650/Test_CC2650_3wSPI_Master_MSP432_SlaveIRQ/Board.h @@ -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 + +#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 new file mode 100644 index 0000000..f3e0087 --- /dev/null +++ b/Basic-Test-Package/CC2650/Test_CC2650_3wSPI_Master_MSP432_SlaveIRQ/CC2650_I3M.c @@ -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 +#include + +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include + +#include + +/* + * ========================= 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 +#include + +/* 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 + +/* 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 + +/* 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< + +/* 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 + +/* 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 + +/* 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 +#include + +/* 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 +#include + +/* 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 new file mode 100644 index 0000000..c4d7b01 --- /dev/null +++ b/Basic-Test-Package/CC2650/Test_CC2650_3wSPI_Master_MSP432_SlaveIRQ/CC2650_I3M.cfg @@ -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 new file mode 100644 index 0000000..c30c09f --- /dev/null +++ b/Basic-Test-Package/CC2650/Test_CC2650_3wSPI_Master_MSP432_SlaveIRQ/CC2650_I3M.cmd @@ -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 new file mode 100644 index 0000000..1ab67d2 --- /dev/null +++ b/Basic-Test-Package/CC2650/Test_CC2650_3wSPI_Master_MSP432_SlaveIRQ/CC2650_I3M.h @@ -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 +#include + +/** ============================================================================ + * 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 + * + */ +/* 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 new file mode 100644 index 0000000..a4b09ad --- /dev/null +++ b/Basic-Test-Package/CC2650/Test_CC2650_3wSPI_Master_MSP432_SlaveIRQ/ccfg.c @@ -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 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 new file mode 100644 index 0000000..2cfa0ca --- /dev/null +++ b/Basic-Test-Package/CC2650/Test_CC2650_3wSPI_Master_MSP432_SlaveIRQ/main.c @@ -0,0 +1,196 @@ +/* + * ======== empty_min.c ======== + */ +/* XDCtools Header files */ +#include +#include + +/* BIOS Header files */ +#include +#include +#include +#include + +/* TI-RTOS Header files */ +//#include +#include +#include +#include +// #include + +/* 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 new file mode 100644 index 0000000..140b3da --- /dev/null +++ b/Basic-Test-Package/CC2650/Test_CC2650_3wSPI_Master_MSP432_SlaveIRQ/uart_printf.c @@ -0,0 +1,173 @@ +/************************************************************************************************** + Filename: uart_printf.c + + Description: This file contains the TI-RTOS hooks for printing to UART via + System_printf(..). + + This is a very basic implementation made for the purposes of + terminal feedback in workshops, trainings and debug. + + Copyright 2015 Texas Instruments Incorporated. All rights reserved. + + IMPORTANT: Your use of this Software is limited to those specific rights + granted under the terms of a software license agreement between the user + who downloaded the software, his/her employer (which must be your employer) + and Texas Instruments Incorporated (the "License"). You may not use this + Software unless you agree to abide by the terms of the License. The License + limits your use, and you acknowledge, that the Software may not be modified, + copied or distributed unless embedded on a Texas Instruments microcontroller + or used solely and exclusively in conjunction with a Texas Instruments radio + frequency transceiver, which is integrated into your product. Other than for + the foregoing purpose, you may not use, reproduce, copy, prepare derivative + works of, modify, distribute, perform, display or sell this Software and/or + its documentation for any purpose. + + YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE + PROVIDED “AS IS” WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, + INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, + NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL + TEXAS INSTRUMENTS OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, + NEGLIGENCE, STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER + LEGAL EQUITABLE THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES + INCLUDING BUT NOT LIMITED TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE + OR CONSEQUENTIAL DAMAGES, LOST PROFITS OR LOST DATA, COST OF PROCUREMENT + OF SUBSTITUTE GOODS, TECHNOLOGY, SERVICES, OR ANY CLAIMS BY THIRD PARTIES + (INCLUDING BUT NOT LIMITED TO ANY DEFENSE THEREOF), OR OTHER SIMILAR COSTS. + + Should you have any questions regarding your right to use this Software, + contact Texas Instruments Incorporated at www.TI.com. +**************************************************************************************************/ + +/********************************************************************* + * INCLUDES + */ +#include +#include +#include +#include + +/********************************************************************* + * CONSTANTS + */ +#define UART_PRINTF_BUF_LEN 1024 + +/********************************************************************* + * TYPEDEFS + */ + +/********************************************************************* + * LOCAL VARIABLES + */ +static uint8_t uartPrintf_outArray[UART_PRINTF_BUF_LEN]; +static uint16_t uartPrintf_head = 0; +static uint16_t uartPrintf_tail = 0; +static UART_Handle hUart = NULL; + + +/********************************************************************* + * PUBLIC FUNCTIONS + */ + +/********************************************************************* + * @fn UartPrintf_init + * + * @brief Initializes the putchar hooks with the handle to the UART. + * + * @param handle - UART driver handle to an initialized and opened UART. + * + * @return None. + */ +void UartPrintf_init(UART_Handle handle) +{ + hUart = handle; +} + +/********************************************************************* + * SYSTEM HOOK FUNCTIONS + */ + +/********************************************************************* + * @fn uartPrintf_putch + * + * @brief User supplied PutChar function. + * typedef Void (*SysCallback_PutchFxn)(Char); + * + * This function is called whenever the System module needs + * to output a character. + * + * This implementation fills a very basic ring-buffer, and relies + * on another function to flush this buffer out to UART. + * + * Requires SysCallback to be the system provider module. + * Initialized via SysCallback.putchFxn = "&uartPrintf_putch"; in the + * TI-RTOS configuration script. + * + * @param ch - Character + * + * @return None. + * + * @post ::uartPrintf_head is incremented by one with wrap at UART_PRINTF_BUF_LEN + * if there is room. + */ +void uartPrintf_putch(char ch) +{ + // uartPrintf_tail should never catch up with uartPrintf_head. Discard in-between bytes. + if ( (uartPrintf_head + 1) % UART_PRINTF_BUF_LEN == uartPrintf_tail ) + return; + + uartPrintf_outArray[uartPrintf_head] = ch; + uartPrintf_head++; + + if (uartPrintf_head >= UART_PRINTF_BUF_LEN) + uartPrintf_head = 0; +} + +/********************************************************************* + * @fn uartPrintf_flush + * + * @brief Printf-buffer flush function + * + * In this implementation it is intended to be called by the + * Idle task when nothing else is running. + * + * This is achieved by setting up the Idle task in the TI-RTOS + * configuration script like so: + * + * var Idle = xdc.useModule('ti.sysbios.knl.Idle'); + * Idle.addFunc('&uartPrintf_flush'); + * + * @param None. Relies on global state. + * + * @return None. + * + * @post ::uartPrintf_tail is incremented to where uartPrintf_head + * was at the time the function was called. + */ +void uartPrintf_flush() +{ + // Abort in case UART hasn't been initialized. + if (NULL == hUart) + return; + + // Lock head position to avoid race conditions + uint16_t curHead = uartPrintf_head; + + // Find out how much data must be output, and how to output it. + bool needWrap = curHead < uartPrintf_tail; + uint16_t outLen = needWrap?(UART_PRINTF_BUF_LEN-uartPrintf_tail+curHead):(curHead-uartPrintf_tail); + + if (outLen) + { + if (needWrap) + { + UART_write(hUart, &uartPrintf_outArray[uartPrintf_tail], UART_PRINTF_BUF_LEN - uartPrintf_tail); + UART_write(hUart, uartPrintf_outArray, curHead); + } + else + { + UART_write(hUart, &uartPrintf_outArray[uartPrintf_tail], outLen); + } + } + + uartPrintf_tail = curHead; +} 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 new file mode 100644 index 0000000..84b82fe --- /dev/null +++ b/Basic-Test-Package/CC2650/Test_CC2650_3wSPI_Master_MSP432_SlaveIRQ/uart_printf.h @@ -0,0 +1,81 @@ +/************************************************************************************************** + Filename: uart_printf.c + + Description: This file contains the TI-RTOS hooks for printing to UART via + System_printf(..). + + This is a very basic implementation made for the purposes of + terminal feedback in workshops, trainings and debug. + + Copyright 2015 Texas Instruments Incorporated. All rights reserved. + + IMPORTANT: Your use of this Software is limited to those specific rights + granted under the terms of a software license agreement between the user + who downloaded the software, his/her employer (which must be your employer) + and Texas Instruments Incorporated (the "License"). You may not use this + Software unless you agree to abide by the terms of the License. The License + limits your use, and you acknowledge, that the Software may not be modified, + copied or distributed unless embedded on a Texas Instruments microcontroller + or used solely and exclusively in conjunction with a Texas Instruments radio + frequency transceiver, which is integrated into your product. Other than for + the foregoing purpose, you may not use, reproduce, copy, prepare derivative + works of, modify, distribute, perform, display or sell this Software and/or + its documentation for any purpose. + + YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE + PROVIDED “AS IS” WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, + INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, + NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL + TEXAS INSTRUMENTS OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, + NEGLIGENCE, STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER + LEGAL EQUITABLE THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES + INCLUDING BUT NOT LIMITED TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE + OR CONSEQUENTIAL DAMAGES, LOST PROFITS OR LOST DATA, COST OF PROCUREMENT + OF SUBSTITUTE GOODS, TECHNOLOGY, SERVICES, OR ANY CLAIMS BY THIRD PARTIES + (INCLUDING BUT NOT LIMITED TO ANY DEFENSE THEREOF), OR OTHER SIMILAR COSTS. + + Should you have any questions regarding your right to use this Software, + contact Texas Instruments Incorporated at www.TI.com. +**************************************************************************************************/ + +#ifndef UART_PRINTF_H +#define UART_PRINTF_H + +#ifdef __cplusplus +extern "C" +{ +#endif +/********************************************************************* + * INCLUDES + */ +#include + +/********************************************************************* + * CONSTANTS + */ + +/********************************************************************* + * TYPEDEFS + */ + +/********************************************************************* + * PUBLIC FUNCTIONS + */ + +/********************************************************************* + * @fn UartPrintf_init + * + * @brief Initializes the putchar hooks with the handle to the UART. + * + * @param handle - UART driver handle to an initialized and opened UART. + * + * @return None. + */ +void UartPrintf_init(UART_Handle handle); + + +#ifdef __cplusplus +} +#endif + +#endif // UART_PRINTF_H -- 2.26.2