Added Test Wake-Up master
authorBorja Martinez <borja.martinez@gmail.com>
Tue, 10 Jan 2017 06:17:59 +0000 (07:17 +0100)
committerBorja Martinez <borja.martinez@gmail.com>
Tue, 10 Jan 2017 06:17:59 +0000 (07:17 +0100)
16 files changed:
Basic-Test-Package/CC2650/Test_CC2650_WakeUp/Board.h [new file with mode: 0644]
Basic-Test-Package/CC2650/Test_CC2650_WakeUp/CC2650_I3M.cfg [new file with mode: 0644]
Basic-Test-Package/CC2650/Test_CC2650_WakeUp/CC2650_I3M.cmd [new file with mode: 0644]
Basic-Test-Package/CC2650/Test_CC2650_WakeUp/ccfg.c [new file with mode: 0644]
Basic-Test-Package/CC2650/Test_CC2650_WakeUp/main.c [new file with mode: 0644]
Basic-Test-Package/CC2650/Test_CC2650_WakeUp/uart_printf.c [new file with mode: 0644]
Basic-Test-Package/CC2650/Test_CC2650_WakeUp/uart_printf.h [new file with mode: 0644]
Basic-Test-Package/MSP432/Test_MSP432_ClockSystem/main.c
Basic-Test-Package/MSP432/Test_MSP432_WakeUp/Board.h [new file with mode: 0644]
Basic-Test-Package/MSP432/Test_MSP432_WakeUp/I3MSP432P401R.cmd [new file with mode: 0644]
Basic-Test-Package/MSP432/Test_MSP432_WakeUp/I3MSP432rtos.cfg [new file with mode: 0644]
Basic-Test-Package/MSP432/Test_MSP432_WakeUp/MSP432P401R_I3M.c [new file with mode: 0644]
Basic-Test-Package/MSP432/Test_MSP432_WakeUp/MSP432P401R_I3M.h [new file with mode: 0644]
Basic-Test-Package/MSP432/Test_MSP432_WakeUp/main.c [new file with mode: 0644]
Basic-Test-Package/MSP432/Test_MSP432_WakeUp/uart_printf.c [new file with mode: 0644]
Basic-Test-Package/MSP432/Test_MSP432_WakeUp/uart_printf.h [new file with mode: 0644]

