This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

MSP432E401Y: energia调试MSP432P401R

Part Number: MSP432E401Y
Other Parts Discussed in Thread: ENERGIA

我尝试使用引脚 p9.6 和 p9.7 实现另一个辅助串行,并且是数据表中读取的 tx 和 rx 引脚。

我对 cores 文件夹中的 pins_energia 、硬件 serial.h 和硬件 serial.cpp 进行了更改。

我之后尝试了 serial1这些更改有效但不是 serial2,我需要将 serial2 与使用 tx 和 rx 引脚传输数据的无线设备一起使用。

我在使用energia调试serial2出现以下错误

Energia: 1.8.11E23 (Windows 10), 开发板:"RED LaunchPad w/ msp432p401r EMT (48MHz)"

C:\Users\Administrator\Desktop\HILLE/HILLE.ino:9: undefined reference to `Serial2'

C:\Users\ADMINI~1\AppData\Local\Temp\arduino_build_749401\sketch\HILLE.ino.cpp.o: In function `loopHILLE()':

C:\Users\Administrator\Desktop\HILLE/HILLE.ino:19: undefined reference to `Serial2'

collect2.exe: error: ld returned 1 exit status

exit status 1
为开发板 RED LaunchPad w/ msp432p401r EMT (48MHz) 编译时出错。

  • SerialObjects.cpp

    Board_init.c
    /*
     * 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.
     */
    
    /*
     *  ======== Board_init.c ========
     *  This file is responsible for setting up the board specific items for the
     *  MSP_EXP432P401R Launch Pad board.
     */
    
    #include <stdbool.h>
    
    #include <xdc/std.h>
    
    #include <xdc/runtime/System.h>
    
    #include <ti/drivers/ports/DebugP.h>
    #include <ti/drivers/ports/HwiP.h>
    
    #include <msp432.h>
    #include <driverlib/MSP432P4xx/rom.h>
    #include <driverlib/MSP432P4xx/rom_map.h>
    #include <driverlib/MSP432P4xx/dma.h>
    #include <driverlib/MSP432P4xx/interrupt.h>
    #include <driverlib/MSP432P4xx/gpio.h>
    #include <driverlib/MSP432P4xx/i2c.h>
    #include <driverlib/MSP432P4xx/spi.h>
    #include <driverlib/MSP432P4xx/timer_a.h>
    #include <driverlib/MSP432P4xx/uart.h>
    #include <driverlib/MSP432P4xx/wdt_a.h>
    
    #include "Board.h"
    
    /*
     *  =============================== 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
    };
    
    /*
     *  =============================== General ===============================
     */
    
    /*
     *  ======== Board_initGeneral ========
     */
    void Board_initGeneral(void) {
    }
    
    /*
     *  =============================== 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")
    #pragma DATA_SECTION(gpioPinConfigs, ".data:gpioPinConfigs")
    #pragma DATA_SECTION(gpioCallbackFunctions, ".data:gpioCallbackFunctions")
    #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_EXP432P401R.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[] = {
        /* port_pin */
        GPIOMSP432_EMPTY_PIN | GPIO_DO_NOT_CONFIG,  /*  0  - dummy */
    
        /* pins 1-10 */
        GPIOMSP432_EMPTY_PIN | GPIO_DO_NOT_CONFIG,  /*  1  - 3.3V */
        GPIOMSP432_P6_0 | GPIO_DO_NOT_CONFIG,       /*  2  - P6.0_A15 */
        GPIOMSP432_P3_2 | GPIO_DO_NOT_CONFIG,       /*  3  - P3.2_URXD */
        GPIOMSP432_P3_3 | GPIO_DO_NOT_CONFIG,       /*  4  - P3.3_UTXD */
        GPIOMSP432_P4_1 | GPIO_DO_NOT_CONFIG,       /*  5  - P4.1_IO_A12 */
        GPIOMSP432_P4_3 | GPIO_DO_NOT_CONFIG,       /*  6  - P4.3_A10 */
        GPIOMSP432_P1_5 | GPIO_DO_NOT_CONFIG,       /*  7  - P1.5_SPICLK */
        GPIOMSP432_P4_6 | GPIO_DO_NOT_CONFIG,       /*  8  - P4.6_IO_A7 */
        GPIOMSP432_P6_5 | GPIO_DO_NOT_CONFIG,       /*  9  - P6.5_I2CSCL */
        GPIOMSP432_P6_4 | GPIO_DO_NOT_CONFIG,       /*  10 - P6.4_I2CSDA */
    
        /* pins 11-20 */
        GPIOMSP432_P3_6 | GPIO_DO_NOT_CONFIG,       /*  11 - P3.6_IO */
        GPIOMSP432_P5_2 | GPIO_DO_NOT_CONFIG,       /*  12 - P5.2_IO */
        GPIOMSP432_P5_0 | GPIO_DO_NOT_CONFIG,       /*  13 - P5.0_IO */
        GPIOMSP432_P1_7 | GPIO_DO_NOT_CONFIG,       /*  14 - P1.7_SPIMISO */
        GPIOMSP432_P1_6 | GPIO_DO_NOT_CONFIG,       /*  15 - P1.6_SPIMOSI */
        GPIOMSP432_EMPTY_PIN | GPIO_DO_NOT_CONFIG,  /*  16 - RESET */
        GPIOMSP432_P5_7 | GPIO_DO_NOT_CONFIG,       /*  17 - P5.7_IO */
        GPIOMSP432_P3_0 | GPIO_DO_NOT_CONFIG,       /*  18 - P3.0_IO */
        GPIOMSP432_P2_5 | GPIO_DO_NOT_CONFIG,       /*  19 - P2.5_IO_PWM */
        GPIOMSP432_EMPTY_PIN | GPIO_DO_NOT_CONFIG,  /*  20 - GND */
    
        /* pins 21-30 */
        GPIOMSP432_EMPTY_PIN | GPIO_DO_NOT_CONFIG,  /*  21 - 5V */
        GPIOMSP432_EMPTY_PIN | GPIO_DO_NOT_CONFIG,  /*  22 - GND */
        GPIOMSP432_P6_1 | GPIO_DO_NOT_CONFIG,       /*  23 - P6.1_A14 */
        GPIOMSP432_P4_0 | GPIO_DO_NOT_CONFIG,       /*  24 - P4.0_A13 */
        GPIOMSP432_P4_2 | GPIO_DO_NOT_CONFIG,       /*  25 - P4.2_A11 */
        GPIOMSP432_P4_4 | GPIO_DO_NOT_CONFIG,       /*  26 - P4.4_A9 */
        GPIOMSP432_P4_5 | GPIO_DO_NOT_CONFIG,       /*  27 - P4.5_A8 */
        GPIOMSP432_P4_7 | GPIO_DO_NOT_CONFIG,       /*  28 - P4.7_A6 */
        GPIOMSP432_P5_4 | GPIO_DO_NOT_CONFIG,       /*  29 - P5.4_IO */
        GPIOMSP432_P5_5 | GPIO_DO_NOT_CONFIG,       /*  30 - P5.5_IO */
    
        /* pins 31-40 */
        GPIOMSP432_P3_7 | GPIO_DO_NOT_CONFIG,       /*  31 - P3.7_IO */
        GPIOMSP432_P3_5 | GPIO_DO_NOT_CONFIG,       /*  32 - P3.5_IO */
        GPIOMSP432_P5_1 | GPIO_DO_NOT_CONFIG,       /*  33 - P5.1_IO */
        GPIOMSP432_P2_3 | GPIO_DO_NOT_CONFIG,       /*  34 - P2.3_IO */
        GPIOMSP432_P6_7 | GPIO_DO_NOT_CONFIG,       /*  35 - P6.7_IO_CAPT */
        GPIOMSP432_P6_6 | GPIO_DO_NOT_CONFIG,       /*  36 - P6.6_IO_CAPT */
        GPIOMSP432_P5_6 | GPIO_DO_NOT_CONFIG,       /*  37 - P5.6_PWM */
        GPIOMSP432_P2_4 | GPIO_DO_NOT_CONFIG,       /*  38 - P2.4_PWM */
        GPIOMSP432_P2_6 | GPIO_DO_NOT_CONFIG,       /*  39 - P2.6_PWM */
        GPIOMSP432_P2_7 | GPIO_DO_NOT_CONFIG,       /*  40 - P2.7_PWM */
    
        /* bottom row pins 41-56 */
        GPIOMSP432_P8_5 | GPIO_DO_NOT_CONFIG,       /*  41 - P8.5 */
        GPIOMSP432_P9_0 | GPIO_DO_NOT_CONFIG,       /*  42 - P9.0 */
        GPIOMSP432_P8_4 | GPIO_DO_NOT_CONFIG,       /*  43 - P8.4 */
        GPIOMSP432_P8_2 | GPIO_DO_NOT_CONFIG,       /*  44 - P8.2 */
        GPIOMSP432_P9_2 | GPIO_DO_NOT_CONFIG,       /*  45 - P9.2 */
        GPIOMSP432_P6_2 | GPIO_DO_NOT_CONFIG,       /*  46 - P6.2 */
        GPIOMSP432_P7_3 | GPIO_DO_NOT_CONFIG,       /*  47 - P7.3 */
        GPIOMSP432_P7_1 | GPIO_DO_NOT_CONFIG,       /*  48 - P7.1 */
        GPIOMSP432_P9_4 | GPIO_DO_NOT_CONFIG,       /*  49 - P9.4 */
        GPIOMSP432_P9_6 | GPIO_DO_NOT_CONFIG,       /*  40 - P9.6 */
        GPIOMSP432_P8_0 | GPIO_DO_NOT_CONFIG,       /*  51 - P8.0 */
        GPIOMSP432_P7_4 | GPIO_DO_NOT_CONFIG,       /*  52 - P7.4 */
        GPIOMSP432_P7_6 | GPIO_DO_NOT_CONFIG,       /*  53 - P7.6 */
        GPIOMSP432_P10_0 | GPIO_DO_NOT_CONFIG,      /*  54 - P10.0 */
        GPIOMSP432_P10_2 | GPIO_DO_NOT_CONFIG,      /*  55 - P10_2 */
        GPIOMSP432_P10_4 | GPIO_DO_NOT_CONFIG,      /*  56 - P10.4 */
    
        /* bottom row pins 57-72 */
        GPIOMSP432_P8_6 | GPIO_DO_NOT_CONFIG,       /*  57 - P8.6 */
        GPIOMSP432_P8_7 | GPIO_DO_NOT_CONFIG,       /*  58 - P8.7 */
        GPIOMSP432_P9_1 | GPIO_DO_NOT_CONFIG,       /*  59 - P9.1 */
        GPIOMSP432_P8_3 | GPIO_DO_NOT_CONFIG,       /*  60 - P8.3 */
        GPIOMSP432_P5_3 | GPIO_DO_NOT_CONFIG,       /*  61 - P5.3 */
        GPIOMSP432_P9_3 | GPIO_DO_NOT_CONFIG,       /*  62 - P9.3 */
        GPIOMSP432_P6_3 | GPIO_DO_NOT_CONFIG,       /*  63 - P6.3 */
        GPIOMSP432_P7_2 | GPIO_DO_NOT_CONFIG,       /*  64 - P7.2 */
        GPIOMSP432_P7_0 | GPIO_DO_NOT_CONFIG,       /*  65 - P7.0 */
        GPIOMSP432_P9_5 | GPIO_DO_NOT_CONFIG,       /*  66 - P9.5 */
        GPIOMSP432_P9_7 | GPIO_DO_NOT_CONFIG,       /*  67 - P9.7 */
        GPIOMSP432_P7_5 | GPIO_DO_NOT_CONFIG,       /*  68 - P7.5 */
        GPIOMSP432_P7_7 | GPIO_DO_NOT_CONFIG,       /*  69 - P7.7 */
        GPIOMSP432_P10_1 | GPIO_DO_NOT_CONFIG,      /*  70 - P10.1 */
        GPIOMSP432_P10_3 | GPIO_DO_NOT_CONFIG,      /*  71 - P10.3 */
        GPIOMSP432_P10_5 | GPIO_DO_NOT_CONFIG,      /*  72 - P10.5 */
    
        /* virtual pins 73-78 */
        GPIOMSP432_P1_1 | GPIO_DO_NOT_CONFIG,       /*  73 - P1.1 SW1 */
        GPIOMSP432_P1_4 | GPIO_DO_NOT_CONFIG,       /*  74 - P1.4 SW2 */
        GPIOMSP432_P2_0 | GPIO_DO_NOT_CONFIG,       /*  75 - P2.0 RED_LED */
        GPIOMSP432_P2_1 | GPIO_DO_NOT_CONFIG,       /*  76 - P2.1 GREEN_LED */
        GPIOMSP432_P2_2 | GPIO_DO_NOT_CONFIG,       /*  77 - P2.2 BLUE_LED */
        GPIOMSP432_P1_0 | GPIO_DO_NOT_CONFIG,       /*  78 - P1.0 LED1 */
    };
    
    /*
     * Array of callback function pointers
     * NOTE: The order of the pin configurations must coincide with what was
     *       defined in MSP_EXP432P401R.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[] = {
        /* port_pin */
        NULL,  /*  0  - dummy */
    
        /* pins 1-10 */
        NULL,  /*  1  - 3.3V */
        NULL,  /*  2  - P6.0_A15 */
        NULL,  /*  3  - P3.2_URXD */
        NULL,  /*  4  - P3.3_UTXD */
        NULL,  /*  5  - P4.1_IO_A12 */
        NULL,  /*  6  - P4.3_A10 */
        NULL,  /*  7  - P1.5_SPICLK */
        NULL,  /*  8  - P4.6_IO_A7 */
        NULL,  /*  9  - P6.5_I2CSCL */
        NULL,  /*  10 - P6.4_I2CSDA */
    
        /* pins 11-20 */
        NULL,  /*  11 - P3.6_IO */
        NULL,  /*  12 - P5.2_IO */
        NULL,  /*  13 - P5.0_IO */
        NULL,  /*  14 - P1.7_SPIMISO */
        NULL,  /*  15 - P1.6_SPIMOSI */
        NULL,  /*  16 - RESET */
        NULL,  /*  17 - P5.7_IO */
        NULL,  /*  18 - P3.0_IO */
        NULL,  /*  19 - P2.5_IO_PWM */
        NULL,  /*  20 - GND */
    
        /* pins 21-30 */
        NULL,  /*  21 - 5V */
        NULL,  /*  22 - GND */
        NULL,  /*  23 - P6.1_A14 */
        NULL,  /*  24 - P4.0_A13 */
        NULL,  /*  25 - P4.2_A11 */
        NULL,  /*  26 - P4.4_A9 */
        NULL,  /*  27 - P4.5_A8 */
        NULL,  /*  28 - P4.7_A6 */
        NULL,  /*  29 - P5.4_IO */
        NULL,  /*  30 - P5.5_IO */
    
        /* pins 31-40 */
        NULL,  /*  31 - P3.7_IO */
        NULL,  /*  32 - P3.5_IO */
        NULL,  /*  33 - P5.1_IO */
        NULL,  /*  34 - P2.3_IO */
        NULL,  /*  35 - P6.7_IO_CAPT */
        NULL,  /*  36 - P6.6_IO_CAPT */
        NULL,  /*  37 - P5.6_PWM */
        NULL,  /*  38 - P2.4_PWM */
        NULL,  /*  39 - P2.6_PWM */
        NULL,  /*  40 - P2.7_PWM */
    
        /* pins 41-56 */
        NULL,  /*  41 - P8.5 */
        NULL,  /*  42 - P9.0 */
        NULL,  /*  43 - P8.4 */
        NULL,  /*  44 - P8.2 */
        NULL,  /*  45 - P9.2 */
        NULL,  /*  46 - P6.2 */
        NULL,  /*  47 - P7.3 */
        NULL,  /*  48 - P7.1 */
        NULL,  /*  49 - P9.4 */
        NULL,  /*  40 - P9.6 */
        NULL,  /*  51 - P8.0 */
        NULL,  /*  52 - P7.4 */
        NULL,  /*  53 - P7.6 */
        NULL,  /*  54 - P10.0 */
        NULL,  /*  55 - P10_2 */
        NULL,  /*  56 - P10.4 */
    
        /* pins 57-72 */
        NULL,  /*  57 - P8.6 */
        NULL,  /*  58 - P8.7 */
        NULL,  /*  59 - P9.1 */
        NULL,  /*  60 - P8.3 */
        NULL,  /*  61 - P5.3 */
        NULL,  /*  62 - P9.3 */
        NULL,  /*  63 - P6.3 */
        NULL,  /*  64 - P7.2 */
        NULL,  /*  65 - P7.0 */
        NULL,  /*  66 - P9.5 */
        NULL,  /*  67 - P9.7 */
        NULL,  /*  68 - P7.5 */
        NULL,  /*  69 - P7.7 */
        NULL,  /*  70 - P10.1 */
        NULL,  /*  71 - P10.3 */
        NULL,  /*  72 - P10.5 */
    
        /* virtual pins 73-78 */
        NULL,  /*  73 - P1.1 SW1 */
        NULL,  /*  74 - P1.4 SW2 */
        NULL,  /*  75 - P2.0 RED_LED */
        NULL,  /*  76 - P2.1 GREEN_LED */
        NULL,  /*  77 - P2.2 BLUE_LED */
        NULL,  /*  78 - P1.0 LED1 */
    };
    
    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)
    };
    
    /* Not sure why the SVSLOFF bit is undefined in the latest driverlib msp432p401r.h file */
    
    #define SVSLOFF 0x00000100
    
    /*
     *  ======== Board_initGPIO ========
     */
    void Board_initGPIO(void)
    {
        /* Terminate all IO pins on the device */
        P1DIR |= 0xFF; P1OUT = 0;
        P2DIR |= 0xFF; P2OUT = 0;
        P3DIR |= 0xFF; P3OUT = 0;
        P4DIR |= 0xFF; P4OUT = 0;
        P5DIR |= 0xFF; P5OUT = 0;
        P6DIR |= 0xFF; P6OUT = 0;
        P7DIR |= 0xFF; P7OUT = 0;
        P8DIR |= 0xFF; P8OUT = 0;
        P9DIR |= 0xFF; P9OUT = 0;
        P10DIR |= 0xFF; P10OUT = 0;
    
        /* Configure Port PJ.2 and PJ.3 as GPIO and write 0 */
        PJDIR |= (BIT2 | BIT3); PJOUT &= ~(BIT2 | BIT3);
    
        /* PJ.0 & PJ.1 configured for LFXT IN/OUT */
        PJSEL0 |= BIT0 | BIT1;
        PJSEL1 &= ~(BIT0 | BIT1);
    
        /* Turn off PSS high-side & low-side supervisors */
        PSS->KEY = PSS_KEY_KEY_VAL;
        PSS->CTL0 |= PSS_CTL0_SVSMHOFF | SVSLOFF;         /* 823 (14) uA -> 809 (3) uA */
        PSS->KEY = 0;
    
        /* Configure Port PJ.4 and PJ.5 */
        ; /* do nothing (the reset default is to support JTAG) */
    
        /* set up initial TI-RTOS GPIO pin configurations */
        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>
    
    /* I2C objects */
    I2CMSP432_Object i2cMSP432Objects[Board_I2CCOUNT];
    
    /* I2C configuration structure */
    const I2CMSP432_HWAttrs i2cMSP432HWAttrs[Board_I2CCOUNT] = {
        {
            .baseAddr = EUSCI_B1_BASE,
            .intNum = INT_EUSCIB1,
            .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}
    };
    
    /*
     *  ======== Board_openI2C ========
     *  Initialize the I2C driver.
     *  Initialize the I2C port's pins.
     *  Open the I2C port.
     */
    I2C_Handle Board_openI2C(UInt i2cPortIndex, I2C_Params *i2cParams)
    {
        
        /* Initialize the I2C driver */
        /* By design, I2C_init() is idempotent */
        I2C_init();
        
        /* initialize the pins associated with the respective I2C */
        switch(i2cPortIndex) {
            case 0:
                /* Configure Pins 6.4 & 6.5 as SDA & SCL, respectively. */
                MAP_GPIO_setAsPeripheralModuleFunctionInputPin(GPIO_PORT_P6,
                                                               GPIO_PIN4 | GPIO_PIN5,
                                                               GPIO_PRIMARY_MODULE_FUNCTION);
                break;
    
            default:
                return (NULL);
        }
    
        /* open the I2C */
        return (I2C_open(i2cPortIndex, i2cParams));
    }
    
    /*
     *  =============================== Power ===============================
     */
    
    #include <ti/drivers/Power.h>
    #include <ti/drivers/power/PowerMSP432.h>
    
    const PowerMSP432_ConfigV1 PowerMSP432_config = {
        .policyInitFxn = PowerMSP432_initPolicy,
        .policyFxn = PowerMSP432_deepSleepPolicy,
        .initialPerfLevel = 2,
        .enablePolicy = true,
        .enablePerf = true,
        .enableParking = true
    };
    
    /*
     *  ======== Board_initPower ========
     */
    void Board_initPower(void)
    {
        Power_init();
    }
    
    /*
     *  =============================== 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[Board_PWMCOUNT];
    
    /* PWM configuration structure */
    PWMTimerMSP432_HWAttrsV1 pwmTimerMSP432HWAttrs[Board_PWMCOUNT] = {
        /* pin mappable PWM channels */
        {
            .timerBaseAddr = TIMER_A0_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_A0_BASE,
            .clockSource = TIMER_A_CLOCKSOURCE_SMCLK,
            .compareRegister = TIMER_A_CAPTURECOMPARE_REGISTER_2,
            .gpioPort = GPIO_PORT_P2,
            .gpioPinIndex = GPIO_PIN1,
            .pwmMode = GPIO_PRIMARY_MODULE_FUNCTION
        },
        {
            .timerBaseAddr = TIMER_A0_BASE,
            .clockSource = TIMER_A_CLOCKSOURCE_SMCLK,
            .compareRegister = TIMER_A_CAPTURECOMPARE_REGISTER_3,
            .gpioPort = GPIO_PORT_P2,
            .gpioPinIndex = GPIO_PIN1,
            .pwmMode = GPIO_PRIMARY_MODULE_FUNCTION
        },
        {
            .timerBaseAddr = TIMER_A0_BASE,
            .clockSource = TIMER_A_CLOCKSOURCE_SMCLK,
            .compareRegister = TIMER_A_CAPTURECOMPARE_REGISTER_4,
            .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_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_PIN1,
            .pwmMode = GPIO_PRIMARY_MODULE_FUNCTION
        },
        {
            .timerBaseAddr = TIMER_A1_BASE,
            .clockSource = TIMER_A_CLOCKSOURCE_SMCLK,
            .compareRegister = TIMER_A_CAPTURECOMPARE_REGISTER_3,
            .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_4,
            .gpioPort = GPIO_PORT_P2,
            .gpioPinIndex = GPIO_PIN1,
            .pwmMode = GPIO_PRIMARY_MODULE_FUNCTION
        },
    	/* fixed pin mapped PWM channels */
        {
            .timerBaseAddr = TIMER_A2_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_A2_BASE,
            .clockSource = TIMER_A_CLOCKSOURCE_SMCLK,
            .compareRegister = TIMER_A_CAPTURECOMPARE_REGISTER_2,
            .gpioPort = GPIO_PORT_P2,
            .gpioPinIndex = GPIO_PIN1,
            .pwmMode = GPIO_PRIMARY_MODULE_FUNCTION
        },
        {
            .timerBaseAddr = TIMER_A2_BASE,
            .clockSource = TIMER_A_CLOCKSOURCE_SMCLK,
            .compareRegister = TIMER_A_CAPTURECOMPARE_REGISTER_3,
            .gpioPort = GPIO_PORT_P2,
            .gpioPinIndex = GPIO_PIN1,
            .pwmMode = GPIO_PRIMARY_MODULE_FUNCTION
        },
        {
            .timerBaseAddr = TIMER_A2_BASE,
            .clockSource = TIMER_A_CLOCKSOURCE_SMCLK,
            .compareRegister = TIMER_A_CAPTURECOMPARE_REGISTER_4,
            .gpioPort = GPIO_PORT_P2,
            .gpioPinIndex = GPIO_PIN1,
            .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]
        },
        {
            .fxnTablePtr = &PWMTimerMSP432_fxnTable,
            .object = &pwmTimerMSP432Objects[2],
            .hwAttrs = &pwmTimerMSP432HWAttrs[2]
        },
        {
            .fxnTablePtr = &PWMTimerMSP432_fxnTable,
            .object = &pwmTimerMSP432Objects[3],
            .hwAttrs = &pwmTimerMSP432HWAttrs[3]
        },
        {
            .fxnTablePtr = &PWMTimerMSP432_fxnTable,
            .object = &pwmTimerMSP432Objects[4],
            .hwAttrs = &pwmTimerMSP432HWAttrs[4]
        },
        {
            .fxnTablePtr = &PWMTimerMSP432_fxnTable,
            .object = &pwmTimerMSP432Objects[5],
            .hwAttrs = &pwmTimerMSP432HWAttrs[5]
        },
        {
            .fxnTablePtr = &PWMTimerMSP432_fxnTable,
            .object = &pwmTimerMSP432Objects[6],
            .hwAttrs = &pwmTimerMSP432HWAttrs[6]
        },
        {
            .fxnTablePtr = &PWMTimerMSP432_fxnTable,
            .object = &pwmTimerMSP432Objects[7],
            .hwAttrs = &pwmTimerMSP432HWAttrs[7]
        },
        {
            .fxnTablePtr = &PWMTimerMSP432_fxnTable,
            .object = &pwmTimerMSP432Objects[8],
            .hwAttrs = &pwmTimerMSP432HWAttrs[8]
        },
        {
            .fxnTablePtr = &PWMTimerMSP432_fxnTable,
            .object = &pwmTimerMSP432Objects[9],
            .hwAttrs = &pwmTimerMSP432HWAttrs[9]
        },
        {
            .fxnTablePtr = &PWMTimerMSP432_fxnTable,
            .object = &pwmTimerMSP432Objects[10],
            .hwAttrs = &pwmTimerMSP432HWAttrs[10]
        },
        {
            .fxnTablePtr = &PWMTimerMSP432_fxnTable,
            .object = &pwmTimerMSP432Objects[11],
            .hwAttrs = &pwmTimerMSP432HWAttrs[11]
        },
        {NULL, NULL, NULL}
    };
    
    /*
     *  ======== Board_initPWM ========
     */
    void Board_initPWM(void)
    {
        PWM_init();
    }
    
    /*
     *  =============================== SDSPI ===============================
     */
    /* Place into subsections to allow the TI linker to remove items properly */
    #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>
    
    /* SDSPI objects */
    SDSPIMSP432_Object sdspiMSP432Objects[Board_SDSPICOUNT];
    
    /* SDSPI configuration structure, describing which pins are to be used */
    const SDSPIMSP432_HWAttrs sdspiMSP432HWAttrs[Board_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}
    };
    
    /*
     *  ======== Board_initSDSPI ========
     */
    void Board_initSDSPI(void)
    {
        SDSPI_init();
    }
    
    /*
     *  =============================== 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>
    
    /* SPI objects */
    SPIMSP432DMA_Object spiMSP432DMAObjects[Board_SPICOUNT];
    
    /* SPI configuration structure, describing which pins are to be used */
    const SPIMSP432DMA_HWAttrs spiMSP432DMAHWAttrs[Board_SPICOUNT] = {
        {
            .baseAddr = EUSCI_B0_BASE,
            .bitOrder = EUSCI_B_SPI_MSB_FIRST,
            .clockSource = EUSCI_B_SPI_CLOCKSOURCE_SMCLK,
    
            .defaultTxBufValue = 0,
    
            .dmaIntNum = INT_DMA_INT1,
            .intPriority = 0xC0,       /* make SPI interrupt one priority higher than default */
            .rxDMAChannelIndex = DMA_CH1_EUSCIB0RX0,
            .txDMAChannelIndex = DMA_CH0_EUSCIB0TX0
        },
        {
            .baseAddr = EUSCI_B2_BASE,
            .bitOrder = EUSCI_B_SPI_MSB_FIRST,
            .clockSource = EUSCI_B_SPI_CLOCKSOURCE_SMCLK,
    
            .defaultTxBufValue = 0,
    
            .dmaIntNum = INT_DMA_INT2,
            .intPriority = 0xC0,       /* make SPI interrupt one priority higher than default */
            .rxDMAChannelIndex = DMA_CH5_EUSCIB2RX0,
            .txDMAChannelIndex = DMA_CH4_EUSCIB2TX0
        }
    };
    
    const SPI_Config SPI_config[] = {
        {
            .fxnTablePtr = &SPIMSP432DMA_fxnTable,
            .object = &spiMSP432DMAObjects[0],
            .hwAttrs = &spiMSP432DMAHWAttrs[0]
        },
        {
            .fxnTablePtr = &SPIMSP432DMA_fxnTable,
            .object = &spiMSP432DMAObjects[1],
            .hwAttrs = &spiMSP432DMAHWAttrs[1]
        },
        {NULL, NULL, NULL},
    };
    
    /*
     *  ======== Board_openSPI ========
     */
    SPI_Handle Board_openSPI(UInt spiPortIndex, SPI_Params *spiParams)
    {
        /* Initialize the SPI driver */
        /* By design, SPI_init() is idempotent */
        SPI_init();
    
        /* initialize the pins associated with the respective UART */
        switch(spiPortIndex) {
            case 0:
    
                /* 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);
                break;
                
            case 1:
                /* Configure CLK, MOSI & MISO for SPI1 (EUSCI_B2) */
                MAP_GPIO_setAsPeripheralModuleFunctionOutputPin(GPIO_PORT_P3,
                                                                GPIO_PIN5 | GPIO_PIN6,
                                                                GPIO_PRIMARY_MODULE_FUNCTION);
                MAP_GPIO_setAsPeripheralModuleFunctionInputPin(GPIO_PORT_P3,
                                                               GPIO_PIN7,
                                                               GPIO_PRIMARY_MODULE_FUNCTION);
                break;
    
            default:
                return(NULL);
        }
        
        /* open the SPI port */
        return (SPI_open(spiPortIndex, spiParams));
    }
    
    /*
     *  =============================== 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>
    
    /* UART objects */
    UARTMSP432_Object uartMSP432Objects[Board_UARTCOUNT];
    
    /*
     * 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
        },
        {57600,  12000000,  13,  0,  37, 1},
        {38400,  12000000,  19,  8,  85, 1},
        {19200,  12000000,  39,  1,   0, 1},
        {9600,   12000000,  78,  2,   0, 1},
        {4800,   12000000, 156,  4,   0, 1},
    
        {115200, 6000000,    3,  4,   2, 1},
        {57600,  6000000,    6,  8,  32, 1},
        {38400,  6000000,    9, 12,  34, 1},
        {19200,  6000000,   19,  8,  85, 1},
        {9600,   6000000,   39,  1,   0, 1},
        {4800,   6000000,   78,  2,   0, 1},
    
        {115200, 3000000,    1, 10,   0, 1},
        {57600,  3000000,    3,  4,   2, 1},
        {38400,  3000000,    4, 14,   8, 1},
        {19200,  3000000,    9, 12,  34, 1},
        {9600,   3000000,   19,  8,  85, 1},
        {4800,   3000000,   39,  1,   0, 1},
    };
    
    unsigned char uartMSP432RingBuffer0[32];
    unsigned char uartMSP432RingBuffer1[32];
    unsigned char uartMSP432RingBuffer2[32]
    
    /* UART configuration structure */
    const UARTMSP432_HWAttrs uartMSP432HWAttrs[Board_UARTCOUNT] = {
        {
            .baseAddr = EUSCI_A0_BASE,
            .intNum = INT_EUSCIA0,
            .intPriority = (0xc0),
            .clockSource = EUSCI_A_UART_CLOCKSOURCE_SMCLK,
            .bitOrder = EUSCI_A_UART_LSB_FIRST,
            .numBaudrateEntries = sizeof(uartMSP432Baudrates) /
                                  sizeof(UARTMSP432_BaudrateConfig),
            .baudrateLUT = uartMSP432Baudrates,
            .ringBufPtr  = uartMSP432RingBuffer0,
            .ringBufSize = sizeof(uartMSP432RingBuffer0)
        },
        {
            .baseAddr = EUSCI_A2_BASE,
            .intNum = INT_EUSCIA2,
            .intPriority = (0xc0),
            .clockSource = EUSCI_A_UART_CLOCKSOURCE_SMCLK,
            .bitOrder = EUSCI_A_UART_LSB_FIRST,
            .numBaudrateEntries = sizeof(uartMSP432Baudrates) /
                                  sizeof(UARTMSP432_BaudrateConfig),
            .baudrateLUT = uartMSP432Baudrates,
            .ringBufPtr  = uartMSP432RingBuffer1,
            .ringBufSize = sizeof(uartMSP432RingBuffer1)
        }
    	{
    		.baseAddr = EUSCI_A3_BASE,
    		.intNum = INT_EUSCIA3,
    		.intPriority = (0xc0),
    		.clockSource = EUSCI_A_UART_CLOCKSOURCE_SMCLK,
    		.bitOrder = EUSCI_A_UART_LSB_FIRST,
    		.numBaudrateEntries = sizeof(uartMSP432Baudrates) /
    			                  sizeof(UARTMSP432_BaudrateConfig),
    		.baudrateLUT = uartMSP432Baudrates,
    		.ringBufPtr = uartMSP432RingBuffer2,
    		.ringBufSize = sizeof(uartMSP432RingBuffer2)
    	}
    };
    
    const UART_Config UART_config[] = {
        {
            .fxnTablePtr = &UARTMSP432_fxnTable,
            .object = &uartMSP432Objects[0],
            .hwAttrs = &uartMSP432HWAttrs[0]
        },
        {
            .fxnTablePtr = &UARTMSP432_fxnTable,
            .object = &uartMSP432Objects[1],
            .hwAttrs = &uartMSP432HWAttrs[1]
        },
    	{
    		.fxnTablePtr = &UARTMSP432_fxnTable,
    		.object = &uartMSP432Objects[2],
    		.hwAttrs = &uartMSP432HWAttrs[2]
    	},
        {NULL, NULL, NULL}
    };
    
    /*
     *  ======== Board_openUART ========
     *  Initialize the UART driver.
     *  Initialize the UART port's pins.
     *  Open the UART port.
     */
    UART_Handle  Board_openUART(UInt uartPortIndex, UART_Params *uartParams)
    {
        /* Initialize the UART driver */
        /* By design, UART_init() is idempotent */
        UART_init();
    
        /* initialize the pins associated with the respective UART */
        switch(uartPortIndex) {
            case 0:
                /* Set P1.2 & P1.3 in UART mode */
                MAP_GPIO_setAsPeripheralModuleFunctionInputPin(GPIO_PORT_P1,
                                                       GPIO_PIN2 | GPIO_PIN3,
                                                       GPIO_PRIMARY_MODULE_FUNCTION);
                break;
    
            case 1:
                /* Set P3.2 & P3.3 in UART mode */
                MAP_GPIO_setAsPeripheralModuleFunctionInputPin(GPIO_PORT_P3,
                                                       GPIO_PIN2 | GPIO_PIN3,
                                                       GPIO_PRIMARY_MODULE_FUNCTION);
                break;
    		case 3:
    			/* Set P9.6 & P9.7 in UART mode */
    			MAP_GPIO_setAsPeripheralModuleFunctionInputPin(GPIO_PORT_P9,
    				                                   GPIO_PIN6 | GPIO_PIN7,
    				                           GPIO_PRIMARY_MODULE_FUNCTION);
    			break;
            default:
                return (NULL);
        }
    
        /* open the UART */
        return (UART_open(uartPortIndex, uartParams));
    }
    
    /*
     *  =============================== 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>
    
    /* Watchdog objects */
    WatchdogMSP432_Object watchdogMSP432Objects[Board_WATCHDOGCOUNT];
    
    /* Watchdog configuration structure */
    const WatchdogMSP432_HWAttrs watchdogMSP432HWAttrs[Board_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}
    };
    
    /*
     *  ======== Board_initWatchdog ========
     */
    void Board_initWatchdog(void)
    {
        /* Initialize the Watchdog driver */
        Watchdog_init();
    }
    
    #if 0
    /*
     *  =============================== 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>
    
    /* WiFi objects */
    WiFiCC3100_Object wiFiCC3100Objects[Board_WIFICOUNT];
    
    /* WiFi configuration structure */
    const WiFiCC3100_HWAttrs wiFiCC3100HWAttrs[Board_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},
    };
    
    /*
     *  ======== Board_initWiFi ========
     */
    void Board_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();
    }
    #endif
    
    /*
     *  ======== Board_init ========
     */
    void Board_init(void) {
        Board_initGPIO();
        Board_initPWM();
        Board_initPower();
    }
    
    
    HardwareSerial.cppHardwareSerial.h这是我的MSP432的文件,您看一下哪里有问题

  • 您好,我们已将您的问题升级到英文论坛寻求帮助,如有答复将尽快回复您。谢谢!

  • 您好,

    十分抱歉,由于MSP432P401R目前已在走停产流程,我们的团队目前没有可以支持 Energia 方面的专家,我们的任何产品(包括 TM4C)都不支持 Energia。给您带来的任何不便敬请谅解!