/* * Copyright (c) 2014, 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_TM4C1294XL.c ======== * This file is responsible for setting up the board specific items for the * EK_TM4C1294XL board. * * The following defines are used to determine which TI-RTOS peripheral drivers * to include: * TI_DRIVERS_EMAC_INCLUDED * TI_DRIVERS_GPIO_INCLUDED * TI_DRIVERS_I2C_INCLUDED * TI_DRIVERS_SDSPI_INCLUDED * TI_DRIVERS_SPI_INCLUDED * TI_DRIVERS_UART_INCLUDED * TI_DRIVERS_USBMSCHFATFS_INCLUDED * TI_DRIVERS_WATCHDOG_INCLUDED * TI_DRIVERS_WIFI_INCLUDED * These defines are created when a useModule is done on the driver in the * application's .cfg file. The actual #define is in the application * generated header file that is brought in via the xdc/cfg/global.h. * For example the following in the .cfg file * var GPIO = xdc.useModule('ti.drivers.GPIO'); * Generates the following * #define TI_DRIVERS_GPIO_INCLUDED 1 * If there is no useModule of ti.drivers.GPIO, the constant is set to 0. * * Note: a useModule is generated in the .cfg file via the graphical * configuration tool when the "Add xxx to my configuration" is checked * or "Use xxx" is selected. */ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "EK_TM4C1294XL.h" #if defined(ccs) #pragma DATA_ALIGN(EK_TM4C1294XL_DMAControlTable, 1024) #elif defined(ewarm) #pragma data_alignment=1024 #elif defined(gcc) __attribute__ ((aligned (1024))) #endif static tDMAControlTable EK_TM4C1294XL_DMAControlTable[32]; static Bool DMA_initialized = false; /* Hwi_Struct used in the initDMA Hwi_construct call */ static Hwi_Struct dmaHwiStruct; /* Hwi_Struct used in the usbBusFault Hwi_construct call */ static Hwi_Struct usbBusFaultHwiStruct; /* * ======== EK_TM4C1294XL_errorDMAHwi ======== */ static Void EK_TM4C1294XL_errorDMAHwi(UArg arg) { System_printf("DMA error code: %d\n", uDMAErrorStatusGet()); uDMAErrorStatusClear(); System_abort("DMA error!!"); } /* * ======== EK_TM4C1294XL_usbBusFaultHwi ======== */ static Void EK_TM4C1294XL_usbBusFaultHwi(UArg arg) { /* * This function should be modified to appropriately manage handle * a USB bus fault. */ System_printf("USB bus fault detected."); Hwi_clearInterrupt(INT_GPIOQ4); System_abort("USB error!!"); } /* * ======== EK_TM4C1294XL_initDMA ======== */ void EK_TM4C1294XL_initDMA(void) { Error_Block eb; Hwi_Params hwiParams; if(!DMA_initialized){ Error_init(&eb); Hwi_Params_init(&hwiParams); Hwi_construct(&(dmaHwiStruct), INT_UDMAERR, EK_TM4C1294XL_errorDMAHwi, &hwiParams, &eb); if (Error_check(&eb)) { System_abort("Couldn't construct DMA error hwi"); } SysCtlPeripheralEnable(SYSCTL_PERIPH_UDMA); uDMAEnable(); uDMAControlBaseSet(EK_TM4C1294XL_DMAControlTable); DMA_initialized = true; } } /* * ======== EK_TM4C1294XL_initGeneral ======== */ void EK_TM4C1294XL_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); SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOG); SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOH); SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOJ); SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOK); SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOL); SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOM); SysCtlPeripheralEnable(SYSCTL_PERIPH_GPION); SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOP); SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOQ); SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOR); SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOS); SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOT); } #if TI_DRIVERS_EMAC_INCLUDED #include #include /* * Required by the Networking Stack (NDK). This array must be NULL terminated. * This can be removed if NDK is not used. * Double curly braces are needed to avoid GCC bug #944572 * https://bugs.launchpad.net/gcc-linaro/+bug/944572 */ NIMU_DEVICE_TABLE_ENTRY NIMUDeviceTable[2] = {{EMACSnow_NIMUInit}, {NULL}}; /* EMAC objects */ EMACSnow_Object emacObjects[EK_TM4C1294XL_EMACCOUNT]; /* * EMAC configuration structure * Set user/company specific MAC octates. The following sets the address * to ff-ff-ff-ff-ff-ff. Users need to change this to make the label on * their boards. */ unsigned char macAddress[6] = {0xff, 0xff, 0xff, 0xff, 0xff, 0xff}; const EMACSnow_HWAttrs emacHWAttrs[EK_TM4C1294XL_EMACCOUNT] = { {EMAC0_BASE, INT_EMAC0, macAddress} }; const EMAC_Config EMAC_config[] = { { &EMACSnow_fxnTable, &emacObjects[0], &emacHWAttrs[0] }, {NULL, NULL, NULL} }; /* * ======== EK_TM4C1294XL_initEMAC ======== */ void EK_TM4C1294XL_initEMAC(void) { uint32_t ulUser0, ulUser1; /* Get the MAC address */ FlashUserGet(&ulUser0, &ulUser1); if ((ulUser0 != 0xffffffff) && (ulUser1 != 0xffffffff)) { System_printf("Using MAC address in flash\n"); /* * Convert the 24/24 split MAC address from NV ram into a 32/16 split MAC * address needed to program the hardware registers, then program the MAC * address into the Ethernet Controller registers. */ macAddress[0] = ((ulUser0 >> 0) & 0xff); macAddress[1] = ((ulUser0 >> 8) & 0xff); macAddress[2] = ((ulUser0 >> 16) & 0xff); macAddress[3] = ((ulUser1 >> 0) & 0xff); macAddress[4] = ((ulUser1 >> 8) & 0xff); macAddress[5] = ((ulUser1 >> 16) & 0xff); } else if (macAddress[0] == 0xff && macAddress[1] == 0xff && macAddress[2] == 0xff && macAddress[3] == 0xff && macAddress[4] == 0xff && macAddress[5] == 0xff) { System_abort("Change the macAddress variable to match your boards MAC sticker"); } GPIOPinConfigure(GPIO_PF0_EN0LED0); /* EK_TM4C1294XL_USR_D3 */ GPIOPinConfigure(GPIO_PF4_EN0LED1); /* EK_TM4C1294XL_USR_D4 */ GPIOPinTypeEthernetLED(GPIO_PORTF_BASE, GPIO_PIN_0 | GPIO_PIN_4); /* Once EMAC_init is called, EMAC_config cannot be changed */ EMAC_init(); } #endif /* TI_DRIVERS_EMAC_INCLUDED */ #if TI_DRIVERS_GPIO_INCLUDED #include /* Callback functions for the GPIO interrupt example. */ void gpioButtonFxn0(void); void gpioButtonFxn1(void); /* GPIO configuration structure */ const GPIO_HWAttrs gpioHWAttrs[EK_TM4C1294XL_GPIOCOUNT] = { {GPIO_PORTN_BASE, GPIO_PIN_1, GPIO_OUTPUT}, /* EK_TM4C1294XL_USR_D1 */ {GPIO_PORTN_BASE, GPIO_PIN_0, GPIO_OUTPUT}, /* EK_TM4C1294XL_USR_D2 */ {GPIO_PORTJ_BASE, GPIO_PIN_0, GPIO_INPUT}, /* EK_TM4C1294XL_USR_SW1 */ {GPIO_PORTJ_BASE, GPIO_PIN_1, GPIO_INPUT} /* EK_TM4C1294XL_USR_SW2 */ }; /* Memory for the GPIO module to construct a Hwi */ Hwi_Struct callbackPortJHwi; const GPIO_Callbacks EK_TM4C1294XL_gpioPortJCallbacks = { GPIO_PORTJ_BASE, INT_GPIOJ, &callbackPortJHwi, {gpioButtonFxn0, gpioButtonFxn1, NULL, NULL, NULL, NULL, NULL, NULL} }; const GPIO_Config GPIO_config[] = { {&gpioHWAttrs[0]}, {&gpioHWAttrs[1]}, {&gpioHWAttrs[2]}, {&gpioHWAttrs[3]}, {NULL}, }; /* * ======== EK_TM4C1294XL_initGPIO ======== */ void EK_TM4C1294XL_initGPIO(void) { /* Setup the LED GPIO pins used */ GPIOPinTypeGPIOOutput(GPIO_PORTN_BASE, GPIO_PIN_0 | GPIO_PIN_1); /* Setup the button GPIO pins used */ GPIOPinTypeGPIOInput(GPIO_PORTJ_BASE, GPIO_PIN_0 | GPIO_PIN_1); GPIOPadConfigSet(GPIO_PORTJ_BASE, GPIO_PIN_0 | GPIO_PIN_1, GPIO_STRENGTH_2MA, GPIO_PIN_TYPE_STD_WPU); /* Once GPIO_init is called, GPIO_config cannot be changed */ GPIO_init(); } #endif /* TI_DRIVERS_GPIO_INCLUDED */ #if TI_DRIVERS_I2C_INCLUDED #include #include /* I2C objects */ I2CTiva_Object i2cTivaObjects[EK_TM4C1294XL_I2CCOUNT]; /* I2C configuration structure, describing which pins are to be used */ const I2CTiva_HWAttrs i2cTivaHWAttrs[EK_TM4C1294XL_I2CCOUNT] = { {I2C0_BASE, INT_I2C0}, {I2C2_BASE, INT_I2C2}, {I2C7_BASE, INT_I2C7}, {I2C8_BASE, INT_I2C8} }; const I2C_Config I2C_config[] = { {&I2CTiva_fxnTable, &i2cTivaObjects[0], &i2cTivaHWAttrs[0]}, {&I2CTiva_fxnTable, &i2cTivaObjects[1], &i2cTivaHWAttrs[1]}, {&I2CTiva_fxnTable, &i2cTivaObjects[2], &i2cTivaHWAttrs[2]}, {&I2CTiva_fxnTable, &i2cTivaObjects[2], &i2cTivaHWAttrs[3]}, {NULL, NULL, NULL} }; /* * ======== EK_TM4C1294XL_initI2C ======== */ void EK_TM4C1294XL_initI2C(void) { /* I2C0 Init */ /* Enable the peripheral */ SysCtlPeripheralEnable(SYSCTL_PERIPH_I2C0); /* Configure the appropriate pins to be I2C instead of GPIO. */ GPIOPinConfigure(GPIO_PB2_I2C0SCL); GPIOPinConfigure(GPIO_PB3_I2C0SDA); GPIOPinTypeI2CSCL(GPIO_PORTB_BASE, GPIO_PIN_2); GPIOPinTypeI2C(GPIO_PORTB_BASE, GPIO_PIN_3); /* I2C2 Init */ /* Enable the peripheral */ SysCtlPeripheralEnable(SYSCTL_PERIPH_I2C2); /* Configure the appropriate pins to be I2C instead of GPIO. */ GPIOPinConfigure(GPIO_PN5_I2C2SCL); GPIOPinConfigure(GPIO_PN4_I2C2SDA); GPIOPinTypeI2CSCL(GPIO_PORTN_BASE, GPIO_PIN_5); GPIOPinTypeI2C(GPIO_PORTN_BASE, GPIO_PIN_4); /* I2C7 Init */ /* Enable the peripheral */ SysCtlPeripheralEnable(SYSCTL_PERIPH_I2C7); /* Configure the appropriate pins to be I2C instead of GPIO. */ GPIOPinConfigure(GPIO_PD0_I2C7SCL); GPIOPinConfigure(GPIO_PD1_I2C7SDA); GPIOPinTypeI2CSCL(GPIO_PORTD_BASE, GPIO_PIN_0); GPIOPinTypeI2C(GPIO_PORTD_BASE, GPIO_PIN_1); /* I2C8 Init */ /* Enable the peripheral */ SysCtlPeripheralEnable(SYSCTL_PERIPH_I2C8); /* Configure the appropriate pins to be I2C instead of GPIO. */ GPIOPinConfigure(GPIO_PA2_I2C8SCL); GPIOPinConfigure(GPIO_PA3_I2C8SDA); GPIOPinTypeI2CSCL(GPIO_PORTA_BASE, GPIO_PIN_2); GPIOPinTypeI2C(GPIO_PORTA_BASE, GPIO_PIN_3); I2C_init(); } #endif /* TI_DRIVERS_I2C_INCLUDED */ #if TI_DRIVERS_SDSPI_INCLUDED #include #include /* SDSPI objects */ SDSPITiva_Object sdspiTivaobjects[EK_TM4C1294XL_SDSPICOUNT]; /* SDSPI configuration structure, describing which pins are to be used */ const SDSPITiva_HWAttrs sdspiTivaHWattrs[EK_TM4C1294XL_SDSPICOUNT] = { { SSI2_BASE, /* SPI base address */ GPIO_PORTD_BASE, /* The GPIO port used for the SPI pins */ GPIO_PIN_3, /* SCK */ GPIO_PIN_0, /* MISO */ GPIO_PIN_1, /* MOSI */ GPIO_PORTC_BASE, /* Chip select port */ GPIO_PIN_7, /* Chip select pin */ GPIO_PORTB_BASE, /* GPIO TX port */ GPIO_PIN_1, /* GPIO TX pin */ }, { SSI3_BASE, /* SPI base address */ GPIO_PORTQ_BASE, /* The GPIO port used for the SPI pins */ GPIO_PIN_0, /* SCK */ GPIO_PIN_3, /* MISO */ GPIO_PIN_2, /* MOSI */ GPIO_PORTP_BASE, /* Chip select port */ GPIO_PIN_4, /* Chip select pin */ GPIO_PORTQ_BASE, /* GPIO TX port */ GPIO_PIN_2, /* GPIO TX pin */ } }; const SDSPI_Config SDSPI_config[] = { {&SDSPITiva_fxnTable, &sdspiTivaobjects[0], &sdspiTivaHWattrs[0]}, {&SDSPITiva_fxnTable, &sdspiTivaobjects[1], &sdspiTivaHWattrs[1]}, {NULL, NULL, NULL} }; /* * ======== EK_TM4C1294XL_initSDSPI ======== */ void EK_TM4C1294XL_initSDSPI(void) { /* SDSPI0 configuration */ /* Enable the peripherals used by the SD Card */ SysCtlPeripheralEnable(SYSCTL_PERIPH_SSI2); /* Configure pad settings */ GPIOPadConfigSet(GPIO_PORTD_BASE, GPIO_PIN_3 | GPIO_PIN_1, GPIO_STRENGTH_4MA, GPIO_PIN_TYPE_STD); GPIOPadConfigSet(GPIO_PORTD_BASE, GPIO_PIN_0, GPIO_STRENGTH_4MA, GPIO_PIN_TYPE_STD_WPU); GPIOPadConfigSet(GPIO_PORTC_BASE, GPIO_PIN_7, GPIO_STRENGTH_4MA, GPIO_PIN_TYPE_STD); GPIOPinConfigure(GPIO_PD3_SSI2CLK); GPIOPinConfigure(GPIO_PD0_SSI2XDAT1); GPIOPinConfigure(GPIO_PD1_SSI2XDAT0); /* SDSPI1 configuration */ /* Enable the peripherals used by the SD Card */ SysCtlPeripheralEnable(SYSCTL_PERIPH_SSI3); /* Configure pad settings */ GPIOPadConfigSet(GPIO_PORTQ_BASE, GPIO_PIN_0 | GPIO_PIN_2, GPIO_STRENGTH_4MA, GPIO_PIN_TYPE_STD); GPIOPadConfigSet(GPIO_PORTQ_BASE, GPIO_PIN_3, GPIO_STRENGTH_4MA, GPIO_PIN_TYPE_STD_WPU); GPIOPadConfigSet(GPIO_PORTP_BASE, GPIO_PIN_4, GPIO_STRENGTH_4MA, GPIO_PIN_TYPE_STD); GPIOPinConfigure(GPIO_PQ0_SSI3CLK); GPIOPinConfigure(GPIO_PQ3_SSI3XDAT1); GPIOPinConfigure(GPIO_PQ2_SSI3XDAT0); /* * These GPIOs are connected to PA2 and PA3 and need to be brought into a * GPIO input state so they don't interfere with SPI communications. */ GPIOPinTypeGPIOInput(GPIO_PORTA_BASE, GPIO_PIN_2); GPIOPinTypeGPIOInput(GPIO_PORTA_BASE, GPIO_PIN_3); SDSPI_init(); } #endif /* TI_DRIVERS_SDSPI_INCLUDED */ #if TI_DRIVERS_SPI_INCLUDED #include #include /* SPI objects */ SPITivaDMA_Object spiTivaDMAobjects[EK_TM4C1294XL_SPICOUNT]; #if defined(ccs) #pragma DATA_ALIGN(spiTivaDMAscratchBuf, 32) #elif defined(ewarm) #pragma data_alignment=32 #elif defined(gcc) __attribute__ ((aligned (32))) #endif uint32_t spiTivaDMAscratchBuf[EK_TM4C1294XL_SPICOUNT]; /* SPI configuration structure, describing which pins are to be used */ const SPITivaDMA_HWAttrs spiTivaDMAHWAttrs[EK_TM4C1294XL_SPICOUNT] = { { SSI2_BASE, INT_SSI2, &spiTivaDMAscratchBuf[0], 0, UDMA_SEC_CHANNEL_UART2RX_12, UDMA_SEC_CHANNEL_UART2TX_13, uDMAChannelAssign, UDMA_CH12_SSI2RX, UDMA_CH13_SSI2TX }, { SSI3_BASE, INT_SSI3, &spiTivaDMAscratchBuf[1], 0, UDMA_SEC_CHANNEL_TMR2A_14, UDMA_SEC_CHANNEL_TMR2B_15, uDMAChannelAssign, UDMA_CH14_SSI3RX, UDMA_CH15_SSI3TX } }; const SPI_Config SPI_config[] = { {&SPITivaDMA_fxnTable, &spiTivaDMAobjects[0], &spiTivaDMAHWAttrs[0]}, {&SPITivaDMA_fxnTable, &spiTivaDMAobjects[1], &spiTivaDMAHWAttrs[1]}, {NULL, NULL, NULL} }; /* * ======== EK_TM4C1294XL_initSPI ======== */ void EK_TM4C1294XL_initSPI(void) { /* SSI2 */ SysCtlPeripheralEnable(SYSCTL_PERIPH_SSI2); GPIOPinConfigure(GPIO_PD3_SSI2CLK); GPIOPinConfigure(GPIO_PD2_SSI2FSS); GPIOPinConfigure(GPIO_PD1_SSI2XDAT0); GPIOPinConfigure(GPIO_PD0_SSI2XDAT1); GPIOPinTypeSSI(GPIO_PORTD_BASE, GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2 | GPIO_PIN_3); /* SSI3 */ SysCtlPeripheralEnable(SYSCTL_PERIPH_SSI3); GPIOPinConfigure(GPIO_PQ0_SSI3CLK); GPIOPinConfigure(GPIO_PQ1_SSI3FSS); GPIOPinConfigure(GPIO_PQ2_SSI3XDAT0); GPIOPinConfigure(GPIO_PQ3_SSI3XDAT1); GPIOPinTypeSSI(GPIO_PORTQ_BASE, GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2 | GPIO_PIN_3); EK_TM4C1294XL_initDMA(); SPI_init(); } #endif /* TI_DRIVERS_SPI_INCLUDED */ #if TI_DRIVERS_UART_INCLUDED #include #include /* UART objects */ UARTTiva_Object uartTivaObjects[EK_TM4C1294XL_UARTCOUNT]; /* UART configuration structure */ const UARTTiva_HWAttrs uartTivaHWAttrs[EK_TM4C1294XL_UARTCOUNT] = { {UART0_BASE, INT_UART0}, /* EK_TM4C1294XL_UART0 */ {UART2_BASE, INT_UART2}, /* EK_TM4C1294XL_UART2 */ {UART6_BASE, INT_UART6}, /* EK_TM4C1294XL_UART6 */ {UART7_BASE, INT_UART7} /* EK_TM4C1294XL_UART7 */ }; const UART_Config UART_config[] = { {&UARTTiva_fxnTable, &uartTivaObjects[0], &uartTivaHWAttrs[0]}, {&UARTTiva_fxnTable, &uartTivaObjects[1], &uartTivaHWAttrs[1]}, {&UARTTiva_fxnTable, &uartTivaObjects[2], &uartTivaHWAttrs[2]}, {&UARTTiva_fxnTable, &uartTivaObjects[3], &uartTivaHWAttrs[3]}, {NULL, NULL, NULL} }; /* * ======== EK_TM4C1294XL_initUART ======== */ void EK_TM4C1294XL_initUART(void) { /* Enable and configure the peripherals used by the UART0 */ SysCtlPeripheralEnable(SYSCTL_PERIPH_UART0); GPIOPinConfigure(GPIO_PA0_U0RX); GPIOPinConfigure(GPIO_PA1_U0TX); GPIOPinTypeUART(GPIO_PORTA_BASE, GPIO_PIN_0 | GPIO_PIN_1); /* Enable and configure the peripherals used by the UART2 */ SysCtlPeripheralEnable(SYSCTL_PERIPH_UART2); GPIOPinConfigure(GPIO_PD4_U2RX); GPIOPinConfigure(GPIO_PD5_U2TX); GPIOPinTypeUART(GPIO_PORTD_BASE, GPIO_PIN_4 | GPIO_PIN_5); /* Enable and configure the peripherals used by the UART6 */ SysCtlPeripheralEnable(SYSCTL_PERIPH_UART6); GPIOPinConfigure(GPIO_PP0_U6RX); GPIOPinConfigure(GPIO_PP1_U6TX); GPIOPinTypeUART(GPIO_PORTP_BASE, GPIO_PIN_0 | GPIO_PIN_1); /* Enable and configure the peripherals used by the UART7 */ SysCtlPeripheralEnable(SYSCTL_PERIPH_UART7); GPIOPinConfigure(GPIO_PC4_U7RX); GPIOPinConfigure(GPIO_PC5_U7TX); GPIOPinTypeUART(GPIO_PORTC_BASE, GPIO_PIN_4 | GPIO_PIN_5); /* Initialize the UART driver */ UART_init(); } #endif /* TI_DRIVERS_UART_INCLUDED */ /* * ======== EK_TM4C1294XL_initUSB ======== * This function just turns on the USB */ void EK_TM4C1294XL_initUSB(EK_TM4C1294XL_USBMode usbMode) { Error_Block eb; Hwi_Params hwiParams; /* Enable the USB peripheral and PLL */ SysCtlPeripheralEnable(SYSCTL_PERIPH_USB0); SysCtlUSBPLLEnable(); /* Setup pins for USB operation */ GPIOPinTypeUSBAnalog(GPIO_PORTB_BASE, GPIO_PIN_0 | GPIO_PIN_1); GPIOPinTypeUSBAnalog(GPIO_PORTL_BASE, GPIO_PIN_6 | GPIO_PIN_7); /* Additional configurations for Host mode */ if (usbMode == EK_TM4C1294XL_USBHOST) { /* Configure the pins needed */ HWREG(GPIO_PORTD_BASE + GPIO_O_LOCK) = GPIO_LOCK_KEY; HWREG(GPIO_PORTD_BASE + GPIO_O_CR) = 0xff; GPIOPinConfigure(GPIO_PD6_USB0EPEN); GPIOPinTypeUSBDigital(GPIO_PORTD_BASE, GPIO_PIN_6 | GPIO_PIN_7); /* * USB bus fault is routed to pin PQ4. We create a Hwi to allow us * to detect power faults and recover gracefully or terminate the * program. PQ4 is active low; set the pin as input with a weak * pull-up. */ GPIOPadConfigSet(GPIO_PORTQ_BASE, GPIO_PIN_4, GPIO_STRENGTH_2MA, GPIO_PIN_TYPE_STD_WPU); GPIOIntTypeSet(GPIO_PORTQ_BASE, GPIO_PIN_4, GPIO_FALLING_EDGE); GPIOIntClear(GPIO_PORTQ_BASE, GPIO_PIN_4); /* Create a Hwi for PQ4 pin. */ Error_init(&eb); Hwi_Params_init(&hwiParams); Hwi_construct(&(usbBusFaultHwiStruct), INT_GPIOQ4, EK_TM4C1294XL_usbBusFaultHwi, &hwiParams, &eb); if (Error_check(&eb)) { System_abort("Couldn't construct USB bus fault hwi"); } } } #if TI_DRIVERS_USBMSCHFATFS_INCLUDED #include #include /* USBMSCHFatFs objects */ USBMSCHFatFsTiva_Object usbmschfatfstivaObjects[EK_TM4C1294XL_USBMSCHFatFsCOUNT]; /* USBMSCHFatFs configuration structure, describing which pins are to be used */ const USBMSCHFatFsTiva_HWAttrs usbmschfatfstivaHWAttrs[EK_TM4C1294XL_USBMSCHFatFsCOUNT] = { {INT_USB0} }; const USBMSCHFatFs_Config USBMSCHFatFs_config[] = { { &USBMSCHFatFsTiva_fxnTable, &usbmschfatfstivaObjects[0], &usbmschfatfstivaHWAttrs[0] }, {NULL, NULL, NULL} }; /* * ======== EK_TM4C1294XL_initUSBMSCHFatFs ======== */ void EK_TM4C1294XL_initUSBMSCHFatFs(void) { /* Initialize the DMA control table */ EK_TM4C1294XL_initDMA(); /* Call the USB initialization function for the USB Reference modules */ EK_TM4C1294XL_initUSB(EK_TM4C1294XL_USBHOST); USBMSCHFatFs_init(); } #endif /* TI_DRIVERS_USBMSCHFATFS_INCLUDED */ #if TI_DRIVERS_WATCHDOG_INCLUDED #include #include /* Watchdog objects */ WatchdogTiva_Object watchdogTivaObjects[EK_TM4C1294XL_WATCHDOGCOUNT]; /* Watchdog configuration structure */ const WatchdogTiva_HWAttrs watchdogTivaHWAttrs[EK_TM4C1294XL_WATCHDOGCOUNT] = { /* EK_LM4F120XL_WATCHDOG0 with 1 sec period at default CPU clock freq */ {WATCHDOG0_BASE, INT_WATCHDOG, 80000000}, }; const Watchdog_Config Watchdog_config[] = { {&WatchdogTiva_fxnTable, &watchdogTivaObjects[0], &watchdogTivaHWAttrs[0]}, {NULL, NULL, NULL}, }; /* * ======== EK_TM4C1294XL_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_TM4C1294XL_initWatchdog(void) { /* Enable peripherals used by Watchdog */ SysCtlPeripheralEnable(SYSCTL_PERIPH_WDOG0); /* Initialize the Watchdog driver */ Watchdog_init(); } #endif /* TI_DRIVERS_WATCHDOG_INCLUDED */ #if TI_DRIVERS_WIFI_INCLUDED #include #if TI_DRIVERS_WIFI_CC3100 #include /* WiFi objects */ WiFiCC3100_Object wiFiCC3100Objects[EK_TM4C1294XL_WIFICOUNT]; /* WiFi configuration structure */ const WiFiCC3100_HWAttrs wiFiCC3100HWAttrs[EK_TM4C1294XL_WIFICOUNT] = { { GPIO_PORTM_BASE, /* IRQ port */ GPIO_PIN_3, /* IRQ pin */ INT_GPIOM, /* IRQ port interrupt vector */ GPIO_PORTH_BASE, /* CS port */ GPIO_PIN_2, /* CS pin */ GPIO_PORTC_BASE, /* WLAN EN port */ GPIO_PIN_6 /* WLAN EN pin */ } }; const WiFi_Config WiFi_config[] = { { &WiFiCC3100_fxnTable, &wiFiCC3100Objects[0], &wiFiCC3100HWAttrs[0] }, {NULL,NULL, NULL}, }; /* * ======== EK_TM4C1294XL_initWiFi ======== */ void EK_TM4C1294XL_initWiFi(void) { /* Configure EN & CS pins to disable CC3100 */ GPIOPinTypeGPIOOutput(GPIO_PORTH_BASE, GPIO_PIN_2); GPIOPinTypeGPIOOutput(GPIO_PORTC_BASE, GPIO_PIN_6); GPIOPinWrite(GPIO_PORTH_BASE, GPIO_PIN_2, GPIO_PIN_2); GPIOPinWrite(GPIO_PORTC_BASE, GPIO_PIN_6, 0); /* Configure SSI2 for CC3100 */ SysCtlPeripheralEnable(SYSCTL_PERIPH_SSI2); GPIOPinConfigure(GPIO_PD3_SSI2CLK); GPIOPinConfigure(GPIO_PD1_SSI2XDAT0); GPIOPinConfigure(GPIO_PD0_SSI2XDAT1); GPIOPinTypeSSI(GPIO_PORTD_BASE, GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_3); /* Configure IRQ pin */ GPIOPinTypeGPIOInput(GPIO_PORTM_BASE, GPIO_PIN_3); GPIOPadConfigSet(GPIO_PORTM_BASE, GPIO_PIN_3, GPIO_STRENGTH_2MA, GPIO_PIN_TYPE_STD_WPD); GPIOIntTypeSet(GPIO_PORTM_BASE, GPIO_PIN_3, GPIO_RISING_EDGE); SPI_init(); EK_TM4C1294XL_initDMA(); WiFi_init(); } #endif /* TI_DRIVERS_WIFI_CC3100 */ #endif /* TI_DRIVERS_WIFI_INCLUDED */