diff --git a/Basic-Test-Package/CC2650/Test_CC2650_WakeUp/Board.h b/Basic-Test-Package/CC2650/Test_CC2650_WakeUp/Board.h
new file mode 100644 (file)
index 0000000..cf40d79
--- /dev/null
@@ -0,0 +1,57 @@
+/*
+ */
+
+#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_LED2              Board_LED0
+
+#define     Board_BUTTON0           Board_BTN1
+#define     Board_BUTTON1           Board_BTN2
+
+#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_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_WakeUp/CC2650_I3M.cfg b/Basic-Test-Package/CC2650/Test_CC2650_WakeUp/CC2650_I3M.cfg
new file mode 100644 (file)
index 0000000..79f4db1
--- /dev/null
@@ -0,0 +1,619 @@
+/*
+ * 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_WakeUp/CC2650_I3M.cmd b/Basic-Test-Package/CC2650/Test_CC2650_WakeUp/CC2650_I3M.cmd
new file mode 100644 (file)
index 0000000..c30c09f
--- /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_WakeUp/ccfg.c b/Basic-Test-Package/CC2650/Test_CC2650_WakeUp/ccfg.c
new file mode 100644 (file)
index 0000000..40b80b0
--- /dev/null
@@ -0,0 +1,57 @@
+/*
+ * 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_WakeUp/main.c b/Basic-Test-Package/CC2650/Test_CC2650_WakeUp/main.c
new file mode 100644 (file)
index 0000000..06bcf74
--- /dev/null
@@ -0,0 +1,159 @@
+/*
+ *  ======== empty_min.c ========
+ */
+/* XDCtools Header files */
+#include <xdc/std.h>
+#include <xdc/runtime/System.h>
+#include <xdc/runtime/Error.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>
+#include <ti/sysbios/knl/Event.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   (1024)
+
+Task_Struct task0Struct;
+Char task0Stack[TASKSTACKSIZE];
+
+/* Semaphore */
+Semaphore_Struct semStruct;
+Semaphore_Handle semHandle;
+
+
+/* Pin driver handle */
+static PIN_Handle ledPinHandle;
+static PIN_State ledPinState;
+
+/*
+ * Application LED pin configuration table:
+ *   - All LEDs board LEDs are off.
+ */
+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_BUTTON0  | PIN_INPUT_EN | PIN_PULLUP | PIN_IRQ_NEGEDGE,
+    //Board_BUTTON1  | PIN_INPUT_EN | PIN_PULLUP | PIN_IRQ_NEGEDGE,
+    PIN_TERMINATE
+};
+
+
+void buttonCallbackFxn(PIN_Handle handle, PIN_Id pinId) {
+
+       Semaphore_post(semHandle);
+       System_printf("***\r\n");
+       System_flush();
+
+}
+
+/*
+ *  ======== 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)
+{
+
+    //PIN_setOutputValue(ledPinHandle, Board_LED0,1);
+    //PIN_setOutputValue(ledPinHandle, Board_LED1,1);
+
+    Semaphore_pend(semHandle, BIOS_WAIT_FOREVER);
+
+       /* Start test */
+    //PIN_setOutputValue(ledPinHandle, Board_LED0,0);
+    //PIN_setOutputValue(ledPinHandle, Board_LED1,0);
+
+    while (1)
+    {
+        Task_sleep((UInt)arg0);
+        PIN_setOutputValue(ledPinHandle, Board_LED1,!PIN_getOutputValue(Board_LED1));
+        PIN_setOutputValue(ledPinHandle, Board_LED0,!PIN_getOutputValue(Board_LED0));
+    }
+
+}
+
+
+
+/*
+ *  ======== main ========
+ */
+
+
+int main(void)
+{
+    Task_Params taskParams;
+
+    Semaphore_Params semParams;
+
+    /* Call board init functions */
+    Board_initGeneral();
+    //Board_initI2C();
+    // Board_initSPI();
+    Board_initUART();
+    // Board_initWatchdog();
+
+
+    UART_Params uartParams;
+    UART_Params_init(&uartParams);
+    uartParams.baudRate = 115200;
+    //uartParams.readEcho = UART_ECHO_OFF;
+    UartPrintf_init(UART_open(Board_UART, &uartParams));
+
+    /* Construct heartBeat Task  thread */
+    Task_Params_init(&taskParams);
+    taskParams.arg0 = 100000 / Clock_tickPeriod;
+    taskParams.stackSize = TASKSTACKSIZE;
+    taskParams.stack = &task0Stack;
+    Task_construct(&task0Struct, (Task_FuncPtr)heartBeatFxn, &taskParams, NULL);
+
+
+    /* Construct Semaphore and Obtain instance handle */
+    Semaphore_Params_init(&semParams);
+    Semaphore_construct(&semStruct,0, &semParams);
+    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_WakeUp/uart_printf.c b/Basic-Test-Package/CC2650/Test_CC2650_WakeUp/uart_printf.c
new file mode 100644 (file)
index 0000000..89cc8b1
--- /dev/null
@@ -0,0 +1,188 @@
+/**************************************************************************************************\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 �AS IS� 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
+\r
+\r
+char uart_getch()\r
+{\r
+       char input;\r
+\r
+       if (NULL == hUart)\r
+               return 0;\r
+\r
+       // Blocking Read\r
+       UART_read(hUart,&input,1);\r
+       return input;\r
+}\r
+\r
+\r
diff --git a/Basic-Test-Package/CC2650/Test_CC2650_WakeUp/uart_printf.h b/Basic-Test-Package/CC2650/Test_CC2650_WakeUp/uart_printf.h
new file mode 100644 (file)
index 0000000..600ada4
--- /dev/null
@@ -0,0 +1,82 @@
+/**************************************************************************************************\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 �AS IS� 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
+char uart_getch();\r
+\r
+#ifdef __cplusplus\r
+}\r
+#endif\r
+\r
+#endif // UART_PRINTF_H\r
index d5f37318669da1511ab4b6e290bc77cd0eec9dc0..f9264a0d67d52931131002d157ba3eba7d283d93 100755 (executable)
@@ -156,7 +156,7 @@ int main(void)
     MAP_GPIO_setOutputHighOnPin(HID_PORT,LEDG|LEDR);
 
     /* Setting the external clock frequency. This API is optional */
-    CS_setExternalClockSourceFrequency(32768,12000000);
+    CS_setExternalClockSourceFrequency(32768,48000000);
 
     /* Starting HFXT in non-bypass mode without a timeout. Before we start
      * we have to change VCORE to 1 to support the 48MHz frequency */
diff --git a/Basic-Test-Package/MSP432/Test_MSP432_WakeUp/Board.h b/Basic-Test-Package/MSP432/Test_MSP432_WakeUp/Board.h
new file mode 100644 (file)
index 0000000..51f700a
--- /dev/null
@@ -0,0 +1,98 @@
+/*
+ *
+ *
+ */
+
+#ifndef __BOARD_H
+#define __BOARD_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include "MSP432P401R_I3M.h"
+
+#define Board_initADC               MSP_I3MSP432P401R_initADC
+#define Board_initGeneral           MSP_I3MSP432P401R_initGeneral
+#define Board_initGPIO              MSP_I3MSP432P401R_initGPIO
+#define Board_initI2C               MSP_I3MSP432P401R_initI2C
+#define Board_initPWM               MSP_I3MSP432P401R_initPWM
+#define Board_initSDSPI             MSP_I3MSP432P401R_initSDSPI
+#define Board_initSPI               MSP_I3MSP432P401R_initSPI
+#define Board_initUART              MSP_I3MSP432P401R_initUART
+#define Board_initWatchdog          MSP_I3MSP432P401R_initWatchdog
+#define Board_initWiFi              MSP_I3MSP432P401R_initWiFi
+
+#define Board_ADC0                  MSP_I3MSP432P401R_ADC0
+#define Board_ADC1                  MSP_I3MSP432P401R_ADC1
+
+#define Board_LED_ON                MSP_I3MSP432P401R_LED_ON
+#define Board_LED_OFF               MSP_I3MSP432P401R_LED_OFF
+
+#define Board_BUTTON0               MSP_I3MSP432P401R_S1
+#define Board_BUTTON1               MSP_I3MSP432P401R_S2
+#define Board_LED0                  MSP_I3MSP432P401R_LED_GREEN
+#define Board_LED1                  MSP_I3MSP432P401R_LED_RED
+
+
+#define Board_SPI0_CS               MSP_I3MSP432P401R_SPIB0_CS
+#define Board_SPI1_CS               MSP_I3MSP432P401R_SPIA1_CS
+#define Board_SPI2_CS               MSP_I3MSP432P401R_SPIA2_CS
+
+#define Board_SPI0_IRQ              MSP_I3MSP432P401R_SPIB0_IRQ
+#define Board_SPI1_IRQ              MSP_I3MSP432P401R_SPIA1_IRQ
+#define Board_SPI2_IRQ              MSP_I3MSP432P401R_SPIA2_IRQ
+
+
+
+/*
+ * MSP_I3MSP432P401R_LED_GREEN & MSP_I3MSP432P401R_LED_BLUE are used for
+ * PWM examples.  Uncomment the following lines if you would like to control
+ * the LEDs with the GPIO driver.
+ */
+
+
+#define Board_I2C0                  MSP_I3MSP432P401R_I2CB2
+
+//#define Board_PWM0                  MSP_I3MSP432P401R_PWM_TA1_1
+//#define Board_PWM1                  MSP_I3MSP432P401R_PWM_TA1_2
+
+//#define Board_SDSPI0                MSP_I3MSP432P401R_SDSPIB0
+
+#define Board_SPI0                  MSP_I3MSP432P401R_SPIB0
+#define Board_SPI1                  MSP_I3MSP432P401R_SPIA1
+#define Board_SPI2                  MSP_I3MSP432P401R_SPIA2
+
+#define Board_UART                  MSP_I3MSP432P401R_UARTA0
+//#define Board_UART0                 MSP_I3MSP432P401R_UARTA0
+//#define Board_UART1                 MSP_I3MSP432P401R_UARTA2
+
+#define Board_WATCHDOG0             MSP_I3MSP432P401R_WATCHDOG
+
+//#define Board_WIFI                  MSP_I3MSP432P401R_WIFI
+//#define Board_WIFI_SPI              MSP_I3MSP432P401R_SPIB0
+
+/* Board specific I2C addresses */
+
+#define EEPROM_SLAVE_ADDRESS (0x50)
+
+/* 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)
+#define Board_LISHH12_ADDR   (0x1E)
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __BOARD_H */
+
+
+
+
diff --git a/Basic-Test-Package/MSP432/Test_MSP432_WakeUp/I3MSP432P401R.cmd b/Basic-Test-Package/MSP432/Test_MSP432_WakeUp/I3MSP432P401R.cmd
new file mode 100644 (file)
index 0000000..b781143
--- /dev/null
@@ -0,0 +1,66 @@
+/*
+ * 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.
+ */
+/*
+ *  ======== MSP_EXP432P401R.cmd ========
+ *  Define the memory block start/length for the MSP_EXP432P401R M4
+ */
+
+MEMORY
+{
+    MAIN       (RX) : origin = 0x00000000, length = 0x00040000
+    INFO       (RX) : origin = 0x00200000, length = 0x00004000
+    SRAM_CODE  (RWX): origin = 0x01000000, length = 0x00010000
+    SRAM_DATA  (RW) : origin = 0x20000000, length = 0x00010000
+}
+
+/* Section allocation in memory */
+
+SECTIONS
+{
+    .text   :   > MAIN
+    .const  :   > MAIN
+    .cinit  :   > MAIN
+    .pinit  :   > MAIN
+
+#ifdef __TI_COMPILER_VERSION__
+#if __TI_COMPILER_VERSION__ >= 15009000
+    .TI.ramfunc : {} load=MAIN, run=SRAM_CODE, table(BINIT)
+#endif
+#endif
+    .data   :   > SRAM_DATA
+    .bss    :   > SRAM_DATA
+    .sysmem :   > SRAM_DATA
+    .stack  :   > SRAM_DATA (HIGH)
+}
+
+/* Symbolic definition of the WDTCTL register for RTS */
+WDTCTL_SYM = 0x4000480C;
diff --git a/Basic-Test-Package/MSP432/Test_MSP432_WakeUp/I3MSP432rtos.cfg b/Basic-Test-Package/MSP432/Test_MSP432_WakeUp/I3MSP432rtos.cfg
new file mode 100644 (file)
index 0000000..0b964d2
--- /dev/null
@@ -0,0 +1,545 @@
+/*
+ * 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.
+ */
+
+
+
+/* ================ Clock configuration ================ */
+var Clock = xdc.useModule('ti.sysbios.knl.Clock');
+/*
+ * Default value is family dependent. For example, Linux systems often only
+ * support a minimum period of 10000 us and multiples of 10000 us.
+ * TI platforms have a default of 1000 us.
+ */
+Clock.tickPeriod = 1000;
+
+
+
+/* ================ 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.
+ */
+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;
+
+
+
+/* ================ 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.
+ */
+BIOS.assertsEnabled = true;
+//BIOS.assertsEnabled = false;
+
+/*
+ * Specify default heap size for BIOS.
+ */
+BIOS.heapSize = 1024;
+
+/*
+ * 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().
+ */
+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.
+ */
+//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');
+}
+/* ================ 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.
+ *
+ */
+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.
+ */
+
+
+
+/* ================ 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 = 2;
+
+/*
+ * 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;
+// BMH 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.
+ */
+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 = 16;
+
+
+
+/* ================ 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 ================ */
\ No newline at end of file
diff --git a/Basic-Test-Package/MSP432/Test_MSP432_WakeUp/MSP432P401R_I3M.c b/Basic-Test-Package/MSP432/Test_MSP432_WakeUp/MSP432P401R_I3M.c
new file mode 100644 (file)
index 0000000..a01b299
--- /dev/null
@@ -0,0 +1,758 @@
+/*
+ * 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.
+ */
+
+/*
+ *  ======== MSP_I3MSP432P401R.c ========
+ *  This file is responsible for setting up the board specific items for the
+ *  MSP_I3MSP432P401R board.
+ */
+
+#include <stdbool.h>
+
+#include <ti/drivers/Power.h>
+#include <ti/drivers/power/PowerMSP432.h>
+
+#include <msp.h>
+#include <rom.h>
+#include <rom_map.h>
+#include <dma.h>
+#include <gpio.h>
+#include <i2c.h>
+#include <pmap.h>
+#include <spi.h>
+#include <timer_a.h>
+#include <uart.h>
+#include <wdt_a.h>
+#include <adc14.h>
+#include <ref_a.h>
+#include <interrupt.h>
+
+#include <MSP432P401R_I3M.h>
+
+/*
+ *  =============================== ADC ===============================
+ */
+#if defined(__TI_COMPILER_VERSION__)
+#pragma DATA_SECTION(ADC_config, ".const:ADC_config")
+#pragma DATA_SECTION(adcMSP432HWAttrs, ".const:adcMSP432HWAttrs")
+#endif
+
+#include <ti/drivers/ADC.h>
+#include <ti/drivers/adc/ADCMSP432.h>
+
+/* ADC objects */
+ADCMSP432_Object adcMSP432Objects[MSP_I3MSP432P401R_ADCCOUNT];
+
+/* ADC configuration structure */
+const ADCMSP432_HWAttrs adcMSP432HWAttrs[MSP_I3MSP432P401R_ADCCOUNT] = {
+    {
+        .channel = ADC_INPUT_A0,
+        .gpioPort = GPIO_PORT_P5,
+        .gpioPin = GPIO_PIN5,
+        .gpioMode = GPIO_TERTIARY_MODULE_FUNCTION,
+        .refVoltage = REF_A_VREF2_5V,
+        .resolution = ADC_14BIT
+    },
+    {
+        .channel = ADC_INPUT_A1,
+        .gpioPort = GPIO_PORT_P5,
+        .gpioPin = GPIO_PIN4,
+        .gpioMode = GPIO_TERTIARY_MODULE_FUNCTION,
+        .refVoltage = REF_A_VREF1_45V,
+        .resolution = ADC_8BIT
+    }
+};
+
+const ADC_Config ADC_config[] = {
+    {
+        .fxnTablePtr = &ADCMSP432_fxnTable,
+        .object = &adcMSP432Objects[0],
+        .hwAttrs = &adcMSP432HWAttrs[0]
+    },
+    {
+        .fxnTablePtr = &ADCMSP432_fxnTable,
+        .object = &adcMSP432Objects[1],
+        .hwAttrs = &adcMSP432HWAttrs[1]
+    },
+    {NULL, NULL, NULL}
+};
+
+void MSP_I3MSP432P401R_initADC(void)
+{
+    ADC_init();
+}
+
+/*
+ *  =============================== DMA ===============================
+ */
+
+#include <ti/drivers/dma/UDMAMSP432.h>
+
+
+#if defined(__TI_COMPILER_VERSION__)
+#pragma DATA_ALIGN(dmaControlTable, 256)
+#elif defined(__IAR_SYSTEMS_ICC__)
+#pragma data_alignment=256
+#elif defined(__GNUC__)
+__attribute__ ((aligned (256)))
+#endif
+static DMA_ControlTable dmaControlTable[8];
+
+/*
+ *  ======== dmaErrorHwi ========
+ *  This is the handler for the uDMA error interrupt.
+ */
+static void dmaErrorHwi(uintptr_t arg)
+{
+    int status = MAP_DMA_getErrorStatus();
+    MAP_DMA_clearErrorStatus();
+
+    /* Suppress unused variable warning */
+    (void)status;
+
+    while (1);
+}
+
+UDMAMSP432_Object udmaMSP432Object;
+
+const UDMAMSP432_HWAttrs udmaMSP432HWAttrs = {
+    .controlBaseAddr = (void *)dmaControlTable,
+    .dmaErrorFxn = (UDMAMSP432_ErrorFxn)dmaErrorHwi,
+    .intNum = INT_DMA_ERR,
+    .intPriority = (~0)
+};
+
+const UDMAMSP432_Config UDMAMSP432_config = {
+    .object = &udmaMSP432Object,
+    .hwAttrs = &udmaMSP432HWAttrs
+};
+
+/*
+ *  ======== MSP_I3MSP432P401R_initGeneral ========
+ */
+void MSP_I3MSP432P401R_initGeneral(void)
+{
+    Power_init();
+}
+
+/*
+ *  =============================== GPIO ===============================
+ */
+/* Place into subsections to allow the TI linker to remove items properly */
+#if defined(__TI_COMPILER_VERSION__)
+#pragma DATA_SECTION(GPIOMSP432_config, ".const:GPIOMSP432_config")
+#endif
+
+#include <ti/drivers/GPIO.h>
+#include <ti/drivers/gpio/GPIOMSP432.h>
+
+/*
+ * Array of Pin configurations
+ * NOTE: The order of the pin configurations must coincide with what was
+ *       defined in MSP_I3MSP432P401R.h
+ * NOTE: Pins not used for interrupts should be placed at the end of the
+ *       array.  Callback entries can be omitted from callbacks array to
+ *       reduce memory usage.
+ */
+GPIO_PinConfig gpioPinConfigs[] = {
+    /* Input pins */
+    /* MSP_I3MSP432P401R_S1 */
+       GPIOMSP432_P6_1 | GPIO_CFG_IN_PU | GPIO_CFG_IN_INT_RISING,
+
+    /* Output pins */
+       /* MSP_I3MSP432P401R_SPI1_IRQ */
+       GPIOMSP432_P4_0 | GPIO_CFG_OUT_STD | GPIO_CFG_OUT_STR_HIGH | GPIO_CFG_OUT_LOW,
+
+       /* MSP_I3MSP432P401R_SPI1_CS */
+    GPIOMSP432_P2_0 | GPIO_CFG_OUT_STD | GPIO_CFG_OUT_STR_HIGH | GPIO_CFG_OUT_LOW,
+
+       /* MSP_I3MSP432P401R_SPI2_CS */
+       GPIOMSP432_P3_0 | GPIO_CFG_OUT_STD | GPIO_CFG_OUT_STR_HIGH | GPIO_CFG_OUT_LOW,
+
+    /*
+     * MSP_I3MSP432P401R_LED_GREEN & MSP_I3MSP432P401R_LED_BLUE are used for
+     * PWM examples.  Uncomment the following lines if you would like to control
+     * the LEDs with the GPIO driver.
+     */
+    /* MSP_I3MSP432P401R_LED_GREEN */
+    GPIOMSP432_P6_2 | GPIO_CFG_OUT_STD | GPIO_CFG_OUT_STR_HIGH | GPIO_CFG_OUT_LOW,
+
+    /* MSP_I3MSP432P401R_LED_RED */
+       GPIOMSP432_P6_3 | GPIO_CFG_OUT_STD | GPIO_CFG_OUT_STR_HIGH | GPIO_CFG_OUT_LOW
+
+};
+
+/*
+ * Array of callback function pointers
+ * NOTE: The order of the pin configurations must coincide with what was
+ *       defined in MSP_I3MSP432P401R.h
+ * NOTE: Pins not used for interrupts can be omitted from callbacks array to
+ *       reduce memory usage (if placed at end of gpioPinConfigs array).
+ */
+GPIO_CallbackFxn gpioCallbackFunctions[] = {
+    /* MSP_I3MSP432P401R_S1 */
+    NULL,
+    /* MSP_I3MSP432P401R_S2 */
+    NULL
+};
+
+const GPIOMSP432_Config GPIOMSP432_config = {
+    .pinConfigs = (GPIO_PinConfig *)gpioPinConfigs,
+    .callbacks = (GPIO_CallbackFxn *)gpioCallbackFunctions,
+    .numberOfPinConfigs = sizeof(gpioPinConfigs)/sizeof(GPIO_PinConfig),
+    .numberOfCallbacks = sizeof(gpioCallbackFunctions)/sizeof(GPIO_CallbackFxn),
+    .intPriority = (~0)
+};
+
+/*
+ *  ======== MSP_I3MSP432P401R_initGPIO ========
+ */
+void MSP_I3MSP432P401R_initGPIO(void)
+{
+    /* Initialize peripheral and pins */
+    GPIO_init();
+}
+
+/*
+ *  =============================== I2C ===============================
+ */
+/* 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(i2cMSP432HWAttrs, ".const:i2cMSP432HWAttrs")
+#endif
+
+#include <ti/drivers/I2C.h>
+#include <ti/drivers/i2c/I2CMSP432.h>
+
+I2CMSP432_Object i2cMSP432Objects[MSP_I3MSP432P401R_I2CCOUNT];
+
+const I2CMSP432_HWAttrs i2cMSP432HWAttrs[MSP_I3MSP432P401R_I2CCOUNT] = {
+    {
+        .baseAddr = EUSCI_B2_BASE,
+        .intNum = INT_EUSCIB2,
+        .intPriority = (~0),
+        .clockSource = EUSCI_B_I2C_CLOCKSOURCE_SMCLK
+    }
+};
+
+const I2C_Config I2C_config[] = {
+    {
+        .fxnTablePtr = &I2CMSP432_fxnTable,
+        .object = &i2cMSP432Objects[0],
+        .hwAttrs = &i2cMSP432HWAttrs[0]
+    },
+    {NULL, NULL, NULL}
+};
+
+/*
+ *  ======== MSP_I3MSP432P401R_initI2C ========
+ */
+void MSP_I3MSP432P401R_initI2C(void)
+{
+    /*
+     * NOTE: TI-RTOS examples configure EUSCIB0 as either SPI or I2C.  Thus,
+     * a conflict occurs when the I2C & SPI drivers are used simultaneously in
+     * an application.  Modify the pin mux settings in this file and resolve the
+     * conflict before running your the application.
+     */
+    /* Configure Pins 1.6 & 1.7 as SDA & SCL, respectively. */
+    // BMH MAP_GPIO_setAsPeripheralModuleFunctionInputPin(GPIO_PORT_P1,
+       // BMH    GPIO_PIN6 | GPIO_PIN7, GPIO_PRIMARY_MODULE_FUNCTION);
+
+       MAP_GPIO_setAsPeripheralModuleFunctionInputPin(GPIO_PORT_P3,
+               GPIO_PIN6 | GPIO_PIN7, GPIO_PRIMARY_MODULE_FUNCTION);
+
+
+    /* Initialize the I2C driver */
+    I2C_init();
+}
+
+/*
+ *  =============================== Power ===============================
+ */
+const PowerMSP432_ConfigV1 PowerMSP432_config = {
+    .policyInitFxn = &PowerMSP432_initPolicy,
+    .policyFxn = &PowerMSP432_sleepPolicy,
+    .initialPerfLevel = 2,
+    .enablePolicy = true,
+    .enablePerf = true,
+    .enableParking = true
+};
+
+/*
+ *  =============================== PWM ===============================
+ */
+/* 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(pwmTimerMSP432HWAttrs, ".const:pwmTimerMSP432HWAttrs")
+#endif
+
+#include <ti/drivers/PWM.h>
+#include <ti/drivers/pwm/PWMTimerMSP432.h>
+
+PWMTimerMSP432_Object pwmTimerMSP432Objects[MSP_I3MSP432P401R_PWMCOUNT];
+
+const PWMTimerMSP432_HWAttrsV1 pwmTimerMSP432HWAttrs[MSP_I3MSP432P401R_PWMCOUNT] = {
+    {
+        .timerBaseAddr = TIMER_A1_BASE,
+        .clockSource = TIMER_A_CLOCKSOURCE_SMCLK,
+        .compareRegister = TIMER_A_CAPTURECOMPARE_REGISTER_1,
+        .gpioPort = GPIO_PORT_P2,
+        .gpioPinIndex = GPIO_PIN1,
+        .pwmMode = GPIO_PRIMARY_MODULE_FUNCTION
+    },
+    {
+        .timerBaseAddr = TIMER_A1_BASE,
+        .clockSource = TIMER_A_CLOCKSOURCE_SMCLK,
+        .compareRegister = TIMER_A_CAPTURECOMPARE_REGISTER_2,
+        .gpioPort = GPIO_PORT_P2,
+        .gpioPinIndex = GPIO_PIN2,
+        .pwmMode = GPIO_PRIMARY_MODULE_FUNCTION
+    }
+};
+
+const PWM_Config PWM_config[] = {
+    {
+        .fxnTablePtr = &PWMTimerMSP432_fxnTable,
+        .object = &pwmTimerMSP432Objects[0],
+        .hwAttrs = &pwmTimerMSP432HWAttrs[0]
+    },
+    {
+        .fxnTablePtr = &PWMTimerMSP432_fxnTable,
+        .object = &pwmTimerMSP432Objects[1],
+        .hwAttrs = &pwmTimerMSP432HWAttrs[1]
+    },
+    {NULL, NULL, NULL}
+};
+
+/*
+ *  ======== MSP_I3MSP432P401R_initPWM ========
+ */
+void MSP_I3MSP432P401R_initPWM(void)
+{
+    /* Use Port Map on Port2 get Timer outputs on pins with LEDs (2.1, 2.2) */
+    const uint8_t portMap [] = {
+        PM_NONE, PM_TA1CCR1A, PM_TA1CCR2A, PM_NONE,
+        PM_NONE, PM_NONE,     PM_NONE,     PM_NONE
+    };
+
+    /* Mapping capture compare registers to Port 2 */
+    MAP_PMAP_configurePorts((const uint8_t *) portMap, PMAP_P2MAP, 1,
+        PMAP_DISABLE_RECONFIGURATION);
+
+    PWM_init();
+}
+
+/*
+ *  =============================== SDSPI ===============================
+ */
+/* Place into subsections to allow the TI linker to remove items properly */
+#if 0
+       #if defined(__TI_COMPILER_VERSION__)
+       #pragma DATA_SECTION(SDSPI_config, ".const:SDSPI_config")
+       #pragma DATA_SECTION(sdspiMSP432HWAttrs, ".const:sdspiMSP432HWAttrs")
+       #endif
+
+       #include <ti/drivers/SDSPI.h>
+       #include <ti/drivers/sdspi/SDSPIMSP432.h>
+
+       SDSPIMSP432_Object sdspiMSP432Objects[MSP_I3MSP432P401R_SDSPICOUNT];
+
+       const SDSPIMSP432_HWAttrs sdspiMSP432HWAttrs[MSP_I3MSP432P401R_SDSPICOUNT] = {
+               {
+                       .baseAddr = EUSCI_B0_BASE,
+                       .clockSource = EUSCI_B_SPI_CLOCKSOURCE_SMCLK,
+
+                       /* CLK, MOSI & MISO ports & pins */
+                       .portSCK = GPIO_PORT_P1,
+                       .pinSCK = GPIO_PIN5,
+                       .sckMode = GPIO_PRIMARY_MODULE_FUNCTION,
+
+                       .portMISO = GPIO_PORT_P1,
+                       .pinMISO = GPIO_PIN7,
+                       .misoMode = GPIO_PRIMARY_MODULE_FUNCTION,
+
+                       .portMOSI = GPIO_PORT_P1,
+                       .pinMOSI = GPIO_PIN6,
+                       .mosiMode = GPIO_PRIMARY_MODULE_FUNCTION,
+
+                       /* Chip select port & pin */
+                       .portCS = GPIO_PORT_P4,
+                       .pinCS = GPIO_PIN6
+               }
+       };
+
+       const SDSPI_Config SDSPI_config[] = {
+               {
+                       .fxnTablePtr = &SDSPIMSP432_fxnTable,
+                       .object = &sdspiMSP432Objects[0],
+                       .hwAttrs = &sdspiMSP432HWAttrs[0]
+               },
+               {NULL, NULL, NULL}
+       };
+#endif
+
+/*
+ *  ======== MSP_I3MSP432P401R_initSDSPI ========
+ */
+#if 0
+
+       void MSP_I3MSP432P401R_initSDSPI(void)
+       {
+               SDSPI_init();
+       }
+
+#endif
+
+/*
+ *  =============================== SPI ===============================
+ */
+/* 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(spiMSP432DMAHWAttrs, ".const:spiMSP432DMAHWAttrs")
+#endif
+
+#include <ti/drivers/SPI.h>
+#include <ti/drivers/spi/SPIMSP432DMA.h>
+
+SPIMSP432DMA_Object spiMSP432DMAObjects[MSP_I3MSP432P401R_SPICOUNT];
+
+const SPIMSP432DMA_HWAttrs spiMSP432DMAHWAttrs[MSP_I3MSP432P401R_SPICOUNT] = {
+               {
+                       .baseAddr = EUSCI_B0_BASE,
+                       .bitOrder = EUSCI_B_SPI_MSB_FIRST,
+                       .clockSource = EUSCI_B_SPI_CLOCKSOURCE_SMCLK,
+
+                       .defaultTxBufValue = 0,
+
+                       .dmaIntNum = INT_DMA_INT0,
+                       .intPriority = (~0),
+                       .rxDMAChannelIndex = DMA_CH1_EUSCIB0RX0,
+                       .txDMAChannelIndex = DMA_CH0_EUSCIB0TX0
+               },
+       {
+               .baseAddr = EUSCI_A1_BASE,
+               .bitOrder = EUSCI_A_SPI_MSB_FIRST,
+               .clockSource = EUSCI_A_SPI_CLOCKSOURCE_SMCLK,
+
+               .defaultTxBufValue = 0,
+
+               .dmaIntNum = INT_DMA_INT1,
+               .intPriority = (~0),
+               .rxDMAChannelIndex = DMA_CH3_EUSCIA1RX,
+               .txDMAChannelIndex = DMA_CH2_EUSCIA1TX
+       },
+    {
+        .baseAddr = EUSCI_A2_BASE,
+        .bitOrder = EUSCI_A_SPI_MSB_FIRST,
+        .clockSource = EUSCI_A_SPI_CLOCKSOURCE_SMCLK,
+
+        .defaultTxBufValue = 0,
+
+        .dmaIntNum = INT_DMA_INT2,
+        .intPriority = (~0),
+        .rxDMAChannelIndex = DMA_CH5_EUSCIA2RX,
+        .txDMAChannelIndex = DMA_CH4_EUSCIA2TX
+    }
+
+};
+
+const SPI_Config SPI_config[] = {
+    {
+        .fxnTablePtr = &SPIMSP432DMA_fxnTable,
+        .object = &spiMSP432DMAObjects[0],
+        .hwAttrs = &spiMSP432DMAHWAttrs[0]
+    },
+    {
+        .fxnTablePtr = &SPIMSP432DMA_fxnTable,
+        .object = &spiMSP432DMAObjects[1],
+        .hwAttrs = &spiMSP432DMAHWAttrs[1]
+    },
+
+    {
+        .fxnTablePtr = &SPIMSP432DMA_fxnTable,
+        .object = &spiMSP432DMAObjects[2],
+        .hwAttrs = &spiMSP432DMAHWAttrs[2]
+    },
+    {NULL, NULL, NULL},
+};
+
+/*
+ *  ======== MSP_I3MSP432P401R_initSPI ========
+ */
+void MSP_I3MSP432P401R_initSPI(void)
+{
+    /*
+     * NOTE: TI-RTOS examples configure EUSCIB0 as either SPI or I2C.  Thus,
+     * a conflict occurs when the I2C & SPI drivers are used simultaneously in
+     * an application.  Modify the pin mux settings in this file and resolve the
+     * conflict before running your the application.
+     */
+
+    /* Configure CLK, MOSI & MISO for SPI0 (EUSCI_B0) */
+    MAP_GPIO_setAsPeripheralModuleFunctionOutputPin(GPIO_PORT_P1,
+        GPIO_PIN5 | GPIO_PIN6, GPIO_PRIMARY_MODULE_FUNCTION);
+    MAP_GPIO_setAsPeripheralModuleFunctionInputPin(GPIO_PORT_P1, GPIO_PIN7,
+        GPIO_PRIMARY_MODULE_FUNCTION);
+
+
+/* Configure CLK, MOSI & MISO for SPI0 (EUSCI_A1)*/
+#if 0
+    #warning SPI_SLAVE_MODE
+       MAP_GPIO_setAsPeripheralModuleFunctionInputPin(GPIO_PORT_P2,
+               GPIO_PIN0 | GPIO_PIN1 | GPIO_PIN3, GPIO_PRIMARY_MODULE_FUNCTION);
+       MAP_GPIO_setAsPeripheralModuleFunctionOutputPin(GPIO_PORT_P2, GPIO_PIN2,
+               GPIO_PRIMARY_MODULE_FUNCTION);
+#endif
+
+#if 1
+       #warning SPI_MASTER_MODE
+       MAP_GPIO_setAsPeripheralModuleFunctionOutputPin(GPIO_PORT_P2,
+               GPIO_PIN1 | GPIO_PIN3, GPIO_PRIMARY_MODULE_FUNCTION);
+       MAP_GPIO_setAsPeripheralModuleFunctionInputPin(GPIO_PORT_P2, GPIO_PIN2,
+               GPIO_PRIMARY_MODULE_FUNCTION);
+#endif
+
+    /* Configure CLK, MOSI & MISO for SPI0 (EUSCI_A2) */
+    MAP_GPIO_setAsPeripheralModuleFunctionOutputPin(GPIO_PORT_P3,
+        GPIO_PIN1 | GPIO_PIN3, GPIO_PRIMARY_MODULE_FUNCTION);
+    MAP_GPIO_setAsPeripheralModuleFunctionInputPin(GPIO_PORT_P3, GPIO_PIN2,
+        GPIO_PRIMARY_MODULE_FUNCTION);
+
+    SPI_init();
+}
+
+/*
+ *  =============================== UART ===============================
+ */
+/* 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(uartMSP432HWAttrs, ".const:uartMSP432HWAttrs")
+#endif
+
+#include <ti/drivers/UART.h>
+#include <ti/drivers/uart/UARTMSP432.h>
+
+UARTMSP432_Object uartMSP432Objects[MSP_I3MSP432P401R_UARTCOUNT];
+unsigned char uartMSP432RingBuffer[MSP_I3MSP432P401R_UARTCOUNT][32];
+
+/*
+ * The baudrate dividers were determined by using the MSP430 baudrate
+ * calculator
+ * http://software-dl.ti.com/msp430/msp430_public_sw/mcu/msp430/MSP430BaudRateConverter/index.html
+ */
+const UARTMSP432_BaudrateConfig uartMSP432Baudrates[] = {
+    /* {baudrate, input clock, prescalar, UCBRFx, UCBRSx, oversampling} */
+    {
+        .outputBaudrate = 115200,
+        .inputClockFreq = 12000000,
+        .prescalar = 6,
+        .hwRegUCBRFx = 8,
+        .hwRegUCBRSx = 32,
+        .oversampling = 1
+    },
+    {115200, 6000000,   3,  4,   2, 1},
+    {115200, 3000000,   1, 10,   0, 1},
+    {9600,   12000000, 78,  2,   0, 1},
+    {9600,   6000000,  39,  1,   0, 1},
+    {9600,   3000000,  19,  8,  85, 1},
+    {9600,   32768,     3,  0, 146, 0}
+};
+
+const UARTMSP432_HWAttrs uartMSP432HWAttrs[MSP_I3MSP432P401R_UARTCOUNT] = {
+    {
+        .baseAddr = EUSCI_A0_BASE,
+        .intNum = INT_EUSCIA0,
+        .intPriority = (~0),
+        .clockSource = EUSCI_A_UART_CLOCKSOURCE_SMCLK,
+        .bitOrder = EUSCI_A_UART_LSB_FIRST,
+        .numBaudrateEntries = sizeof(uartMSP432Baudrates) /
+            sizeof(UARTMSP432_BaudrateConfig),
+        .baudrateLUT = uartMSP432Baudrates,
+        .ringBufPtr  = uartMSP432RingBuffer[0],
+        .ringBufSize = sizeof(uartMSP432RingBuffer[0])
+    },
+    {
+        .baseAddr = EUSCI_A2_BASE,
+        .intNum = INT_EUSCIA2,
+        .intPriority = (~0),
+        .clockSource = EUSCI_A_UART_CLOCKSOURCE_SMCLK,
+        .bitOrder = EUSCI_A_UART_LSB_FIRST,
+        .numBaudrateEntries = sizeof(uartMSP432Baudrates) /
+            sizeof(UARTMSP432_BaudrateConfig),
+        .baudrateLUT = uartMSP432Baudrates,
+        .ringBufPtr  = uartMSP432RingBuffer[1],
+        .ringBufSize = sizeof(uartMSP432RingBuffer[1])
+    }
+};
+
+const UART_Config UART_config[] = {
+    {
+        .fxnTablePtr = &UARTMSP432_fxnTable,
+        .object = &uartMSP432Objects[0],
+        .hwAttrs = &uartMSP432HWAttrs[0]
+    },
+    {
+        .fxnTablePtr = &UARTMSP432_fxnTable,
+        .object = &uartMSP432Objects[1],
+        .hwAttrs = &uartMSP432HWAttrs[1]
+    },
+    {NULL, NULL, NULL}
+};
+
+/*
+ *  ======== MSP_I3MSP432P401R_initUART ========
+ */
+void MSP_I3MSP432P401R_initUART(void)
+{
+    /* Set P1.2 & P1.3 in UART mode */
+    MAP_GPIO_setAsPeripheralModuleFunctionInputPin(GPIO_PORT_P1,
+        GPIO_PIN2 | GPIO_PIN3, GPIO_PRIMARY_MODULE_FUNCTION);
+
+    /* Set P3.2 & P3.3 in UART mode */
+    MAP_GPIO_setAsPeripheralModuleFunctionInputPin(GPIO_PORT_P3,
+        GPIO_PIN2 | GPIO_PIN3, GPIO_PRIMARY_MODULE_FUNCTION);
+
+    /* Initialize the UART driver */
+    UART_init();
+}
+
+/*
+ *  =============================== Watchdog ===============================
+ */
+/* Place into subsections to allow the TI linker to remove items properly */
+#if defined(__TI_COMPILER_VERSION__)
+#pragma DATA_SECTION(Watchdog_config, ".const:Watchdog_config")
+#pragma DATA_SECTION(watchdogMSP432HWAttrs, ".const:watchdogMSP432HWAttrs")
+#endif
+
+#include <ti/drivers/Watchdog.h>
+#include <ti/drivers/watchdog/WatchdogMSP432.h>
+
+WatchdogMSP432_Object watchdogMSP432Objects[MSP_I3MSP432P401R_WATCHDOGCOUNT];
+
+const WatchdogMSP432_HWAttrs
+    watchdogMSP432HWAttrs[MSP_I3MSP432P401R_WATCHDOGCOUNT] = {
+    {
+        .baseAddr = WDT_A_BASE,
+        .intNum = INT_WDT_A,
+        .intPriority = (~0),
+        .clockSource = WDT_A_CLOCKSOURCE_SMCLK,
+        .clockDivider = WDT_A_CLOCKDIVIDER_8192K
+    },
+};
+
+const Watchdog_Config Watchdog_config[] = {
+    {
+        .fxnTablePtr = &WatchdogMSP432_fxnTable,
+        .object = &watchdogMSP432Objects[0],
+        .hwAttrs = &watchdogMSP432HWAttrs[0]
+    },
+    {NULL, NULL, NULL}
+};
+
+/*
+ *  ======== MSP_I3MSP432P401R_initWatchdog ========
+ */
+void MSP_I3MSP432P401R_initWatchdog(void)
+{
+    /* Initialize the Watchdog driver */
+    Watchdog_init();
+}
+
+/*
+ *  =============================== WiFi ===============================
+ */
+/* Place into subsections to allow the TI linker to remove items properly */
+#if defined(__TI_COMPILER_VERSION__)
+#pragma DATA_SECTION(WiFi_config, ".const:WiFi_config")
+#pragma DATA_SECTION(wiFiCC3100HWAttrs, ".const:wiFiCC3100HWAttrs")
+#endif
+
+#include <ti/drivers/WiFi.h>
+#include <ti/drivers/wifi/WiFiCC3100.h>
+
+WiFiCC3100_Object wiFiCC3100Objects[MSP_I3MSP432P401R_WIFICOUNT];
+
+const WiFiCC3100_HWAttrs wiFiCC3100HWAttrs[MSP_I3MSP432P401R_WIFICOUNT] = {
+    {
+        .irqPort = GPIO_PORT_P2,
+        .irqPin = GPIO_PIN5,
+        .irqIntNum = INT_PORT2,
+
+        .csPort = GPIO_PORT_P3,
+        .csPin = GPIO_PIN0,
+
+        .enPort = GPIO_PORT_P4,
+        .enPin = GPIO_PIN1
+    }
+};
+
+const WiFi_Config WiFi_config[] = {
+    {
+        .fxnTablePtr = &WiFiCC3100_fxnTable,
+        .object = &wiFiCC3100Objects[0],
+        .hwAttrs = &wiFiCC3100HWAttrs[0]
+    },
+    {NULL, NULL, NULL},
+};
+
+/*
+ *  ======== MSP_I3MSP432P401R_initWiFi ========
+ */
+void MSP_I3MSP432P401R_initWiFi(void)
+{
+    /* Configure EN & CS pins to disable CC3100 */
+    MAP_GPIO_setAsOutputPin(GPIO_PORT_P3, GPIO_PIN0);
+    MAP_GPIO_setAsOutputPin(GPIO_PORT_P4, GPIO_PIN1);
+    MAP_GPIO_setOutputHighOnPin(GPIO_PORT_P3, GPIO_PIN0);
+    MAP_GPIO_setOutputLowOnPin(GPIO_PORT_P4, GPIO_PIN1);
+
+    /* Configure CLK, MOSI & MISO for SPI0 (EUSCI_B0) */
+    MAP_GPIO_setAsPeripheralModuleFunctionOutputPin(GPIO_PORT_P1,
+        GPIO_PIN5 | GPIO_PIN6, GPIO_PRIMARY_MODULE_FUNCTION);
+    MAP_GPIO_setAsPeripheralModuleFunctionInputPin(GPIO_PORT_P1, GPIO_PIN7,
+        GPIO_PRIMARY_MODULE_FUNCTION);
+
+    /* Configure IRQ pin */
+    MAP_GPIO_setAsInputPinWithPullDownResistor(GPIO_PORT_P2, GPIO_PIN5);
+    MAP_GPIO_interruptEdgeSelect(GPIO_PORT_P2, GPIO_PIN5,
+        GPIO_LOW_TO_HIGH_TRANSITION);
+
+    /* Initialize SPI and WiFi drivers */
+    SPI_init();
+    WiFi_init();
+}
diff --git a/Basic-Test-Package/MSP432/Test_MSP432_WakeUp/MSP432P401R_I3M.h b/Basic-Test-Package/MSP432/Test_MSP432_WakeUp/MSP432P401R_I3M.h
new file mode 100644 (file)
index 0000000..41964b9
--- /dev/null
@@ -0,0 +1,273 @@
+/*
+ * 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       MSP_I3MSP432P401R.h
+ *
+ *  @brief      MSP_I3MSP432P401R Board Specific APIs
+ *
+ *  The MSP_I3MSP432P401R header file should be included in an application as
+ *  follows:
+ *  @code
+ *  #include <MSP_I3MSP432P401R.h>
+ *  @endcode
+ *
+ *  ============================================================================
+ */
+#ifndef __MSP_I3MSP432P401R_H
+#define __MSP_I3MSP432P401R_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* LEDs on MSP_I3MSP432P401R are active high. */
+#define MSP_I3MSP432P401R_LED_OFF (0)
+#define MSP_I3MSP432P401R_LED_ON  (1)
+
+/*!
+ *  @def    MSP_I3MSP432P401R_ADCName
+ *  @brief  Enum of ADC channels on the MSP_I3MSP432P401R dev board
+ */
+typedef enum MSP_I3MSP432P401R_ADCName {
+    MSP_I3MSP432P401R_ADC0 = 0,
+    MSP_I3MSP432P401R_ADC1,
+    MSP_I3MSP432P401R_ADCCOUNT
+}MSP_I3MSP432P401R_ADCName;
+
+/*!
+ *  @def    MSP_I3MSP432P401R_GPIOName
+ *  @brief  Enum of GPIO names on the MSP_I3MSP432P401R dev board
+ */
+typedef enum MSP_I3MSP432P401R_GPIOName {
+    MSP_I3MSP432P401R_S1 = 0,
+    MSP_I3MSP432P401R_SPIA1_IRQ,
+       MSP_I3MSP432P401R_SPIA1_CS,
+    MSP_I3MSP432P401R_SPIA2_CS,
+    /*
+     * MSP_I3MSP432P401R_LED_GREEN & MSP_I3MSP432P401R_LED_BLUE are used for
+     * PWM examples.  Uncomment the following lines if you would like to control
+     * the LEDs with the GPIO driver.
+     */
+    MSP_I3MSP432P401R_LED_GREEN,
+    MSP_I3MSP432P401R_LED_RED,
+
+    MSP_I3MSP432P401R_GPIOCOUNT
+} MSP_I3MSP432P401R_GPIOName;
+
+/*!
+ *  @def    MSP_I3MSP432P401R_I2CName
+ *  @brief  Enum of I2C names on the MSP_I3MSP432P401R dev board
+ */
+typedef enum MSP_I3MSP432P401R_I2CName {
+    MSP_I3MSP432P401R_I2CB2 = 0,
+    MSP_I3MSP432P401R_I2CCOUNT
+} MSP_I3MSP432P401R_I2CName;
+
+/*!
+ *  @def    MSP_I3MSP432P401R_PWMName
+ *  @brief  Enum of PWM names on the MSP_I3MSP432P401R dev board
+ */
+typedef enum MSP_I3MSP432P401R_PWMName {
+    MSP_I3MSP432P401R_PWM_TA1_1 = 0,
+    MSP_I3MSP432P401R_PWM_TA1_2,
+
+    MSP_I3MSP432P401R_PWMCOUNT
+} MSP_I3MSP432P401R_PWMName;
+
+/*!
+ *  @def    MSP_I3MSP432P401R_SDSPIName
+ *  @brief  Enum of SDSPI names on the MSP_I3MSP432P401R dev board
+
+typedef enum MSP_I3MSP432P401R_SDSPIName {
+    MSP_I3MSP432P401R_SDSPIB0 = 0,
+
+    MSP_I3MSP432P401R_SDSPICOUNT
+} EMSP_I3MSP432P401R_SDSPIName;
+*/
+
+/*!
+ *  @def    MSP_I3MSP432P401R_SPIName
+ *  @brief  Enum of SPI names on the MSP_I3MSP432P401R dev board
+ */
+typedef enum MSP_I3MSP432P401R_SPIName {
+    MSP_I3MSP432P401R_SPIB0 = 0,
+    MSP_I3MSP432P401R_SPIA1,
+    MSP_I3MSP432P401R_SPIA2,
+
+    MSP_I3MSP432P401R_SPICOUNT
+} MSP_I3MSP432P401R_SPIName;
+
+/*!
+ *  @def    MSP_I3MSP432P401R_UARTName
+ *  @brief  Enum of UART names on the MSP_I3MSP432P401R dev board
+ */
+typedef enum MSP_I3MSP432P401R_UARTName {
+    MSP_I3MSP432P401R_UARTA0 = 0,
+    MSP_I3MSP432P401R_UARTA2,
+
+    MSP_I3MSP432P401R_UARTCOUNT
+} MSP_I3MSP432P401R_UARTName;
+
+/*!
+ *  @def    MSP_I3MSP432P401R_WatchdogName
+ *  @brief  Enum of Watchdog names on the MSP_I3MSP432P401R dev board
+ */
+typedef enum MSP_I3MSP432P401R_WatchdogName {
+    MSP_I3MSP432P401R_WATCHDOG = 0,
+
+    MSP_I3MSP432P401R_WATCHDOGCOUNT
+} MSP_I3MSP432P401R_WatchdogName;
+
+/*!
+ *  @def    MSP_I3MSP432P401R_WiFiName
+ *  @brief  Enum of WiFi names on the MSP_I3MSP432P401R dev board
+ */
+typedef enum MSP_I3MSP432P401R_WiFiName {
+    MSP_I3MSP432P401R_WIFI = 0,
+
+    MSP_I3MSP432P401R_WIFICOUNT
+} MSP_I3MSP432P401R_WiFiName;
+
+/*!
+ *  @brief  Initialize board specific ADC settings
+ *
+ *  This function initializes the board specific ADC settings and then calls
+ *  the ADC_init API to initialize the ADC module.
+ *
+ *  The ADC peripherals controlled by the ADC module are determined by the
+ *  ADC_config variable.
+ */
+extern void MSP_I3MSP432P401R_initADC(void);
+
+/*!
+ *  @brief  Initialize the general board specific settings
+ *
+ *  This function initializes the general board specific settings.
+ */
+extern void MSP_I3MSP432P401R_initGeneral(void);
+
+/*!
+ *  @brief  Initialize board specific GPIO settings
+ *
+ *  This function initializes the board specific GPIO settings and
+ *  then calls the GPIO_init API to initialize the GPIO module.
+ *
+ *  The GPIOs controlled by the GPIO module are determined by the GPIO_PinConfig
+ *  variable.
+ */
+extern void MSP_I3MSP432P401R_initGPIO(void);
+
+/*!
+ *  @brief  Initialize board specific I2C settings
+ *
+ *  This function initializes the board specific I2C settings and then calls
+ *  the I2C_init API to initialize the I2C module.
+ *
+ *  The I2C peripherals controlled by the I2C module are determined by the
+ *  I2C_config variable.
+ */
+extern void MSP_I3MSP432P401R_initI2C(void);
+
+/*!
+ *  @brief  Initialize board specific PWM settings
+ *
+ *  This function initializes the board specific PWM settings and then calls
+ *  the PWM_init API to initialize the PWM module.
+ *
+ *  The PWM peripherals controlled by the PWM module are determined by the
+ *  PWM_config variable.
+ */
+extern void MSP_I3MSP432P401R_initPWM(void);
+
+/*!
+ *  @brief  Initialize board specific SDSPI settings
+ *
+ *  This function initializes the board specific SDSPI settings and then calls
+ *  the SDSPI_init API to initialize the SDSPI module.
+ *
+ *  The SDSPI peripherals controlled by the SDSPI module are determined by the
+ *  SDSPI_config variable.
+ */
+extern void MSP_I3MSP432P401R_initSDSPI(void);
+
+/*!
+ *  @brief  Initialize board specific SPI settings
+ *
+ *  This function initializes the board specific SPI settings and then calls
+ *  the SPI_init API to initialize the SPI module.
+ *
+ *  The SPI peripherals controlled by the SPI module are determined by the
+ *  SPI_config variable.
+ */
+extern void MSP_I3MSP432P401R_initSPI(void);
+
+/*!
+ *  @brief  Initialize board specific UART settings
+ *
+ *  This function initializes the board specific UART settings and then calls
+ *  the UART_init API to initialize the UART module.
+ *
+ *  The UART peripherals controlled by the UART module are determined by the
+ *  UART_config variable.
+ */
+extern void MSP_I3MSP432P401R_initUART(void);
+
+/*!
+ *  @brief  Initialize board specific Watchdog settings
+ *
+ *  This function initializes the board specific Watchdog settings and then
+ *  calls the Watchdog_init API to initialize the Watchdog module.
+ *
+ *  The Watchdog peripherals controlled by the Watchdog module are determined
+ *  by the Watchdog_config variable.
+ */
+extern void MSP_I3MSP432P401R_initWatchdog(void);
+
+/*!
+ *  @brief  Initialize board specific WiFi settings
+ *
+ *  This function initializes the board specific WiFi settings and then calls
+ *  the WiFi_init API to initialize the WiFi module.
+ *
+ *  The hardware resources controlled by the WiFi module are determined by the
+ *  WiFi_config variable.
+ *
+ *  A SimpleLink CC3100 device or module is required and must be connected to
+ *  use the WiFi driver.
+ */
+extern void MSP_I3MSP432P401R_initWiFi(void);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __MSP_I3MSP432P401R_H */
diff --git a/Basic-Test-Package/MSP432/Test_MSP432_WakeUp/main.c b/Basic-Test-Package/MSP432/Test_MSP432_WakeUp/main.c
new file mode 100644 (file)
index 0000000..0da2e87
--- /dev/null
@@ -0,0 +1,142 @@
+/*
+ *  ======== empty_min.c ========
+ */
+/* XDCtools Header files */
+#include <xdc/std.h>
+#include <xdc/runtime/System.h>
+#include <xdc/runtime/Error.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>
+#include <ti/sysbios/knl/Event.h>
+
+/* TI-RTOS Header files */
+#include <ti/drivers/GPIO.h>
+#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   (1024)
+
+Task_Struct task0Struct;
+Char task0Stack[TASKSTACKSIZE];
+
+/* Semaphore */
+Semaphore_Struct semStruct;
+Semaphore_Handle semHandle;
+
+
+/*
+ * Application LED pin configuration table:
+ *   - All LEDs board LEDs are off.
+ */
+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
+};
+
+PIN_Config buttonPinTable[] = {
+    Board_BUTTON0  | PIN_INPUT_EN | PIN_PULLUP | PIN_IRQ_NEGEDGE,
+    //Board_BUTTON1  | PIN_INPUT_EN | PIN_PULLUP | PIN_IRQ_NEGEDGE,
+    PIN_TERMINATE
+};
+
+
+void buttonCallbackFxn(unsigned int pinId) {
+
+
+       Semaphore_post(semHandle);
+       System_printf("***\r\n");
+       System_flush();
+
+}
+
+
+/*
+ *  ======== 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)
+{
+
+    //GPIO_write(Board_LED0, 1);
+    //GPIO_write(Board_LED1, 1);
+
+    Semaphore_pend(semHandle, BIOS_WAIT_FOREVER);
+
+       /* Start test */
+    //GPIO_write(Board_LED0, 0);
+    //GPIO_write(Board_LED1, 0);
+
+       while (1)
+       {
+               Task_sleep((UInt)arg0);
+               GPIO_toggle(Board_LED0);
+               GPIO_toggle(Board_LED1);
+       }
+}
+
+
+/*
+ *  ======== main ========
+ */
+
+int main(void)
+{
+    Task_Params taskParams;
+
+    Semaphore_Params semParams;
+
+    /* Call board init functions */
+    Board_initGPIO();
+    Board_initGeneral();
+    //Board_initI2C();
+    // Board_initSPI();
+    Board_initUART();
+    // Board_initWatchdog();
+
+    UART_Params uartParams;
+    UART_Params_init(&uartParams);
+    uartParams.baudRate = 115200;
+    uartParams.readEcho = UART_ECHO_OFF;
+
+    //uartParams.readEcho = UART_ECHO_OFF;
+    UartPrintf_init(UART_open(Board_UART, &uartParams));
+
+    /* Construct heartBeat Task  thread */
+    Task_Params_init(&taskParams);
+    taskParams.arg0 = 100000 / Clock_tickPeriod;
+    taskParams.stackSize = TASKSTACKSIZE;
+    taskParams.stack = &task0Stack;
+    Task_construct(&task0Struct, (Task_FuncPtr)heartBeatFxn, &taskParams, NULL);
+
+    /* Construct Semaphore and Obtain instance handle */
+    Semaphore_Params_init(&semParams);
+    Semaphore_construct(&semStruct,0, &semParams);
+    semHandle = Semaphore_handle(&semStruct);
+
+    /* Setup callback for button pins */
+    GPIO_setCallback(Board_BUTTON0,buttonCallbackFxn);
+    GPIO_enableInt(Board_BUTTON0);
+
+    /* Setup callback for button pins */
+    GPIO_write(Board_LED0, 0);
+    GPIO_write(Board_LED1, 0);
+
+    /* Start BIOS */
+    BIOS_start();
+
+    return (0);
+}
diff --git a/Basic-Test-Package/MSP432/Test_MSP432_WakeUp/uart_printf.c b/Basic-Test-Package/MSP432/Test_MSP432_WakeUp/uart_printf.c
new file mode 100644 (file)
index 0000000..03bf96c
--- /dev/null
@@ -0,0 +1,189 @@
+/**************************************************************************************************\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 �AS IS� 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
+  int needWrap = curHead < uartPrintf_tail;\r
+\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
+\r
+\r
+char uart_getch()\r
+{\r
+       char input;\r
+\r
+       if (NULL == hUart)\r
+               return 0;\r
+\r
+       // Blocking Read\r
+       UART_read(hUart,&input,1);\r
+       return input;\r
+}\r
+\r
+\r
diff --git a/Basic-Test-Package/MSP432/Test_MSP432_WakeUp/uart_printf.h b/Basic-Test-Package/MSP432/Test_MSP432_WakeUp/uart_printf.h
new file mode 100644 (file)
index 0000000..600ada4
--- /dev/null
@@ -0,0 +1,82 @@
+/**************************************************************************************************\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 �AS IS� 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
+char uart_getch();\r
+\r
+#ifdef __cplusplus\r
+}\r
+#endif\r
+\r
+#endif // UART_PRINTF_H\r