/* * 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. */ /* * ======== EK_TM4C123GXL.c ======== * This file is responsible for setting up the board specific items for the * EK_TM4C123GXL board. */ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "EK_TM4C123GXL.h" #ifndef TI_DRIVERS_UART_DMA #define TI_DRIVERS_UART_DMA 0 #endif /* * =============================== DMA =============================== */ #if defined(__TI_COMPILER_VERSION__) #pragma DATA_ALIGN(dmaControlTable, 1024) #elif defined(__IAR_SYSTEMS_ICC__) #pragma data_alignment=1024 #elif defined(__GNUC__) __attribute__ ((aligned (1024))) #endif static tDMAControlTable dmaControlTable[32]; static bool dmaInitialized = false; /* Hwi_Struct used in the initDMA Hwi_construct call */ static Hwi_Struct dmaHwiStruct; /* * ======== dmaErrorHwi ======== */ static Void dmaErrorHwi(UArg arg) { System_printf("DMA error code: %d\n", uDMAErrorStatusGet()); uDMAErrorStatusClear(); System_abort("DMA error!!"); } /* * ======== EK_TM4C123GXL_initDMA ======== */ void EK_TM4C123GXL_initDMA(void) { Error_Block eb; Hwi_Params hwiParams; if (!dmaInitialized) { Error_init(&eb); Hwi_Params_init(&hwiParams); Hwi_construct(&(dmaHwiStruct), INT_UDMAERR, dmaErrorHwi, &hwiParams, &eb); if (Error_check(&eb)) { System_abort("Couldn't construct DMA error hwi"); } SysCtlPeripheralEnable(SYSCTL_PERIPH_UDMA); uDMAEnable(); uDMAControlBaseSet(dmaControlTable); dmaInitialized = true; } } /* * =============================== General =============================== */ /* * ======== EK_TM4C123GXL_initGeneral ======== */ void EK_TM4C123GXL_initGeneral(void) { SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOA); SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOB); SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOC); SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOD); SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOE); SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOF); } /* * =============================== GPIO =============================== */ /* Place into subsections to allow the TI linker to remove items properly */ #if defined(__TI_COMPILER_VERSION__) #pragma DATA_SECTION(GPIOTiva_config, ".const:GPIOTiva_config") #endif #include #include /* * Array of Pin configurations * NOTE: The order of the pin configurations must coincide with what was * defined in EK_TM4C123GXL.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 */ /* EK_TM4C123GXL_GPIO_SW1 */ GPIOTiva_PF_4 | GPIO_CFG_IN_PU | GPIO_CFG_IN_INT_RISING, /* EK_TM4C123GXL_GPIO_SW2 */ GPIOTiva_PF_0 | GPIO_CFG_IN_PU | GPIO_CFG_IN_INT_RISING, /* Output pins */ /* EK_TM4C123GXL_LED_RED */ GPIOTiva_PF_1 | GPIO_CFG_OUT_STD | GPIO_CFG_OUT_STR_HIGH | GPIO_CFG_OUT_LOW, /* EK_TM4C123GXL_LED_BLUE */ GPIOTiva_PF_2 | GPIO_CFG_OUT_STD | GPIO_CFG_OUT_STR_HIGH | GPIO_CFG_OUT_LOW, /* EK_TM4C123GXL_LED_GREEN */ GPIOTiva_PF_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 EK_TM4C123GXL.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[] = { NULL, /* EK_TM4C123GXL_GPIO_SW1 */ NULL /* EK_TM4C123GXL_GPIO_SW2 */ }; /* The device-specific GPIO_config structure */ const GPIOTiva_Config GPIOTiva_config = { .pinConfigs = (GPIO_PinConfig *)gpioPinConfigs, .callbacks = (GPIO_CallbackFxn *)gpioCallbackFunctions, .numberOfPinConfigs = sizeof(gpioPinConfigs)/sizeof(GPIO_PinConfig), .numberOfCallbacks = sizeof(gpioCallbackFunctions)/sizeof(GPIO_CallbackFxn), .intPriority = (~0) }; /* * ======== EK_TM4C123GXL_initGPIO ======== */ void EK_TM4C123GXL_initGPIO(void) { /* EK_TM4C123GXL_GPIO_SW2 - PF0 requires unlocking before configuration */ HWREG(GPIO_PORTF_BASE + GPIO_O_LOCK) = GPIO_LOCK_KEY; HWREG(GPIO_PORTF_BASE + GPIO_O_CR) |= GPIO_PIN_0; GPIOPinTypeGPIOInput(GPIO_PORTF_BASE, GPIO_PIN_0); /* 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(i2cTivaHWAttrs, ".const:i2cTivaHWAttrs") #endif #include #include I2CTiva_Object i2cTivaObjects[EK_TM4C123GXL_I2CCOUNT]; const I2CTiva_HWAttrs i2cTivaHWAttrs[EK_TM4C123GXL_I2CCOUNT] = { { .baseAddr = I2C1_BASE, .intNum = INT_I2C1, .intPriority = (~0) }, { .baseAddr = I2C3_BASE, .intNum = INT_I2C3, .intPriority = (~0) }, }; const I2C_Config I2C_config[] = { { .fxnTablePtr = &I2CTiva_fxnTable, .object = &i2cTivaObjects[0], .hwAttrs = &i2cTivaHWAttrs[0] }, { .fxnTablePtr = &I2CTiva_fxnTable, .object = &i2cTivaObjects[1], .hwAttrs = &i2cTivaHWAttrs[1] }, {NULL, NULL, NULL} }; /* * ======== EK_TM4C123GXL_initI2C ======== */ void EK_TM4C123GXL_initI2C(void) { /* I2C1 Init */ /* Enable the peripheral */ SysCtlPeripheralEnable(SYSCTL_PERIPH_I2C1); /* Configure the appropriate pins to be I2C instead of GPIO. */ GPIOPinConfigure(GPIO_PA6_I2C1SCL); GPIOPinConfigure(GPIO_PA7_I2C1SDA); GPIOPinTypeI2CSCL(GPIO_PORTA_BASE, GPIO_PIN_6); GPIOPinTypeI2C(GPIO_PORTA_BASE, GPIO_PIN_7); /* I2C3 Init */ /* * NOTE: TI-RTOS examples configure pins PD0 & PD1 for SSI3 or I2C3. 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. */ /* Enable the peripheral */ SysCtlPeripheralEnable(SYSCTL_PERIPH_I2C3); /* Configure the appropriate pins to be I2C instead of GPIO. */ GPIOPinConfigure(GPIO_PD0_I2C3SCL); GPIOPinConfigure(GPIO_PD1_I2C3SDA); GPIOPinTypeI2CSCL(GPIO_PORTD_BASE, GPIO_PIN_0); GPIOPinTypeI2C(GPIO_PORTD_BASE, GPIO_PIN_1); /* * These GPIOs are connected to PD0 and PD1 and need to be brought into a * GPIO input state so they don't interfere with I2C communications. */ GPIOPinTypeGPIOInput(GPIO_PORTB_BASE, GPIO_PIN_6); GPIOPinTypeGPIOInput(GPIO_PORTB_BASE, GPIO_PIN_7); I2C_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(pwmTivaHWAttrs, ".const:pwmTivaHWAttrs") #endif #include #include PWMTiva_Object pwmTivaObjects[EK_TM4C123GXL_PWMCOUNT]; const PWMTiva_HWAttrs pwmTivaHWAttrs[EK_TM4C123GXL_PWMCOUNT] = { { .baseAddr = PWM1_BASE, .pwmOutput = PWM_OUT_6, .pwmGenOpts = PWM_GEN_MODE_DOWN | PWM_GEN_MODE_DBG_RUN }, { .baseAddr = PWM1_BASE, .pwmOutput = PWM_OUT_7, .pwmGenOpts = PWM_GEN_MODE_DOWN | PWM_GEN_MODE_DBG_RUN } }; const PWM_Config PWM_config[] = { { .fxnTablePtr = &PWMTiva_fxnTable, .object = &pwmTivaObjects[0], .hwAttrs = &pwmTivaHWAttrs[0] }, { .fxnTablePtr = &PWMTiva_fxnTable, .object = &pwmTivaObjects[1], .hwAttrs = &pwmTivaHWAttrs[1] }, {NULL, NULL, NULL} }; /* * ======== EK_TM4C123GXL_initPWM ======== */ void EK_TM4C123GXL_initPWM(void) { /* Enable PWM peripherals */ SysCtlPeripheralEnable(SYSCTL_PERIPH_PWM1); /* * Enable PWM output on GPIO pins. Board_LED1 and Board_LED2 are now * controlled by PWM peripheral - Do not use GPIO APIs. */ GPIOPinConfigure(GPIO_PF2_M1PWM6); GPIOPinConfigure(GPIO_PF3_M1PWM7); GPIOPinTypePWM(GPIO_PORTF_BASE, GPIO_PIN_2 |GPIO_PIN_3); 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(sdspiTivaHWattrs, ".const:sdspiTivaHWattrs") #endif #include #include SDSPITiva_Object sdspiTivaObjects[EK_TM4C123GXL_SDSPICOUNT]; const SDSPITiva_HWAttrs sdspiTivaHWattrs[EK_TM4C123GXL_SDSPICOUNT] = { { .baseAddr = SSI2_BASE, .portSCK = GPIO_PORTB_BASE, .pinSCK = GPIO_PIN_4, .portMISO = GPIO_PORTB_BASE, .pinMISO = GPIO_PIN_6, .portMOSI = GPIO_PORTB_BASE, .pinMOSI = GPIO_PIN_7, .portCS = GPIO_PORTA_BASE, .pinCS = GPIO_PIN_5, } }; const SDSPI_Config SDSPI_config[] = { { .fxnTablePtr = &SDSPITiva_fxnTable, .object = &sdspiTivaObjects[0], .hwAttrs = &sdspiTivaHWattrs[0] }, {NULL, NULL, NULL} }; /* * ======== EK_TM4C123GXL_initSDSPI ======== */ void EK_TM4C123GXL_initSDSPI(void) { /* Enable the peripherals used by the SD Card */ SysCtlPeripheralEnable(SYSCTL_PERIPH_SSI2); /* Configure pad settings */ GPIOPadConfigSet(GPIO_PORTB_BASE, GPIO_PIN_4 | GPIO_PIN_7, GPIO_STRENGTH_4MA, GPIO_PIN_TYPE_STD); GPIOPadConfigSet(GPIO_PORTB_BASE, GPIO_PIN_6, GPIO_STRENGTH_4MA, GPIO_PIN_TYPE_STD_WPU); GPIOPadConfigSet(GPIO_PORTA_BASE, GPIO_PIN_5, GPIO_STRENGTH_4MA, GPIO_PIN_TYPE_STD); GPIOPinConfigure(GPIO_PB4_SSI2CLK); GPIOPinConfigure(GPIO_PB6_SSI2RX); GPIOPinConfigure(GPIO_PB7_SSI2TX); /* * These GPIOs are connected to PB6 and PB7 and need to be brought into a * GPIO input state so they don't interfere with SPI communications. */ GPIOPinTypeGPIOInput(GPIO_PORTD_BASE, GPIO_PIN_0); GPIOPinTypeGPIOInput(GPIO_PORTD_BASE, GPIO_PIN_1); 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(spiTivaDMAHWAttrs, ".const:spiTivaDMAHWAttrs") #endif #include #include SPITivaDMA_Object spiTivaDMAObjects[EK_TM4C123GXL_SPICOUNT]; #if defined(__TI_COMPILER_VERSION__) #pragma DATA_ALIGN(spiTivaDMAscratchBuf, 32) #elif defined(__IAR_SYSTEMS_ICC__) #pragma data_alignment=32 #elif defined(__GNUC__) __attribute__ ((aligned (32))) #endif uint32_t spiTivaDMAscratchBuf[EK_TM4C123GXL_SPICOUNT]; const SPITivaDMA_HWAttrs spiTivaDMAHWAttrs[EK_TM4C123GXL_SPICOUNT] = { { .baseAddr = SSI0_BASE, .intNum = INT_SSI0, .intPriority = (~0), .scratchBufPtr = &spiTivaDMAscratchBuf[0], .defaultTxBufValue = 0, .rxChannelIndex = UDMA_CHANNEL_SSI0RX, .txChannelIndex = UDMA_CHANNEL_SSI0TX, .channelMappingFxn = uDMAChannelAssign, .rxChannelMappingFxnArg = UDMA_CH10_SSI0RX, .txChannelMappingFxnArg = UDMA_CH11_SSI0TX }, { .baseAddr = SSI2_BASE, .intNum = INT_SSI2, .intPriority = (~0), .scratchBufPtr = &spiTivaDMAscratchBuf[1], .defaultTxBufValue = 0, .rxChannelIndex = UDMA_SEC_CHANNEL_UART2RX_12, .txChannelIndex = UDMA_SEC_CHANNEL_UART2TX_13, .channelMappingFxn = uDMAChannelAssign, .rxChannelMappingFxnArg = UDMA_CH12_SSI2RX, .txChannelMappingFxnArg = UDMA_CH13_SSI2TX }, { .baseAddr = SSI3_BASE, .intNum = INT_SSI3, .intPriority = (~0), .scratchBufPtr = &spiTivaDMAscratchBuf[2], .defaultTxBufValue = 0, .rxChannelIndex = UDMA_SEC_CHANNEL_TMR2A_14, .txChannelIndex = UDMA_SEC_CHANNEL_TMR2B_15, .channelMappingFxn = uDMAChannelAssign, .rxChannelMappingFxnArg = UDMA_CH14_SSI3RX, .txChannelMappingFxnArg = UDMA_CH15_SSI3TX } }; const SPI_Config SPI_config[] = { { .fxnTablePtr = &SPITivaDMA_fxnTable, .object = &spiTivaDMAObjects[0], .hwAttrs = &spiTivaDMAHWAttrs[0] }, { .fxnTablePtr = &SPITivaDMA_fxnTable, .object = &spiTivaDMAObjects[1], .hwAttrs = &spiTivaDMAHWAttrs[1] }, { .fxnTablePtr = &SPITivaDMA_fxnTable, .object = &spiTivaDMAObjects[2], .hwAttrs = &spiTivaDMAHWAttrs[2] }, {NULL, NULL, NULL}, }; /* * ======== EK_TM4C123GXL_initSPI ======== */ void EK_TM4C123GXL_initSPI(void) { /* SPI0 */ SysCtlPeripheralEnable(SYSCTL_PERIPH_SSI0); /* Need to unlock PF0 */ GPIOPinConfigure(GPIO_PA2_SSI0CLK); GPIOPinConfigure(GPIO_PA3_SSI0FSS); GPIOPinConfigure(GPIO_PA4_SSI0RX); GPIOPinConfigure(GPIO_PA5_SSI0TX); GPIOPinTypeSSI(GPIO_PORTA_BASE, GPIO_PIN_2 | GPIO_PIN_3 | GPIO_PIN_4 | GPIO_PIN_5); /* SSI2 */ SysCtlPeripheralEnable(SYSCTL_PERIPH_SSI2); GPIOPinConfigure(GPIO_PB4_SSI2CLK); GPIOPinConfigure(GPIO_PB5_SSI2FSS); GPIOPinConfigure(GPIO_PB6_SSI2RX); GPIOPinConfigure(GPIO_PB7_SSI2TX); GPIOPinTypeSSI(GPIO_PORTB_BASE, GPIO_PIN_4 | GPIO_PIN_5 | GPIO_PIN_6 | GPIO_PIN_7); /* SSI3 */ /* * NOTE: TI-RTOS examples configure pins PD0 & PD1 for SSI3 or I2C3. 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. */ SysCtlPeripheralEnable(SYSCTL_PERIPH_SSI3); GPIOPinConfigure(GPIO_PD0_SSI3CLK); GPIOPinConfigure(GPIO_PD1_SSI3FSS); GPIOPinConfigure(GPIO_PD2_SSI3RX); GPIOPinConfigure(GPIO_PD3_SSI3TX); GPIOPinTypeSSI(GPIO_PORTD_BASE, GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2 | GPIO_PIN_3); EK_TM4C123GXL_initDMA(); 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(uartTivaHWAttrs, ".const:uartTivaHWAttrs") #endif #include #if TI_DRIVERS_UART_DMA #include UARTTivaDMA_Object uartTivaObjects[EK_TM4C123GXL_UARTCOUNT]; const UARTTivaDMA_HWAttrs uartTivaHWAttrs[EK_TM4C123GXL_UARTCOUNT] = { { .baseAddr = UART0_BASE, .intNum = INT_UART0, .intPriority = (~0), .rxChannelIndex = UDMA_CH8_UART0RX, .txChannelIndex = UDMA_CH9_UART0TX, } }; const UART_Config UART_config[] = { { .fxnTablePtr = &UARTTivaDMA_fxnTable, .object = &uartTivaObjects[0], .hwAttrs = &uartTivaHWAttrs[0] }, {NULL, NULL, NULL} }; #else #include UARTTiva_Object uartTivaObjects[EK_TM4C123GXL_UARTCOUNT]; unsigned char uartTivaRingBuffer[EK_TM4C123GXL_UARTCOUNT][32]; /* UART configuration structure */ const UARTTiva_HWAttrs uartTivaHWAttrs[EK_TM4C123GXL_UARTCOUNT] = { { .baseAddr = UART0_BASE, .intNum = INT_UART0, .intPriority = (~0), .flowControl = UART_FLOWCONTROL_NONE, .ringBufPtr = uartTivaRingBuffer[0], .ringBufSize = sizeof(uartTivaRingBuffer[0]) } }; const UART_Config UART_config[] = { { .fxnTablePtr = &UARTTiva_fxnTable, .object = &uartTivaObjects[0], .hwAttrs = &uartTivaHWAttrs[0] }, {NULL, NULL, NULL} }; #endif /* TI_DRIVERS_UART_DMA */ /* * ======== EK_TM4C123GXL_initUART ======== */ void EK_TM4C123GXL_initUART(void) { /* Enable and configure the peripherals used by the uart. */ SysCtlPeripheralEnable(SYSCTL_PERIPH_UART0); GPIOPinConfigure(GPIO_PA0_U0RX); GPIOPinConfigure(GPIO_PA1_U0TX); GPIOPinTypeUART(GPIO_PORTA_BASE, GPIO_PIN_0 | GPIO_PIN_1); /* Initialize the UART driver */ #if TI_DRIVERS_UART_DMA EK_TM4C123GXL_initDMA(); #endif UART_init(); } /* * =============================== USB =============================== */ /* * ======== EK_TM4C123GXL_initUSB ======== * This function just turns on the USB */ void EK_TM4C123GXL_initUSB(EK_TM4C123GXL_USBMode usbMode) { /* Enable the USB peripheral and PLL */ SysCtlPeripheralEnable(SYSCTL_PERIPH_USB0); SysCtlUSBPLLEnable(); /* Setup pins for USB operation */ GPIOPinTypeUSBAnalog(GPIO_PORTD_BASE, GPIO_PIN_4 | GPIO_PIN_5); if (usbMode == EK_TM4C123GXL_USBHOST) { System_abort("USB host not supported\n"); } } /* * =============================== 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(watchdogTivaHWAttrs, ".const:watchdogTivaHWAttrs") #endif #include #include WatchdogTiva_Object watchdogTivaObjects[EK_TM4C123GXL_WATCHDOGCOUNT]; const WatchdogTiva_HWAttrs watchdogTivaHWAttrs[EK_TM4C123GXL_WATCHDOGCOUNT] = { { .baseAddr = WATCHDOG0_BASE, .intNum = INT_WATCHDOG, .intPriority = (~0), .reloadValue = 80000000 // 1 second period at default CPU clock freq }, }; const Watchdog_Config Watchdog_config[] = { { .fxnTablePtr = &WatchdogTiva_fxnTable, .object = &watchdogTivaObjects[0], .hwAttrs = &watchdogTivaHWAttrs[0] }, {NULL, NULL, NULL}, }; /* * ======== EK_TM4C123GXL_initWatchdog ======== * * NOTE: To use the other watchdog timer with base address WATCHDOG1_BASE, * an additional function call may need be made to enable PIOSC. Enabling * WDOG1 does not do this. Enabling another peripheral that uses PIOSC * such as ADC0 or SSI0, however, will do so. Example: * * SysCtlPeripheralEnable(SYSCTL_PERIPH_ADC0); * SysCtlPeripheralEnable(SYSCTL_PERIPH_WDOG1); * * See the following forum post for more information: * http://e2e.ti.com/support/microcontrollers/stellaris_arm_cortex-m3_microcontroller/f/471/p/176487/654390.aspx#654390 */ void EK_TM4C123GXL_initWatchdog(void) { /* Enable peripherals used by Watchdog */ SysCtlPeripheralEnable(SYSCTL_PERIPH_WDOG0); 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 #include WiFiCC3100_Object wiFiCC3100Objects[EK_TM4C123GXL_WIFICOUNT]; const WiFiCC3100_HWAttrs wiFiCC3100HWAttrs[EK_TM4C123GXL_WIFICOUNT] = { { .irqPort = GPIO_PORTB_BASE, .irqPin = GPIO_PIN_2, .irqIntNum = INT_GPIOB, .csPort = GPIO_PORTE_BASE, .csPin = GPIO_PIN_0, .enPort = GPIO_PORTE_BASE, .enPin = GPIO_PIN_4 } }; const WiFi_Config WiFi_config[] = { { .fxnTablePtr = &WiFiCC3100_fxnTable, .object = &wiFiCC3100Objects[0], .hwAttrs = &wiFiCC3100HWAttrs[0] }, {NULL,NULL, NULL}, }; /* * ======== EK_TM4C123GXL_initWiFi ======== */ void EK_TM4C123GXL_initWiFi(void) { /* Configure EN & CS pins to disable CC3100 */ GPIOPinTypeGPIOOutput(GPIO_PORTE_BASE, GPIO_PIN_0 | GPIO_PIN_4); GPIOPinWrite(GPIO_PORTE_BASE, GPIO_PIN_0, GPIO_PIN_0); GPIOPinWrite(GPIO_PORTE_BASE, GPIO_PIN_4, 0); /* Configure SSI2 for CC3100 */ SysCtlPeripheralEnable(SYSCTL_PERIPH_SSI2); GPIOPinConfigure(GPIO_PB4_SSI2CLK); GPIOPinConfigure(GPIO_PB6_SSI2RX); GPIOPinConfigure(GPIO_PB7_SSI2TX); GPIOPinTypeSSI(GPIO_PORTB_BASE, GPIO_PIN_4 | GPIO_PIN_6 | GPIO_PIN_7); /* Configure IRQ pin */ GPIOPinTypeGPIOInput(GPIO_PORTB_BASE, GPIO_PIN_2); GPIOPadConfigSet(GPIO_PORTB_BASE, GPIO_PIN_2, GPIO_STRENGTH_2MA, GPIO_PIN_TYPE_STD_WPD); GPIOIntTypeSet(GPIO_PORTB_BASE, GPIO_PIN_2, GPIO_RISING_EDGE); SPI_init(); EK_TM4C123GXL_initDMA(); WiFi_init(); }