From e018ceebed74b8223482bc9d1ed0b31c938381da Mon Sep 17 00:00:00 2001 From: Yuval Adam Date: Mon, 29 Oct 2012 23:04:19 +0200 Subject: New example files --- boards/ek-lm4f120xl-boost-capsense/Makefile | 47 ++ .../ek-lm4f120xl-boost-capsense/capsense/Makefile | 99 +++ .../capsense/capsense.c | 604 +++++++++++++++ .../capsense/capsense.ewd | 614 ++++++++++++++++ .../capsense/capsense.ewp | 806 +++++++++++++++++++++ .../capsense/capsense.icf | 78 ++ .../capsense/capsense.ld | 57 ++ .../capsense/capsense.sct | 47 ++ .../capsense/capsense.sgxx | Bin 0 -> 4976 bytes .../capsense/capsense.uvopt | 373 ++++++++++ .../capsense/capsense.uvproj | 454 ++++++++++++ .../capsense/capsense_ccs.cmd | 70 ++ .../capsense/capsense_sourcerygxx.ld | 31 + .../capsense/ccs/.ccsimportspec | 8 + .../capsense/ccs/.ccsproject | 12 + .../capsense/ccs/.cproject | 195 +++++ .../capsense/ccs/.project | 136 ++++ .../ccs/.settings/org.eclipse.cdt.codan.core.prefs | 3 + .../capsense/ccs/Debug/capsense.bin | Bin 0 -> 6072 bytes .../capsense/ccs/Debug/capsense.out | Bin 0 -> 109085 bytes .../capsense/ccs/macros.ini_initial | 1 + .../capsense/ccs/target_config.ccxml | 13 + .../capsense/ewarm/Exe/capsense.bin | Bin 0 -> 4860 bytes .../capsense/ewarm/Exe/capsense.out | Bin 0 -> 104900 bytes .../capsense/gcc/capsense.axf | Bin 0 -> 69283 bytes .../capsense/gcc/capsense.bin | Bin 0 -> 4932 bytes .../capsense/readme.txt | 32 + .../capsense/rvmdk/capsense.axf | Bin 0 -> 49828 bytes .../capsense/rvmdk/capsense.bin | Bin 0 -> 5204 bytes .../capsense/sourcerygxx/capsense.axf | Bin 0 -> 1133463 bytes .../capsense/sourcerygxx/capsense.bin | Bin 0 -> 5136 bytes .../capsense/startup_ccs.c | 291 ++++++++ .../capsense/startup_ewarm.c | 325 +++++++++ .../capsense/startup_gcc.c | 341 +++++++++ .../capsense/startup_rvmdk.S | 351 +++++++++ .../capsense/startup_sourcerygxx.S | 75 ++ .../ek-lm4f120xl-boost-capsense/drivers/CTS_HAL.c | 140 ++++ .../ek-lm4f120xl-boost-capsense/drivers/CTS_HAL.h | 34 + .../drivers/CTS_Layer.c | 663 +++++++++++++++++ .../drivers/CTS_Layer.h | 64 ++ .../drivers/CTS_structure.c | 131 ++++ .../drivers/CTS_structure.h | 74 ++ .../ek-lm4f120xl-boost-capsense.eww | 30 + .../ek-lm4f120xl-boost-capsense.sgxw | 30 + .../ek-lm4f120xl-boost-capsense.uvmpw | 25 + 45 files changed, 6254 insertions(+) create mode 100644 boards/ek-lm4f120xl-boost-capsense/Makefile create mode 100644 boards/ek-lm4f120xl-boost-capsense/capsense/Makefile create mode 100644 boards/ek-lm4f120xl-boost-capsense/capsense/capsense.c create mode 100644 boards/ek-lm4f120xl-boost-capsense/capsense/capsense.ewd create mode 100644 boards/ek-lm4f120xl-boost-capsense/capsense/capsense.ewp create mode 100644 boards/ek-lm4f120xl-boost-capsense/capsense/capsense.icf create mode 100644 boards/ek-lm4f120xl-boost-capsense/capsense/capsense.ld create mode 100644 boards/ek-lm4f120xl-boost-capsense/capsense/capsense.sct create mode 100644 boards/ek-lm4f120xl-boost-capsense/capsense/capsense.sgxx create mode 100644 boards/ek-lm4f120xl-boost-capsense/capsense/capsense.uvopt create mode 100644 boards/ek-lm4f120xl-boost-capsense/capsense/capsense.uvproj create mode 100644 boards/ek-lm4f120xl-boost-capsense/capsense/capsense_ccs.cmd create mode 100644 boards/ek-lm4f120xl-boost-capsense/capsense/capsense_sourcerygxx.ld create mode 100644 boards/ek-lm4f120xl-boost-capsense/capsense/ccs/.ccsimportspec create mode 100644 boards/ek-lm4f120xl-boost-capsense/capsense/ccs/.ccsproject create mode 100644 boards/ek-lm4f120xl-boost-capsense/capsense/ccs/.cproject create mode 100644 boards/ek-lm4f120xl-boost-capsense/capsense/ccs/.project create mode 100644 boards/ek-lm4f120xl-boost-capsense/capsense/ccs/.settings/org.eclipse.cdt.codan.core.prefs create mode 100644 boards/ek-lm4f120xl-boost-capsense/capsense/ccs/Debug/capsense.bin create mode 100644 boards/ek-lm4f120xl-boost-capsense/capsense/ccs/Debug/capsense.out create mode 100644 boards/ek-lm4f120xl-boost-capsense/capsense/ccs/macros.ini_initial create mode 100644 boards/ek-lm4f120xl-boost-capsense/capsense/ccs/target_config.ccxml create mode 100644 boards/ek-lm4f120xl-boost-capsense/capsense/ewarm/Exe/capsense.bin create mode 100644 boards/ek-lm4f120xl-boost-capsense/capsense/ewarm/Exe/capsense.out create mode 100644 boards/ek-lm4f120xl-boost-capsense/capsense/gcc/capsense.axf create mode 100644 boards/ek-lm4f120xl-boost-capsense/capsense/gcc/capsense.bin create mode 100644 boards/ek-lm4f120xl-boost-capsense/capsense/readme.txt create mode 100644 boards/ek-lm4f120xl-boost-capsense/capsense/rvmdk/capsense.axf create mode 100644 boards/ek-lm4f120xl-boost-capsense/capsense/rvmdk/capsense.bin create mode 100644 boards/ek-lm4f120xl-boost-capsense/capsense/sourcerygxx/capsense.axf create mode 100644 boards/ek-lm4f120xl-boost-capsense/capsense/sourcerygxx/capsense.bin create mode 100644 boards/ek-lm4f120xl-boost-capsense/capsense/startup_ccs.c create mode 100644 boards/ek-lm4f120xl-boost-capsense/capsense/startup_ewarm.c create mode 100644 boards/ek-lm4f120xl-boost-capsense/capsense/startup_gcc.c create mode 100644 boards/ek-lm4f120xl-boost-capsense/capsense/startup_rvmdk.S create mode 100644 boards/ek-lm4f120xl-boost-capsense/capsense/startup_sourcerygxx.S create mode 100644 boards/ek-lm4f120xl-boost-capsense/drivers/CTS_HAL.c create mode 100644 boards/ek-lm4f120xl-boost-capsense/drivers/CTS_HAL.h create mode 100644 boards/ek-lm4f120xl-boost-capsense/drivers/CTS_Layer.c create mode 100644 boards/ek-lm4f120xl-boost-capsense/drivers/CTS_Layer.h create mode 100644 boards/ek-lm4f120xl-boost-capsense/drivers/CTS_structure.c create mode 100644 boards/ek-lm4f120xl-boost-capsense/drivers/CTS_structure.h create mode 100644 boards/ek-lm4f120xl-boost-capsense/ek-lm4f120xl-boost-capsense.eww create mode 100644 boards/ek-lm4f120xl-boost-capsense/ek-lm4f120xl-boost-capsense.sgxw create mode 100644 boards/ek-lm4f120xl-boost-capsense/ek-lm4f120xl-boost-capsense.uvmpw (limited to 'boards/ek-lm4f120xl-boost-capsense') diff --git a/boards/ek-lm4f120xl-boost-capsense/Makefile b/boards/ek-lm4f120xl-boost-capsense/Makefile new file mode 100644 index 0000000..44d515e --- /dev/null +++ b/boards/ek-lm4f120xl-boost-capsense/Makefile @@ -0,0 +1,47 @@ +#****************************************************************************** +# +# Makefile - Rules for building the ek-lm4f120xl-boost-capsense examples. +# +# Copyright (c) 2012 Texas Instruments Incorporated. All rights reserved. +# Software License Agreement +# +# Texas Instruments (TI) is supplying this software for use solely and +# exclusively on TI's microcontroller products. The software is owned by +# TI and/or its suppliers, and is protected under applicable copyright +# laws. You may not combine this software with "viral" open-source +# software in order to form a larger program. +# +# THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +# NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +# NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +# A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +# CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +# DAMAGES, FOR ANY REASON WHATSOEVER. +# +# This is part of revision 9453 of the EK-LM4F120XL Firmware Package. +# +#****************************************************************************** + +# +# A list of the directories containing the examples. +# +DIRS=capsense + +# +# The default rule, which causes the examples to be built. +# +all: + @for i in ${DIRS}; \ + do \ + make -C $${i} || exit $$?; \ + done + +# +# The rule to clean out all the build products. +# +clean: + @rm -rf ${wildcard *~} __dummy__ + @-for i in ${DIRS}; \ + do \ + make -C $${i} clean; \ + done diff --git a/boards/ek-lm4f120xl-boost-capsense/capsense/Makefile b/boards/ek-lm4f120xl-boost-capsense/capsense/Makefile new file mode 100644 index 0000000..7592be6 --- /dev/null +++ b/boards/ek-lm4f120xl-boost-capsense/capsense/Makefile @@ -0,0 +1,99 @@ +#****************************************************************************** +# +# Makefile - Rules for building the CapSense Demo. +# +# Copyright (c) 2012 Texas Instruments Incorporated. All rights reserved. +# Software License Agreement +# +# Texas Instruments (TI) is supplying this software for use solely and +# exclusively on TI's microcontroller products. The software is owned by +# TI and/or its suppliers, and is protected under applicable copyright +# laws. You may not combine this software with "viral" open-source +# software in order to form a larger program. +# +# THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +# NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +# NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +# A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +# CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +# DAMAGES, FOR ANY REASON WHATSOEVER. +# +# This is part of revision 9453 of the EK-LM4F120XL Firmware Package. +# +#****************************************************************************** + +# +# Defines the part type that this project uses. +# +PART=LM4F120H5QR + +# +# Set the processor variant. +# +VARIANT=cm4f + +# +# The base directory for StellarisWare. +# +ROOT=../../.. + +# +# Include the common make definitions. +# +include ${ROOT}/makedefs + +# +# Where to find source files that do not live in this directory. +# +VPATH=../../ek-lm4f120xl/drivers +VPATH+=../drivers +VPATH+=../../../utils + +# +# Where to find header files that do not live in the source directory. +# +IPATH=.. +IPATH+=../../.. +IPATH+=../../ek-lm4f120xl + +# +# The default rule, which causes the CapSense Demo to be built. +# +all: ${COMPILER} +all: ${COMPILER}/capsense.axf + +# +# The rule to clean out all the build products. +# +clean: + @rm -rf ${COMPILER} ${wildcard *~} + +# +# The rule to create the target directory. +# +${COMPILER}: + @mkdir -p ${COMPILER} + +# +# Rules for building the CapSense Demo. +# +${COMPILER}/capsense.axf: ${COMPILER}/CTS_HAL.o +${COMPILER}/capsense.axf: ${COMPILER}/CTS_Layer.o +${COMPILER}/capsense.axf: ${COMPILER}/CTS_structure.o +${COMPILER}/capsense.axf: ${COMPILER}/buttons.o +${COMPILER}/capsense.axf: ${COMPILER}/capsense.o +${COMPILER}/capsense.axf: ${COMPILER}/rgb.o +${COMPILER}/capsense.axf: ${COMPILER}/startup_${COMPILER}.o +${COMPILER}/capsense.axf: ${COMPILER}/uartstdio.o +${COMPILER}/capsense.axf: ${ROOT}/driverlib/${COMPILER}-cm4f/libdriver-cm4f.a +${COMPILER}/capsense.axf: capsense.ld +SCATTERgcc_capsense=capsense.ld +ENTRY_capsense=ResetISR +CFLAGSgcc=-DTARGET_IS_BLIZZARD_RA1 + +# +# Include the automatically generated dependency files. +# +ifneq (${MAKECMDGOALS},clean) +-include ${wildcard ${COMPILER}/*.d} __dummy__ +endif diff --git a/boards/ek-lm4f120xl-boost-capsense/capsense/capsense.c b/boards/ek-lm4f120xl-boost-capsense/capsense/capsense.c new file mode 100644 index 0000000..bf2afdc --- /dev/null +++ b/boards/ek-lm4f120xl-boost-capsense/capsense/capsense.c @@ -0,0 +1,604 @@ +//***************************************************************************** +// +// capsense.c - Capacitive touch example. +// +// Copyright (c) 2011-2012 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 9453 of the EK-LM4F120XL Firmware Package. +// +//***************************************************************************** + +#include +#include "inc/hw_types.h" +#include "inc/hw_gpio.h" +#include "inc/hw_memmap.h" +#include "inc/hw_nvic.h" +#include "driverlib/fpu.h" +#include "driverlib/sysctl.h" +#include "driverlib/rom.h" +#include "driverlib/pin_map.h" +#include "driverlib/gpio.h" +#include "driverlib/systick.h" +#include "driverlib/interrupt.h" +#include "driverlib/uart.h" +#include "utils/uartstdio.h" +#include "drivers/buttons.h" + +#include "drivers/CTS_structure.h" +#include "drivers/CTS_Layer.h" + +//***************************************************************************** +// +//! \addtogroup example_list +//!

Capacitive Touch Example (capsense)

+//! +//! An example that works with the 430BOOST-SENSE1 capactive sense +//! BoosterPack, originally designed for the MSP430 LaunchPad. +//! +//! The Stellaris LM4F120H5QR does not have the capacitive sense hardware +//! assisted peripheral features of some MSP430 chips. Therefore it is +//! required that the user install surface mount resistors on the pads +//! provided on the bottom of the capacitive sense BoosterPack. Resistor values +//! of 30 ohms are recommended. Calibration may be required for +//! resistor values other than 30 ohms. +//! +// +//***************************************************************************** + + +//***************************************************************************** +// +// Macro definitions +// +//***************************************************************************** +#define TESTMODE +#define NUM_OSCILLATIONS 100 + +#define WAKE_UP_UART_CODE 0xBE +#define WAKE_UP_UART_CODE2 0xEF +#define SLEEP_MODE_UART_CODE 0xDE +#define SLEEP_MODE_UART_CODE2 0xAD +#define MIDDLE_BUTTON_CODE 0x80 +#define INVALID_CONVERTED_POSITION 0xFD +#define GESTURE_START 0xFC +#define GESTURE_STOP 0xFB +#define COUNTER_CLOCKWISE 1 +#define CLOCKWISE 2 +#define GESTURE_POSITION_OFFSET 0x20 +#define WHEEL_POSITION_OFFSET 0x30 + +#define WHEEL_TOUCH_DELAY 12 +#define MAX_IDLE_TIME 200 +#define PROXIMITY_THRESHOLD 60 + + +//***************************************************************************** +// +// Global variables +// +//***************************************************************************** +unsigned long g_ulUpBaseline = 0; +unsigned long g_ulDownBaseline = 0; +unsigned long g_ulLeftBaseline = 0; +unsigned long g_ulRightBaseline = 0; +unsigned long g_ulCenterBaseline = 0; +unsigned long g_ulWheelPosition = ILLEGAL_SLIDER_WHEEL_POSITION; +unsigned long ulPreviousWheelPosition = ILLEGAL_SLIDER_WHEEL_POSITION; + + +//***************************************************************************** +// +// The error routine that is called if the driver library encounters an error. +// +//***************************************************************************** +#ifdef DEBUG +void +__error__(char *pcFilename, unsigned long ulLine) +{ +} +#endif + +//***************************************************************************** +// +// Delay for count milliseconds +// +//***************************************************************************** +void +DelayMs(unsigned long ulCount) +{ + SysCtlDelay((SysCtlClockGet()/3000)*ulCount); +} + +//***************************************************************************** +// +// Abstraction for LED output. +// +//***************************************************************************** +void +LEDOutput(unsigned long ulWheelPosition) +{ + GPIOPinWrite(GPIO_PORTE_BASE, GPIO_PIN_4, 0); + GPIOPinTypeGPIOInput(GPIO_PORTE_BASE, GPIO_PIN_5); + GPIOPinTypeGPIOInput(GPIO_PORTB_BASE, GPIO_PIN_4); + GPIOPinTypeGPIOInput(GPIO_PORTB_BASE, GPIO_PIN_6); + GPIOPinTypeGPIOInput(GPIO_PORTB_BASE, GPIO_PIN_7); + + switch(ulWheelPosition) + { + case 0: + break; + case 1: + GPIOPinWrite(GPIO_PORTE_BASE, GPIO_PIN_4, GPIO_PIN_4); + GPIOPinTypeGPIOOutput(GPIO_PORTE_BASE, GPIO_PIN_5); + GPIOPinWrite(GPIO_PORTE_BASE, GPIO_PIN_5, 0); + break; + case 2: + GPIOPinWrite(GPIO_PORTE_BASE, GPIO_PIN_4, GPIO_PIN_4); + GPIOPinTypeGPIOOutput(GPIO_PORTE_BASE, GPIO_PIN_5); + GPIOPinWrite(GPIO_PORTE_BASE, GPIO_PIN_5, 0); + //P1-5OFF + GPIOPinTypeGPIOOutput(GPIO_PORTB_BASE, GPIO_PIN_4); + GPIOPinWrite(GPIO_PORTB_BASE, GPIO_PIN_4, 0); + break; + case 3: + GPIOPinWrite(GPIO_PORTE_BASE, GPIO_PIN_4, GPIO_PIN_4); + //P1-5OFF + GPIOPinTypeGPIOOutput(GPIO_PORTB_BASE, GPIO_PIN_4); + GPIOPinWrite(GPIO_PORTB_BASE, GPIO_PIN_4, 0); + break; + case 4: + GPIOPinWrite(GPIO_PORTE_BASE, GPIO_PIN_4, GPIO_PIN_4); + //P1-5OFF + GPIOPinTypeGPIOOutput(GPIO_PORTB_BASE, GPIO_PIN_4); + GPIOPinWrite(GPIO_PORTB_BASE, GPIO_PIN_4, 0); + //P1-6OFF + GPIOPinTypeGPIOOutput(GPIO_PORTB_BASE, GPIO_PIN_6); + GPIOPinWrite(GPIO_PORTB_BASE, GPIO_PIN_6, 0); + break; + case 5: + GPIOPinWrite(GPIO_PORTE_BASE, GPIO_PIN_4, GPIO_PIN_4); + //P1-6OFF + GPIOPinTypeGPIOOutput(GPIO_PORTB_BASE, GPIO_PIN_6); + GPIOPinWrite(GPIO_PORTB_BASE, GPIO_PIN_6, 0); + break; + case 6: + GPIOPinWrite(GPIO_PORTE_BASE, GPIO_PIN_4, GPIO_PIN_4); + //P1-6OFF + GPIOPinTypeGPIOOutput(GPIO_PORTB_BASE, GPIO_PIN_6); + GPIOPinWrite(GPIO_PORTB_BASE, GPIO_PIN_6, 0); + //P1-7OFF + GPIOPinTypeGPIOOutput(GPIO_PORTB_BASE, GPIO_PIN_7); + GPIOPinWrite(GPIO_PORTB_BASE, GPIO_PIN_7, 0); + break; + case 7: + GPIOPinWrite(GPIO_PORTE_BASE, GPIO_PIN_4, GPIO_PIN_4); + //P1-7OFF + GPIOPinTypeGPIOOutput(GPIO_PORTB_BASE, GPIO_PIN_7); + GPIOPinWrite(GPIO_PORTB_BASE, GPIO_PIN_7, 0); + break; + case 8: + break; + case 9: + GPIOPinWrite(GPIO_PORTE_BASE, GPIO_PIN_4, 0); + //P1-7ON + GPIOPinTypeGPIOOutput(GPIO_PORTB_BASE, GPIO_PIN_7); + GPIOPinWrite(GPIO_PORTB_BASE, GPIO_PIN_7, GPIO_PIN_7); + break; + case 10: + GPIOPinWrite(GPIO_PORTE_BASE, GPIO_PIN_4, 0); + //P1-7ON + GPIOPinTypeGPIOOutput(GPIO_PORTB_BASE, GPIO_PIN_7); + GPIOPinWrite(GPIO_PORTB_BASE, GPIO_PIN_7, GPIO_PIN_7); + //P1-6ON + GPIOPinTypeGPIOOutput(GPIO_PORTB_BASE, GPIO_PIN_6); + GPIOPinWrite(GPIO_PORTB_BASE, GPIO_PIN_6, GPIO_PIN_6); + break; + case 11: + GPIOPinWrite(GPIO_PORTE_BASE, GPIO_PIN_4, 0); + //P1-6ON + GPIOPinTypeGPIOOutput(GPIO_PORTB_BASE, GPIO_PIN_6); + GPIOPinWrite(GPIO_PORTB_BASE, GPIO_PIN_6, GPIO_PIN_6); + break; + case 12: + GPIOPinWrite(GPIO_PORTE_BASE, GPIO_PIN_4, 0); + //P1-6ON + GPIOPinTypeGPIOOutput(GPIO_PORTB_BASE, GPIO_PIN_6); + GPIOPinWrite(GPIO_PORTB_BASE, GPIO_PIN_6, GPIO_PIN_6); + //P1-5ON + GPIOPinTypeGPIOOutput(GPIO_PORTB_BASE, GPIO_PIN_4); + GPIOPinWrite(GPIO_PORTB_BASE, GPIO_PIN_4, GPIO_PIN_4); + break; + case 13: + GPIOPinWrite(GPIO_PORTE_BASE, GPIO_PIN_4, 0); + //P1-5ON + GPIOPinTypeGPIOOutput(GPIO_PORTB_BASE, GPIO_PIN_4); + GPIOPinWrite(GPIO_PORTB_BASE, GPIO_PIN_4, GPIO_PIN_4); + break; + case 14: + GPIOPinWrite(GPIO_PORTE_BASE, GPIO_PIN_4, 0); + //P1-5ON + GPIOPinTypeGPIOOutput(GPIO_PORTB_BASE, GPIO_PIN_4); + GPIOPinWrite(GPIO_PORTB_BASE, GPIO_PIN_4, GPIO_PIN_4); + //P1-4ON + GPIOPinTypeGPIOOutput(GPIO_PORTE_BASE, GPIO_PIN_5); + GPIOPinWrite(GPIO_PORTE_BASE, GPIO_PIN_5, GPIO_PIN_5); + break; + case 15: + GPIOPinWrite(GPIO_PORTE_BASE, GPIO_PIN_4, 0); + //P1-4ON + GPIOPinTypeGPIOOutput(GPIO_PORTE_BASE, GPIO_PIN_5); + GPIOPinWrite(GPIO_PORTE_BASE, GPIO_PIN_5, GPIO_PIN_5); + break; + default: + break; + } +} +//***************************************************************************** +// +// Get Gesture. +// +//***************************************************************************** +unsigned char GetGesture(unsigned char ulWheelPosition) +{ + unsigned char gesture = INVALID_CONVERTED_POSITION; + unsigned char ucDirection, ccw_check, cw_check; + + if(ulPreviousWheelPosition != ILLEGAL_SLIDER_WHEEL_POSITION) + { + if(ulPreviousWheelPosition > ulWheelPosition) + { + ccw_check = ulPreviousWheelPosition - ulWheelPosition; + if(ccw_check < 8) + { + gesture = ccw_check; + ucDirection = COUNTER_CLOCKWISE; + } + else + { + cw_check = 16 - ulPreviousWheelPosition + ulWheelPosition; + if(cw_check < 8) + { + gesture = cw_check; + ucDirection = CLOCKWISE; + } + } + } + else + { + cw_check = ulWheelPosition - ulPreviousWheelPosition; + if(cw_check < 8) + { + gesture = cw_check; + ucDirection = CLOCKWISE; + } + else + { + ccw_check = 16 + ulPreviousWheelPosition - ulWheelPosition; + if(ccw_check < 8) + { + gesture = ccw_check; + ucDirection = COUNTER_CLOCKWISE; + } + } + } + } + if(gesture == INVALID_CONVERTED_POSITION) + return gesture; + if(ucDirection == COUNTER_CLOCKWISE) + return(gesture + 16); + else + return gesture; +} +//***************************************************************************** +// +// Main cap-touch example. +// +//***************************************************************************** +int +main(void) +{ + unsigned char ucCenterButtonTouched; + unsigned long ulWheelTouchCounter; + unsigned char ucConvertedWheelPosition; + unsigned char ucGestureDetected; + + // + // Enable lazy stacking for interrupt handlers. This allows floating-point + // instructions to be used within interrupt handlers, but at the expense of + // extra stack usage. + // + ROM_FPUEnable(); + ROM_FPULazyStackingEnable(); + + // + // Set the clocking to run directly from the PLL at 80 MHz + // + ROM_SysCtlClockSet(SYSCTL_SYSDIV_2_5 | SYSCTL_USE_PLL | SYSCTL_XTAL_16MHZ | + SYSCTL_OSC_MAIN); + ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOA); + ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOB); + ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOE); + + // + // Initialize a few GPIO outputs for the LEDs + // + GPIOPinTypeGPIOOutput(GPIO_PORTE_BASE, GPIO_PIN_4); + GPIOPinTypeGPIOOutput(GPIO_PORTE_BASE, GPIO_PIN_5); + GPIOPinTypeGPIOOutput(GPIO_PORTB_BASE, GPIO_PIN_4); + GPIOPinTypeGPIOOutput(GPIO_PORTB_BASE, GPIO_PIN_6); + GPIOPinTypeGPIOOutput(GPIO_PORTB_BASE, GPIO_PIN_7); + GPIOPinTypeGPIOOutput(GPIO_PORTB_BASE, GPIO_PIN_5); + + // + // Turn on the Center LED + // + GPIOPinWrite(GPIO_PORTB_BASE, GPIO_PIN_5, GPIO_PIN_5); + + // + // Initialize the UART. + // + ROM_GPIOPinConfigure(GPIO_PA0_U0RX); + ROM_GPIOPinConfigure(GPIO_PA1_U0TX); + ROM_GPIOPinTypeUART(GPIO_PORTA_BASE, GPIO_PIN_0 | GPIO_PIN_1); + UARTStdioInitExpClk(0,9600); + + // + // First, I'm configuring the pins as outputs to take care of all of the + // non-recurring setup. + // + ROM_SysCtlGPIOAHBEnable(SYSCTL_PERIPH_GPIOA); + GPIOPinTypeGPIOOutput(GPIO_PORTA_AHB_BASE, GPIO_PIN_2); + GPIOPinTypeGPIOOutput(GPIO_PORTA_AHB_BASE, GPIO_PIN_3); + GPIOPinTypeGPIOOutput(GPIO_PORTA_AHB_BASE, GPIO_PIN_4); + GPIOPinTypeGPIOOutput(GPIO_PORTA_AHB_BASE, GPIO_PIN_6); + GPIOPinTypeGPIOOutput(GPIO_PORTA_AHB_BASE, GPIO_PIN_7); + + // + // Start up Systick to measure time + // + SysTickPeriodSet(0x00FFFFFF); + SysTickEnable(); + + // + // Set the baseline capacitance measurements for our wheel and center + // button. + // + TI_CAPT_Init_Baseline(&g_sSensorWheel); + TI_CAPT_Update_Baseline(&g_sSensorWheel,2); + TI_CAPT_Init_Baseline(&g_sMiddleButton); + TI_CAPT_Update_Baseline(&g_sMiddleButton,2); + + // + // Send the Sleep code + // + UARTprintf("\0xDE\0xAD"); + + // + // Perform the LED startup sequence, and tell the GUI we're alive. + // + UARTprintf("\0xBE\0xEF"); + + // + // Assume that the center button starts off "untouched", the wheel has no + // position, and no gestures are in progress. + // + ucCenterButtonTouched = 0; + ucConvertedWheelPosition = INVALID_CONVERTED_POSITION; + ucGestureDetected = 0; + + // + // Set the wheel counter for the default delay period. + // + ulWheelTouchCounter = WHEEL_TOUCH_DELAY - 1; + + // + // Go into active mode. + // + while(1) + { + g_ulWheelPosition = ILLEGAL_SLIDER_WHEEL_POSITION; + g_ulWheelPosition = TI_CAPT_Wheel(&g_sSensorWheel); + + if(g_ulWheelPosition != ILLEGAL_SLIDER_WHEEL_POSITION) + { + ucCenterButtonTouched = 0; + + if(g_ulWheelPosition < 0x08) + { + g_ulWheelPosition += 0x40 - 0x08; + } + else + { + g_ulWheelPosition -= 0x08; + } + + g_ulWheelPosition = g_ulWheelPosition >> 2; + + ucConvertedWheelPosition = GetGesture(g_ulWheelPosition); + + // + // Add hysteresis to reduce toggling between g_sSensorWheel + // positions if no gesture has been TRULY detected. + // + if((ucGestureDetected==0) && ((ucConvertedWheelPosition<=1) || + (ucConvertedWheelPosition==0x11) || + (ucConvertedWheelPosition==0x10))) + { + if (ulPreviousWheelPosition != ILLEGAL_SLIDER_WHEEL_POSITION) + g_ulWheelPosition = ulPreviousWheelPosition; + ucConvertedWheelPosition = 0; + } + + // + //Turn on corresponding LED(s) + // + LEDOutput(g_ulWheelPosition); + + // + // A gesture has been detected + // + if((ucConvertedWheelPosition != 0) && + (ucConvertedWheelPosition != 16) && + (ucConvertedWheelPosition != INVALID_CONVERTED_POSITION)) + { + // + // Starting of a new gesture sequence + // + if (ucGestureDetected ==0) + { + ucGestureDetected = 1; + + // + // Transmit gesture start status update & position via UART + // to PC + // + UARTCharPut(UART0_BASE, GESTURE_START); + UARTCharPut(UART0_BASE,ulPreviousWheelPosition + + GESTURE_POSITION_OFFSET); + } + + // + // Transmit gesture & position via UART to PC + // + UARTCharPut(UART0_BASE,ucConvertedWheelPosition); + UARTCharPut(UART0_BASE,g_ulWheelPosition + + GESTURE_POSITION_OFFSET); + } + else + { + // + // If no gesture was detected, this is constituted as a + // touch/tap + // + if (ucGestureDetected==0) + { + if (++ulWheelTouchCounter >= WHEEL_TOUCH_DELAY) + { + // + // Transmit wheel position [twice] via UART to PC + // + ulWheelTouchCounter = 0; + UARTCharPut(UART0_BASE,g_ulWheelPosition + + WHEEL_POSITION_OFFSET); + UARTCharPut(UART0_BASE,g_ulWheelPosition + + WHEEL_POSITION_OFFSET); + } + } + else + { + ulWheelTouchCounter = WHEEL_TOUCH_DELAY - 1; + } + } + + ulPreviousWheelPosition = g_ulWheelPosition; + } + else + { + // + // no wheel position was detected + // + + if(TI_CAPT_Button(&g_sMiddleButton)) + { + // + // Middle button was touched + // + if (ucCenterButtonTouched==0) + { + // + // Transmit center button code [twice] via UART to PC + // + UARTCharPut(UART0_BASE,MIDDLE_BUTTON_CODE); + UARTCharPut(UART0_BASE,MIDDLE_BUTTON_CODE); + + ucCenterButtonTouched = 1; + + if(GPIOPinRead(GPIO_PORTB_BASE, GPIO_PIN_5)) + { + GPIOPinWrite(GPIO_PORTB_BASE, GPIO_PIN_5, 0); + } + else + { + GPIOPinWrite(GPIO_PORTB_BASE, GPIO_PIN_5, GPIO_PIN_5); + } + } + } + else + { + // + // No touch was registered at all [Not wheel or center button] + // + ucCenterButtonTouched = 0; + + if((ucConvertedWheelPosition == INVALID_CONVERTED_POSITION) || + (ucGestureDetected ==0)) + { + // + // No gesture was registered previously + // + if(ulPreviousWheelPosition != + ILLEGAL_SLIDER_WHEEL_POSITION) + { + // + // Transmit last wheel position [twice] via UART to PC + // + UARTCharPut(UART0_BASE,ulPreviousWheelPosition + + WHEEL_POSITION_OFFSET ); + UARTCharPut(UART0_BASE,ulPreviousWheelPosition + + WHEEL_POSITION_OFFSET ); + ulWheelTouchCounter = WHEEL_TOUCH_DELAY - 1; + } + } + + if (ucGestureDetected == 1) + { + // + // A gesture was registered previously + // + + // + // Transmit status update: stop gesture tracking [twice] + // via UART to PC + // + UARTCharPut(UART0_BASE,GESTURE_STOP); + UARTCharPut(UART0_BASE,GESTURE_STOP); + } + + } + + // + // Reset all touch conditions, turn off LEDs, + // + LEDOutput(0); + ulPreviousWheelPosition= ILLEGAL_SLIDER_WHEEL_POSITION; + ucConvertedWheelPosition = INVALID_CONVERTED_POSITION; + ucGestureDetected = 0; + + } + + // + // Option: Add delay/sleep cycle here to reduce active duty cycle. This + // lowers power consumption but sacrifices wheel responsiveness. + // Additional timing refinement must be taken into consideration when + // interfacing with PC applications GUI to retain proper communication + // protocol. + // + + DelayMs(50); + + } +} diff --git a/boards/ek-lm4f120xl-boost-capsense/capsense/capsense.ewd b/boards/ek-lm4f120xl-boost-capsense/capsense/capsense.ewd new file mode 100644 index 0000000..b8eeac7 --- /dev/null +++ b/boards/ek-lm4f120xl-boost-capsense/capsense/capsense.ewd @@ -0,0 +1,614 @@ + + + + 1 + + Debug + + ARM + + 1 + + C-SPY + 2 + + 15 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + ARMSIM_ID + 2 + + 1 + 1 + 1 + + + + + + + + ANGEL_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + + GDBSERVER_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + IARROM_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + JLINK_ID + 2 + + 9 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LMIFTDI_ID + 2 + + 1 + 1 + 1 + + + + + + + + MACRAIGOR_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + RDI_ID + 2 + + 1 + 1 + 1 + + + + + + + + + + + + + + + + + THIRDPARTY_ID + 2 + + 0 + 1 + 1 + + + + + + + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\OSE\OseEpsilonPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\PowerPac\PowerPacRTOS.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin + 0 + + + $EW_DIR$\common\plugins\CodeCoverage\CodeCoverage.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\Profiling\Profiling.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\Stack\Stack.ENU.ewplugin + 1 + + + + diff --git a/boards/ek-lm4f120xl-boost-capsense/capsense/capsense.ewp b/boards/ek-lm4f120xl-boost-capsense/capsense/capsense.ewp new file mode 100644 index 0000000..76f4ff3 --- /dev/null +++ b/boards/ek-lm4f120xl-boost-capsense/capsense/capsense.ewp @@ -0,0 +1,806 @@ + + + + 1 + + Debug + + ARM + + 1 + + General + 3 + + 14 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 19 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 7 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 1 + + + + + + + + + CUSTOM + 3 + + + + + + + BICOMP + 0 + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 5 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 1 + + + + + + + BILINK + 0 + + + + + Libraries + + $PROJ_DIR$\..\..\..\driverlib\ewarm-cm4f\Exe\driverlib-cm4f.a + + + + Source + + $PROJ_DIR$\..\drivers\CTS_HAL.c + + + $PROJ_DIR$\..\drivers\CTS_Layer.c + + + $PROJ_DIR$\..\drivers\CTS_structure.c + + + $PROJ_DIR$\..\..\ek-lm4f120xl\drivers\buttons.c + + + $PROJ_DIR$\capsense.c + + + $PROJ_DIR$\..\..\ek-lm4f120xl\drivers\rgb.c + + + $PROJ_DIR$\startup_ewarm.c + + + $PROJ_DIR$\..\..\..\utils\uartstdio.c + + + diff --git a/boards/ek-lm4f120xl-boost-capsense/capsense/capsense.icf b/boards/ek-lm4f120xl-boost-capsense/capsense/capsense.icf new file mode 100644 index 0000000..3b04759 --- /dev/null +++ b/boards/ek-lm4f120xl-boost-capsense/capsense/capsense.icf @@ -0,0 +1,78 @@ +//***************************************************************************** +// +// capsense.icf - Linker configuration file for capsense. +// +// Copyright (c) 2012 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 9453 of the EK-LM4F120XL Firmware Package. +// +//***************************************************************************** + +// +// Define a memory region that covers the entire 4 GB addressible space of the +// processor. +// +define memory mem with size = 4G; + +// +// Define a region for the on-chip flash. +// +define region FLASH = mem:[from 0x00000000 to 0x0003ffff]; + +// +// Define a region for the on-chip SRAM. +// +define region SRAM = mem:[from 0x20000000 to 0x20007fff]; + +// +// Define a block for the heap. The size should be set to something other +// than zero if things in the C library that require the heap are used. +// +define block HEAP with alignment = 8, size = 0x00000000 { }; + +// +// Indicate that the read/write values should be initialized by copying from +// flash. +// +initialize by copy { readwrite }; + +// +// Indicate that the noinit values should be left alone. This includes the +// stack, which if initialized will destroy the return address from the +// initialization code, causing the processor to branch to zero and fault. +// +do not initialize { section .noinit }; + +// +// Place the interrupt vectors at the start of flash. +// +place at start of FLASH { readonly section .intvec }; + +// +// Place the remainder of the read-only items into flash. +// +place in FLASH { readonly }; + +// +// Place the RAM vector table at the start of SRAM. +// +place at start of SRAM { section VTABLE }; + +// +// Place all read/write items into SRAM. +// +place in SRAM { readwrite, block HEAP }; diff --git a/boards/ek-lm4f120xl-boost-capsense/capsense/capsense.ld b/boards/ek-lm4f120xl-boost-capsense/capsense/capsense.ld new file mode 100644 index 0000000..92a4331 --- /dev/null +++ b/boards/ek-lm4f120xl-boost-capsense/capsense/capsense.ld @@ -0,0 +1,57 @@ +/****************************************************************************** + * + * capsense.ld - Linker configuration file for capsense. + * + * Copyright (c) 2012 Texas Instruments Incorporated. All rights reserved. + * Software License Agreement + * + * Texas Instruments (TI) is supplying this software for use solely and + * exclusively on TI's microcontroller products. The software is owned by + * TI and/or its suppliers, and is protected under applicable copyright + * laws. You may not combine this software with "viral" open-source + * software in order to form a larger program. + * + * THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. + * NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT + * NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY + * CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL + * DAMAGES, FOR ANY REASON WHATSOEVER. + * + * This is part of revision 9453 of the EK-LM4F120XL Firmware Package. + * + *****************************************************************************/ + +MEMORY +{ + FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 0x00040000 + SRAM (rwx) : ORIGIN = 0x20000000, LENGTH = 0x00008000 +} + +SECTIONS +{ + .text : + { + _text = .; + KEEP(*(.isr_vector)) + *(.text*) + *(.rodata*) + _etext = .; + } > FLASH + + .data : AT(ADDR(.text) + SIZEOF(.text)) + { + _data = .; + *(vtable) + *(.data*) + _edata = .; + } > SRAM + + .bss : + { + _bss = .; + *(.bss*) + *(COMMON) + _ebss = .; + } > SRAM +} diff --git a/boards/ek-lm4f120xl-boost-capsense/capsense/capsense.sct b/boards/ek-lm4f120xl-boost-capsense/capsense/capsense.sct new file mode 100644 index 0000000..8fddf54 --- /dev/null +++ b/boards/ek-lm4f120xl-boost-capsense/capsense/capsense.sct @@ -0,0 +1,47 @@ +;****************************************************************************** +; +; capsense.sct - Linker configuration file for capsense. +; +; Copyright (c) 2012 Texas Instruments Incorporated. All rights reserved. +; Software License Agreement +; +; Texas Instruments (TI) is supplying this software for use solely and +; exclusively on TI's microcontroller products. The software is owned by +; TI and/or its suppliers, and is protected under applicable copyright +; laws. You may not combine this software with "viral" open-source +; software in order to form a larger program. +; +; THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +; NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +; NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +; A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +; CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +; DAMAGES, FOR ANY REASON WHATSOEVER. +; +; This is part of revision 9453 of the EK-LM4F120XL Firmware Package. +; +;****************************************************************************** + +LR_IROM 0x00000000 0x00040000 +{ + ; + ; Specify the Execution Address of the code and the size. + ; + ER_IROM 0x00000000 0x00040000 + { + *.o (RESET, +First) + * (InRoot$$Sections, +RO) + } + + ; + ; Specify the Execution Address of the data area. + ; + RW_IRAM 0x20000000 0x00008000 + { + ; + ; Uncomment the following line in order to use IntRegister(). + ; + ;* (vtable, +First) + * (+RW, +ZI) + } +} diff --git a/boards/ek-lm4f120xl-boost-capsense/capsense/capsense.sgxx b/boards/ek-lm4f120xl-boost-capsense/capsense/capsense.sgxx new file mode 100644 index 0000000..521ec38 Binary files /dev/null and b/boards/ek-lm4f120xl-boost-capsense/capsense/capsense.sgxx differ diff --git a/boards/ek-lm4f120xl-boost-capsense/capsense/capsense.uvopt b/boards/ek-lm4f120xl-boost-capsense/capsense/capsense.uvopt new file mode 100644 index 0000000..84ef7f4 --- /dev/null +++ b/boards/ek-lm4f120xl-boost-capsense/capsense/capsense.uvopt @@ -0,0 +1,373 @@ + + + + 1.0 + +
### uVision Project, (C) Keil Software
+ + + *.c + *.s*; *.src; *.a* + *.obj + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + + + + 0 + 0 + + + + capsense + 0x4 + ARM-ADS + + 8000000 + + 1 + 1 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\rvmdk\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 1 + + 255 + + + 0 + Data Sheet + DATASHTS\Luminary\LM4F120H5QR.PDF + + + + SARMCM3.DLL + -MPU + DCM.DLL + -pCM4 + SARMCM3.DLL + -MPU + TCM.DLL + -pCM4 + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 0 + 1 + 0 + 0 + 4 + + + + + + + + + + + BIN\lmidk-agdi.dll + + + + 0 + lmidk-agdi + -O4614 -S3 -FO29 + + + 0 + DLGTARM + + + + 0 + ARMDBGFLAGS + + + + + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + Source + 1 + 0 + 0 + + 1 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\drivers\CTS_HAL.c + CTS_HAL.c + + + 1 + 2 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\drivers\CTS_Layer.c + CTS_Layer.c + + + 1 + 3 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\drivers\CTS_structure.c + CTS_structure.c + + + 1 + 4 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\ek-lm4f120xl\drivers\buttons.c + buttons.c + + + 1 + 5 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + .\capsense.c + capsense.c + + + 1 + 6 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\ek-lm4f120xl\drivers\rgb.c + rgb.c + + + 1 + 7 + 2 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + .\startup_rvmdk.S + startup_rvmdk.S + + + 1 + 8 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\utils\uartstdio.c + uartstdio.c + + + + + Libraries + 1 + 0 + 0 + + 2 + 9 + 4 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\driverlib\rvmdk-cm4f\driverlib-cm4f.lib + driverlib-cm4f.lib + + + + + Documentation + 1 + 0 + 0 + + 3 + 10 + 5 + 0 + 1 + 0 + 0 + 1 + 1 + 0 + .\readme.txt + readme.txt + + 44 + 0 + 1 + + -1 + -1 + + + -1 + -1 + + + 0 + 0 + 729 + 300 + + + + + + + 1 + 0 + + 100 + 0 + + + .\readme.txt + 0 + 1 + 1 + + + + + +
diff --git a/boards/ek-lm4f120xl-boost-capsense/capsense/capsense.uvproj b/boards/ek-lm4f120xl-boost-capsense/capsense/capsense.uvproj new file mode 100644 index 0000000..ae7acde --- /dev/null +++ b/boards/ek-lm4f120xl-boost-capsense/capsense/capsense.uvproj @@ -0,0 +1,454 @@ + + + + 1.1 + +
### uVision Project, (C) Keil Software
+ + + + capsense + 0x4 + ARM-ADS + + + LM4F120H5QR + Texas Instruments + IRAM(0x20000000-0x20007FFF) IROM(0-0x3FFFF) CLOCK(8000000) CPUTYPE("Cortex-M4") FPU2 + + "STARTUP\Luminary\Startup.s" ("Luminary Startup Code") + UL2CM3(-O207 -S0 -C0 -FO7 -FD20000000 -FC800 -FN1 -FF0LM4F_256 -FS00 -FL040000) + 5919 + LM4Fxxxx.H + + + + + + + + + + 0 + + + + Luminary\ + Luminary\ + + 0 + 0 + 0 + 0 + 1 + + .\rvmdk\ + capsense + 1 + 0 + 0 + 1 + 1 + .\rvmdk\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + + 1 + 0 + fromelf --bin --output .\rvmdk\capsense.bin .\rvmdk\capsense.axf + + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + + + SARMCM3.DLL + -MPU + DCM.DLL + -pCM4 + SARMCM3.DLL + -MPU + TCM.DLL + -pCM4 + + + + 1 + 0 + 0 + 0 + 16 + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + + + 1 + 1 + 0 + 1 + 1 + 1 + 0 + 1 + + 0 + 4 + + + + + + + + + + + + + + BIN\lmidk-agdi.dll + + + + + 1 + 0 + 0 + 0 + 1 + 4099 + + BIN\lmidk-agdi.dll + + + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M4" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 2 + 0 + 0 + 8 + 1 + 0 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x8000 + + + 1 + 0x0 + 0x40000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x40000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x8000 + + + 0 + 0x0 + 0x0 + + + + + + 0 + 3 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 2 + 0 + + + rvmdk PART_LM4F120H5QR TARGET_IS_BLIZZARD_RA1 + + ..;..\..\..;..\..\ek-lm4f120xl; + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 0 + 0 + 0 + 0 + 1 + 0 + 0x00000000 + 0x20000000 + capsense.sct + + + --entry Reset_Handler + + + + + + + + Source + + + CTS_HAL.c + 1 + ..\drivers\CTS_HAL.c + + + CTS_Layer.c + 1 + ..\drivers\CTS_Layer.c + + + CTS_structure.c + 1 + ..\drivers\CTS_structure.c + + + buttons.c + 1 + ..\..\ek-lm4f120xl\drivers\buttons.c + + + capsense.c + 1 + .\capsense.c + + + rgb.c + 1 + ..\..\ek-lm4f120xl\drivers\rgb.c + + + startup_rvmdk.S + 2 + .\startup_rvmdk.S + + + uartstdio.c + 1 + ..\..\..\utils\uartstdio.c + + + + + Libraries + + + driverlib-cm4f.lib + 4 + ..\..\..\driverlib\rvmdk-cm4f\driverlib-cm4f.lib + + + + + Documentation + + + readme.txt + 5 + .\readme.txt + + + + + + + +
diff --git a/boards/ek-lm4f120xl-boost-capsense/capsense/capsense_ccs.cmd b/boards/ek-lm4f120xl-boost-capsense/capsense/capsense_ccs.cmd new file mode 100644 index 0000000..524b166 --- /dev/null +++ b/boards/ek-lm4f120xl-boost-capsense/capsense/capsense_ccs.cmd @@ -0,0 +1,70 @@ +/****************************************************************************** + * + * capsense_ccs.cmd - CCS linker configuration file for capsense. + * + * Copyright (c) 2012 Texas Instruments Incorporated. All rights reserved. + * Software License Agreement + * + * Texas Instruments (TI) is supplying this software for use solely and + * exclusively on TI's microcontroller products. The software is owned by + * TI and/or its suppliers, and is protected under applicable copyright + * laws. You may not combine this software with "viral" open-source + * software in order to form a larger program. + * + * THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. + * NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT + * NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY + * CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL + * DAMAGES, FOR ANY REASON WHATSOEVER. + * + * This is part of revision 9453 of the EK-LM4F120XL Firmware Package. + * + *****************************************************************************/ + +--retain=g_pfnVectors + +/* The following command line options are set as part of the CCS project. */ +/* If you are building using the command line, or for some reason want to */ +/* define them here, you can uncomment and modify these lines as needed. */ +/* If you are using CCS for building, it is probably better to make any such */ +/* modifications in your CCS project and leave this file alone. */ +/* */ +/* --heap_size=0 */ +/* --stack_size=256 */ +/* --library=rtsv7M3_T_le_eabi.lib */ + +/* The starting address of the application. Normally the interrupt vectors */ +/* must be located at the beginning of the application. */ +#define APP_BASE 0x00000000 +#define RAM_BASE 0x20000000 + +/* System memory map */ + +MEMORY +{ + /* Application stored in and executes from internal flash */ + FLASH (RX) : origin = APP_BASE, length = 0x00040000 + /* Application uses internal RAM for data */ + SRAM (RWX) : origin = 0x20000000, length = 0x00008000 +} + +/* Section allocation in memory */ + +SECTIONS +{ + .intvecs: > APP_BASE + .text : > FLASH + .const : > FLASH + .cinit : > FLASH + .pinit : > FLASH + .init_array : > FLASH + + .vtable : > RAM_BASE + .data : > SRAM + .bss : > SRAM + .sysmem : > SRAM + .stack : > SRAM +} + +__STACK_TOP = __stack + 512; diff --git a/boards/ek-lm4f120xl-boost-capsense/capsense/capsense_sourcerygxx.ld b/boards/ek-lm4f120xl-boost-capsense/capsense/capsense_sourcerygxx.ld new file mode 100644 index 0000000..e17f412 --- /dev/null +++ b/boards/ek-lm4f120xl-boost-capsense/capsense/capsense_sourcerygxx.ld @@ -0,0 +1,31 @@ +/****************************************************************************** + * + * capsense_sourcerygxx.ld - Scatter file for Sourcery CodeBench + * + * Copyright (c) 2012 Texas Instruments Incorporated. All rights reserved. + * Software License Agreement + * + * Texas Instruments (TI) is supplying this software for use solely and + * exclusively on TI's microcontroller products. The software is owned by + * TI and/or its suppliers, and is protected under applicable copyright + * laws. You may not combine this software with "viral" open-source + * software in order to form a larger program. + * + * THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. + * NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT + * NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY + * CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL + * DAMAGES, FOR ANY REASON WHATSOEVER. + * + * This is part of revision 9453 of the EK-LM4F120XL Firmware Package. + * + *****************************************************************************/ + +/****************************************************************************** + * + * Define the end of the heap space, which determines the beginning of the + * stack space. + * + *****************************************************************************/ +__cs3_heap_end = __cs3_region_end_ram - 512; diff --git a/boards/ek-lm4f120xl-boost-capsense/capsense/ccs/.ccsimportspec b/boards/ek-lm4f120xl-boost-capsense/capsense/ccs/.ccsimportspec new file mode 100644 index 0000000..fff5e0c --- /dev/null +++ b/boards/ek-lm4f120xl-boost-capsense/capsense/ccs/.ccsimportspec @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/boards/ek-lm4f120xl-boost-capsense/capsense/ccs/.ccsproject b/boards/ek-lm4f120xl-boost-capsense/capsense/ccs/.ccsproject new file mode 100644 index 0000000..56793f4 --- /dev/null +++ b/boards/ek-lm4f120xl-boost-capsense/capsense/ccs/.ccsproject @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/boards/ek-lm4f120xl-boost-capsense/capsense/ccs/.cproject b/boards/ek-lm4f120xl-boost-capsense/capsense/ccs/.cproject new file mode 100644 index 0000000..c13272a --- /dev/null +++ b/boards/ek-lm4f120xl-boost-capsense/capsense/ccs/.cproject @@ -0,0 +1,195 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/boards/ek-lm4f120xl-boost-capsense/capsense/ccs/.project b/boards/ek-lm4f120xl-boost-capsense/capsense/ccs/.project new file mode 100644 index 0000000..55a238f --- /dev/null +++ b/boards/ek-lm4f120xl-boost-capsense/capsense/ccs/.project @@ -0,0 +1,136 @@ + + + capsense + + + + + + org.eclipse.cdt.managedbuilder.core.genmakebuilder + + + ?name? + + + + org.eclipse.cdt.make.core.append_environment + true + + + org.eclipse.cdt.make.core.autoBuildTarget + all + + + org.eclipse.cdt.make.core.buildArguments + -k + + + org.eclipse.cdt.make.core.buildCommand + ${CCS_UTILS_DIR}/bin/gmake + + + org.eclipse.cdt.make.core.buildLocation + ${BuildDirectory} + + + org.eclipse.cdt.make.core.cleanBuildTarget + clean + + + org.eclipse.cdt.make.core.contents + org.eclipse.cdt.make.core.activeConfigSettings + + + org.eclipse.cdt.make.core.enableAutoBuild + true + + + org.eclipse.cdt.make.core.enableCleanBuild + true + + + org.eclipse.cdt.make.core.enableFullBuild + true + + + org.eclipse.cdt.make.core.fullBuildTarget + all + + + org.eclipse.cdt.make.core.stopOnError + false + + + org.eclipse.cdt.make.core.useDefaultBuildCmd + true + + + + + org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder + full,incremental, + + + + + + com.ti.ccstudio.core.ccsNature + org.eclipse.cdt.core.cnature + org.eclipse.cdt.managedbuilder.core.managedBuildNature + org.eclipse.cdt.core.ccnature + org.eclipse.cdt.managedbuilder.core.ScannerConfigNature + + + + capsense.c + 1 + SW_ROOT/boards/ek-lm4f120xl-boost-capsense/capsense/capsense.c + + + capsense_ccs.cmd + 1 + SW_ROOT/boards/ek-lm4f120xl-boost-capsense/capsense/capsense_ccs.cmd + + + startup_ccs.c + 1 + SW_ROOT/boards/ek-lm4f120xl-boost-capsense/capsense/startup_ccs.c + + + drivers/CTS_HAL.c + 1 + SW_ROOT/boards/ek-lm4f120xl-boost-capsense/drivers/CTS_HAL.c + + + drivers/CTS_Layer.c + 1 + SW_ROOT/boards/ek-lm4f120xl-boost-capsense/drivers/CTS_Layer.c + + + drivers/CTS_structure.c + 1 + SW_ROOT/boards/ek-lm4f120xl-boost-capsense/drivers/CTS_structure.c + + + utils/uartstdio.c + 1 + SW_ROOT/utils/uartstdio.c + + + ek-lm4f120xl/drivers/buttons.c + 1 + SW_ROOT/boards/ek-lm4f120xl/drivers/buttons.c + + + ek-lm4f120xl/drivers/rgb.c + 1 + SW_ROOT/boards/ek-lm4f120xl/drivers/rgb.c + + + + + SW_ROOT + $%7BPARENT-4-PROJECT_LOC%7D + + + diff --git a/boards/ek-lm4f120xl-boost-capsense/capsense/ccs/.settings/org.eclipse.cdt.codan.core.prefs b/boards/ek-lm4f120xl-boost-capsense/capsense/ccs/.settings/org.eclipse.cdt.codan.core.prefs new file mode 100644 index 0000000..98b6350 --- /dev/null +++ b/boards/ek-lm4f120xl-boost-capsense/capsense/ccs/.settings/org.eclipse.cdt.codan.core.prefs @@ -0,0 +1,3 @@ +eclipse.preferences.version=1 +inEditor=false +onBuild=false diff --git a/boards/ek-lm4f120xl-boost-capsense/capsense/ccs/Debug/capsense.bin b/boards/ek-lm4f120xl-boost-capsense/capsense/ccs/Debug/capsense.bin new file mode 100644 index 0000000..8a87e1b Binary files /dev/null and b/boards/ek-lm4f120xl-boost-capsense/capsense/ccs/Debug/capsense.bin differ diff --git a/boards/ek-lm4f120xl-boost-capsense/capsense/ccs/Debug/capsense.out b/boards/ek-lm4f120xl-boost-capsense/capsense/ccs/Debug/capsense.out new file mode 100644 index 0000000..30334bd Binary files /dev/null and b/boards/ek-lm4f120xl-boost-capsense/capsense/ccs/Debug/capsense.out differ diff --git a/boards/ek-lm4f120xl-boost-capsense/capsense/ccs/macros.ini_initial b/boards/ek-lm4f120xl-boost-capsense/capsense/ccs/macros.ini_initial new file mode 100644 index 0000000..588017d --- /dev/null +++ b/boards/ek-lm4f120xl-boost-capsense/capsense/ccs/macros.ini_initial @@ -0,0 +1 @@ +SW_ROOT = ../../../.. diff --git a/boards/ek-lm4f120xl-boost-capsense/capsense/ccs/target_config.ccxml b/boards/ek-lm4f120xl-boost-capsense/capsense/ccs/target_config.ccxml new file mode 100644 index 0000000..469eea0 --- /dev/null +++ b/boards/ek-lm4f120xl-boost-capsense/capsense/ccs/target_config.ccxml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/boards/ek-lm4f120xl-boost-capsense/capsense/ewarm/Exe/capsense.bin b/boards/ek-lm4f120xl-boost-capsense/capsense/ewarm/Exe/capsense.bin new file mode 100644 index 0000000..be02763 Binary files /dev/null and b/boards/ek-lm4f120xl-boost-capsense/capsense/ewarm/Exe/capsense.bin differ diff --git a/boards/ek-lm4f120xl-boost-capsense/capsense/ewarm/Exe/capsense.out b/boards/ek-lm4f120xl-boost-capsense/capsense/ewarm/Exe/capsense.out new file mode 100644 index 0000000..171adb8 Binary files /dev/null and b/boards/ek-lm4f120xl-boost-capsense/capsense/ewarm/Exe/capsense.out differ diff --git a/boards/ek-lm4f120xl-boost-capsense/capsense/gcc/capsense.axf b/boards/ek-lm4f120xl-boost-capsense/capsense/gcc/capsense.axf new file mode 100644 index 0000000..2313693 Binary files /dev/null and b/boards/ek-lm4f120xl-boost-capsense/capsense/gcc/capsense.axf differ diff --git a/boards/ek-lm4f120xl-boost-capsense/capsense/gcc/capsense.bin b/boards/ek-lm4f120xl-boost-capsense/capsense/gcc/capsense.bin new file mode 100644 index 0000000..46b0852 Binary files /dev/null and b/boards/ek-lm4f120xl-boost-capsense/capsense/gcc/capsense.bin differ diff --git a/boards/ek-lm4f120xl-boost-capsense/capsense/readme.txt b/boards/ek-lm4f120xl-boost-capsense/capsense/readme.txt new file mode 100644 index 0000000..cf3300b --- /dev/null +++ b/boards/ek-lm4f120xl-boost-capsense/capsense/readme.txt @@ -0,0 +1,32 @@ +Capacitive Touch Example + +An example that works with the 430BOOST-SENSE1 capactive sense +BoosterPack, originally designed for the MSP430 LaunchPad. + +The Stellaris LM4F120H5QR does not have the capacitive sense hardware +assisted peripheral features of some MSP430 chips. Therefore it is +required that the user install surface mount resistors on the pads +provided on the bottom of the capacitive sense BoosterPack. Resistor values +of 30 ohms are recommended. Calibration may be required for +resistor values other than 30 ohms. + + +------------------------------------------------------------------------------- + +Copyright (c) 2011-2012 Texas Instruments Incorporated. All rights reserved. +Software License Agreement + +Texas Instruments (TI) is supplying this software for use solely and +exclusively on TI's microcontroller products. The software is owned by +TI and/or its suppliers, and is protected under applicable copyright +laws. You may not combine this software with "viral" open-source +software in order to form a larger program. + +THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, FOR ANY REASON WHATSOEVER. + +This is part of revision 9453 of the EK-LM4F120XL Firmware Package. diff --git a/boards/ek-lm4f120xl-boost-capsense/capsense/rvmdk/capsense.axf b/boards/ek-lm4f120xl-boost-capsense/capsense/rvmdk/capsense.axf new file mode 100644 index 0000000..8979a0a Binary files /dev/null and b/boards/ek-lm4f120xl-boost-capsense/capsense/rvmdk/capsense.axf differ diff --git a/boards/ek-lm4f120xl-boost-capsense/capsense/rvmdk/capsense.bin b/boards/ek-lm4f120xl-boost-capsense/capsense/rvmdk/capsense.bin new file mode 100644 index 0000000..498e8fb Binary files /dev/null and b/boards/ek-lm4f120xl-boost-capsense/capsense/rvmdk/capsense.bin differ diff --git a/boards/ek-lm4f120xl-boost-capsense/capsense/sourcerygxx/capsense.axf b/boards/ek-lm4f120xl-boost-capsense/capsense/sourcerygxx/capsense.axf new file mode 100644 index 0000000..7c18785 Binary files /dev/null and b/boards/ek-lm4f120xl-boost-capsense/capsense/sourcerygxx/capsense.axf differ diff --git a/boards/ek-lm4f120xl-boost-capsense/capsense/sourcerygxx/capsense.bin b/boards/ek-lm4f120xl-boost-capsense/capsense/sourcerygxx/capsense.bin new file mode 100644 index 0000000..16dc618 Binary files /dev/null and b/boards/ek-lm4f120xl-boost-capsense/capsense/sourcerygxx/capsense.bin differ diff --git a/boards/ek-lm4f120xl-boost-capsense/capsense/startup_ccs.c b/boards/ek-lm4f120xl-boost-capsense/capsense/startup_ccs.c new file mode 100644 index 0000000..9f15b47 --- /dev/null +++ b/boards/ek-lm4f120xl-boost-capsense/capsense/startup_ccs.c @@ -0,0 +1,291 @@ +//***************************************************************************** +// +// startup_ccs.c - Startup code for use with TI's Code Composer Studio. +// +// Copyright (c) 2012 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 9453 of the EK-LM4F120XL Firmware Package. +// +//***************************************************************************** + +//***************************************************************************** +// +// Forward declaration of the default fault handlers. +// +//***************************************************************************** +void ResetISR(void); +static void NmiSR(void); +static void FaultISR(void); +static void IntDefaultHandler(void); + +//***************************************************************************** +// +// External declaration for the reset handler that is to be called when the +// processor is started +// +//***************************************************************************** +extern void _c_int00(void); + +//***************************************************************************** +// +// Linker variable that marks the top of the stack. +// +//***************************************************************************** +extern unsigned long __STACK_TOP; + +//***************************************************************************** +// +// The vector table. Note that the proper constructs must be placed on this to +// ensure that it ends up at physical address 0x0000.0000 or at the start of +// the program if located at a start address other than 0. +// +//***************************************************************************** +#pragma DATA_SECTION(g_pfnVectors, ".intvecs") +void (* const g_pfnVectors[])(void) = +{ + (void (*)(void))((unsigned long)&__STACK_TOP), + // The initial stack pointer + ResetISR, // The reset handler + NmiSR, // The NMI handler + FaultISR, // The hard fault handler + IntDefaultHandler, // The MPU fault handler + IntDefaultHandler, // The bus fault handler + IntDefaultHandler, // The usage fault handler + 0, // Reserved + 0, // Reserved + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // SVCall handler + IntDefaultHandler, // Debug monitor handler + 0, // Reserved + IntDefaultHandler, // The PendSV handler + IntDefaultHandler, // The SysTick handler + IntDefaultHandler, // GPIO Port A + IntDefaultHandler, // GPIO Port B + IntDefaultHandler, // GPIO Port C + IntDefaultHandler, // GPIO Port D + IntDefaultHandler, // GPIO Port E + IntDefaultHandler, // UART0 Rx and Tx + IntDefaultHandler, // UART1 Rx and Tx + IntDefaultHandler, // SSI0 Rx and Tx + IntDefaultHandler, // I2C0 Master and Slave + IntDefaultHandler, // PWM Fault + IntDefaultHandler, // PWM Generator 0 + IntDefaultHandler, // PWM Generator 1 + IntDefaultHandler, // PWM Generator 2 + IntDefaultHandler, // Quadrature Encoder 0 + IntDefaultHandler, // ADC Sequence 0 + IntDefaultHandler, // ADC Sequence 1 + IntDefaultHandler, // ADC Sequence 2 + IntDefaultHandler, // ADC Sequence 3 + IntDefaultHandler, // Watchdog timer + IntDefaultHandler, // Timer 0 subtimer A + IntDefaultHandler, // Timer 0 subtimer B + IntDefaultHandler, // Timer 1 subtimer A + IntDefaultHandler, // Timer 1 subtimer B + IntDefaultHandler, // Timer 2 subtimer A + IntDefaultHandler, // Timer 2 subtimer B + IntDefaultHandler, // Analog Comparator 0 + IntDefaultHandler, // Analog Comparator 1 + IntDefaultHandler, // Analog Comparator 2 + IntDefaultHandler, // System Control (PLL, OSC, BO) + IntDefaultHandler, // FLASH Control + IntDefaultHandler, // GPIO Port F + IntDefaultHandler, // GPIO Port G + IntDefaultHandler, // GPIO Port H + IntDefaultHandler, // UART2 Rx and Tx + IntDefaultHandler, // SSI1 Rx and Tx + IntDefaultHandler, // Timer 3 subtimer A + IntDefaultHandler, // Timer 3 subtimer B + IntDefaultHandler, // I2C1 Master and Slave + IntDefaultHandler, // Quadrature Encoder 1 + IntDefaultHandler, // CAN0 + IntDefaultHandler, // CAN1 + IntDefaultHandler, // CAN2 + IntDefaultHandler, // Ethernet + IntDefaultHandler, // Hibernate + IntDefaultHandler, // USB0 + IntDefaultHandler, // PWM Generator 3 + IntDefaultHandler, // uDMA Software Transfer + IntDefaultHandler, // uDMA Error + IntDefaultHandler, // ADC1 Sequence 0 + IntDefaultHandler, // ADC1 Sequence 1 + IntDefaultHandler, // ADC1 Sequence 2 + IntDefaultHandler, // ADC1 Sequence 3 + IntDefaultHandler, // I2S0 + IntDefaultHandler, // External Bus Interface 0 + IntDefaultHandler, // GPIO Port J + IntDefaultHandler, // GPIO Port K + IntDefaultHandler, // GPIO Port L + IntDefaultHandler, // SSI2 Rx and Tx + IntDefaultHandler, // SSI3 Rx and Tx + IntDefaultHandler, // UART3 Rx and Tx + IntDefaultHandler, // UART4 Rx and Tx + IntDefaultHandler, // UART5 Rx and Tx + IntDefaultHandler, // UART6 Rx and Tx + IntDefaultHandler, // UART7 Rx and Tx + 0, // Reserved + 0, // Reserved + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // I2C2 Master and Slave + IntDefaultHandler, // I2C3 Master and Slave + IntDefaultHandler, // Timer 4 subtimer A + IntDefaultHandler, // Timer 4 subtimer B + 0, // Reserved + 0, // Reserved + 0, // Reserved + 0, // Reserved + 0, // Reserved + 0, // Reserved + 0, // Reserved + 0, // Reserved + 0, // Reserved + 0, // Reserved + 0, // Reserved + 0, // Reserved + 0, // Reserved + 0, // Reserved + 0, // Reserved + 0, // Reserved + 0, // Reserved + 0, // Reserved + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // Timer 5 subtimer A + IntDefaultHandler, // Timer 5 subtimer B + IntDefaultHandler, // Wide Timer 0 subtimer A + IntDefaultHandler, // Wide Timer 0 subtimer B + IntDefaultHandler, // Wide Timer 1 subtimer A + IntDefaultHandler, // Wide Timer 1 subtimer B + IntDefaultHandler, // Wide Timer 2 subtimer A + IntDefaultHandler, // Wide Timer 2 subtimer B + IntDefaultHandler, // Wide Timer 3 subtimer A + IntDefaultHandler, // Wide Timer 3 subtimer B + IntDefaultHandler, // Wide Timer 4 subtimer A + IntDefaultHandler, // Wide Timer 4 subtimer B + IntDefaultHandler, // Wide Timer 5 subtimer A + IntDefaultHandler, // Wide Timer 5 subtimer B + IntDefaultHandler, // FPU + IntDefaultHandler, // PECI 0 + IntDefaultHandler, // LPC 0 + IntDefaultHandler, // I2C4 Master and Slave + IntDefaultHandler, // I2C5 Master and Slave + IntDefaultHandler, // GPIO Port M + IntDefaultHandler, // GPIO Port N + IntDefaultHandler, // Quadrature Encoder 2 + IntDefaultHandler, // Fan 0 + 0, // Reserved + IntDefaultHandler, // GPIO Port P (Summary or P0) + IntDefaultHandler, // GPIO Port P1 + IntDefaultHandler, // GPIO Port P2 + IntDefaultHandler, // GPIO Port P3 + IntDefaultHandler, // GPIO Port P4 + IntDefaultHandler, // GPIO Port P5 + IntDefaultHandler, // GPIO Port P6 + IntDefaultHandler, // GPIO Port P7 + IntDefaultHandler, // GPIO Port Q (Summary or Q0) + IntDefaultHandler, // GPIO Port Q1 + IntDefaultHandler, // GPIO Port Q2 + IntDefaultHandler, // GPIO Port Q3 + IntDefaultHandler, // GPIO Port Q4 + IntDefaultHandler, // GPIO Port Q5 + IntDefaultHandler, // GPIO Port Q6 + IntDefaultHandler, // GPIO Port Q7 + IntDefaultHandler, // GPIO Port R + IntDefaultHandler, // GPIO Port S + IntDefaultHandler, // PWM 1 Generator 0 + IntDefaultHandler, // PWM 1 Generator 1 + IntDefaultHandler, // PWM 1 Generator 2 + IntDefaultHandler, // PWM 1 Generator 3 + IntDefaultHandler // PWM 1 Fault +}; + +//***************************************************************************** +// +// This is the code that gets called when the processor first starts execution +// following a reset event. Only the absolutely necessary set is performed, +// after which the application supplied entry() routine is called. Any fancy +// actions (such as making decisions based on the reset cause register, and +// resetting the bits in that register) are left solely in the hands of the +// application. +// +//***************************************************************************** +void +ResetISR(void) +{ + // + // Jump to the CCS C initialization routine. This will enable the + // floating-point unit as well, so that does not need to be done here. + // + __asm(" .global _c_int00\n" + " b.w _c_int00"); +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a NMI. This +// simply enters an infinite loop, preserving the system state for examination +// by a debugger. +// +//***************************************************************************** +static void +NmiSR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a fault +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +FaultISR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives an unexpected +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +IntDefaultHandler(void) +{ + // + // Go into an infinite loop. + // + while(1) + { + } +} diff --git a/boards/ek-lm4f120xl-boost-capsense/capsense/startup_ewarm.c b/boards/ek-lm4f120xl-boost-capsense/capsense/startup_ewarm.c new file mode 100644 index 0000000..ea56618 --- /dev/null +++ b/boards/ek-lm4f120xl-boost-capsense/capsense/startup_ewarm.c @@ -0,0 +1,325 @@ +//***************************************************************************** +// +// startup_ewarm.c - Startup code for use with IAR's Embedded Workbench, +// version 5. +// +// Copyright (c) 2012 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 9453 of the EK-LM4F120XL Firmware Package. +// +//***************************************************************************** + +#include "inc/hw_nvic.h" +#include "inc/hw_types.h" + +//***************************************************************************** +// +// Enable the IAR extensions for this source file. +// +//***************************************************************************** +#pragma language=extended + +//***************************************************************************** +// +// Forward declaration of the default fault handlers. +// +//***************************************************************************** +void ResetISR(void); +static void NmiSR(void); +static void FaultISR(void); +static void IntDefaultHandler(void); + +//***************************************************************************** +// +// The entry point for the application startup code. +// +//***************************************************************************** +extern void __iar_program_start(void); + +//***************************************************************************** +// +// Reserve space for the system stack. +// +//***************************************************************************** +static unsigned long pulStack[128] @ ".noinit"; + +//***************************************************************************** +// +// A union that describes the entries of the vector table. The union is needed +// since the first entry is the stack pointer and the remainder are function +// pointers. +// +//***************************************************************************** +typedef union +{ + void (*pfnHandler)(void); + unsigned long ulPtr; +} +uVectorEntry; + +//***************************************************************************** +// +// The vector table. Note that the proper constructs must be placed on this to +// ensure that it ends up at physical address 0x0000.0000. +// +//***************************************************************************** +__root const uVectorEntry __vector_table[] @ ".intvec" = +{ + { .ulPtr = (unsigned long)pulStack + sizeof(pulStack) }, + // The initial stack pointer + ResetISR, // The reset handler + NmiSR, // The NMI handler + FaultISR, // The hard fault handler + IntDefaultHandler, // The MPU fault handler + IntDefaultHandler, // The bus fault handler + IntDefaultHandler, // The usage fault handler + 0, // Reserved + 0, // Reserved + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // SVCall handler + IntDefaultHandler, // Debug monitor handler + 0, // Reserved + IntDefaultHandler, // The PendSV handler + IntDefaultHandler, // The SysTick handler + IntDefaultHandler, // GPIO Port A + IntDefaultHandler, // GPIO Port B + IntDefaultHandler, // GPIO Port C + IntDefaultHandler, // GPIO Port D + IntDefaultHandler, // GPIO Port E + IntDefaultHandler, // UART0 Rx and Tx + IntDefaultHandler, // UART1 Rx and Tx + IntDefaultHandler, // SSI0 Rx and Tx + IntDefaultHandler, // I2C0 Master and Slave + IntDefaultHandler, // PWM Fault + IntDefaultHandler, // PWM Generator 0 + IntDefaultHandler, // PWM Generator 1 + IntDefaultHandler, // PWM Generator 2 + IntDefaultHandler, // Quadrature Encoder 0 + IntDefaultHandler, // ADC Sequence 0 + IntDefaultHandler, // ADC Sequence 1 + IntDefaultHandler, // ADC Sequence 2 + IntDefaultHandler, // ADC Sequence 3 + IntDefaultHandler, // Watchdog timer + IntDefaultHandler, // Timer 0 subtimer A + IntDefaultHandler, // Timer 0 subtimer B + IntDefaultHandler, // Timer 1 subtimer A + IntDefaultHandler, // Timer 1 subtimer B + IntDefaultHandler, // Timer 2 subtimer A + IntDefaultHandler, // Timer 2 subtimer B + IntDefaultHandler, // Analog Comparator 0 + IntDefaultHandler, // Analog Comparator 1 + IntDefaultHandler, // Analog Comparator 2 + IntDefaultHandler, // System Control (PLL, OSC, BO) + IntDefaultHandler, // FLASH Control + IntDefaultHandler, // GPIO Port F + IntDefaultHandler, // GPIO Port G + IntDefaultHandler, // GPIO Port H + IntDefaultHandler, // UART2 Rx and Tx + IntDefaultHandler, // SSI1 Rx and Tx + IntDefaultHandler, // Timer 3 subtimer A + IntDefaultHandler, // Timer 3 subtimer B + IntDefaultHandler, // I2C1 Master and Slave + IntDefaultHandler, // Quadrature Encoder 1 + IntDefaultHandler, // CAN0 + IntDefaultHandler, // CAN1 + IntDefaultHandler, // CAN2 + IntDefaultHandler, // Ethernet + IntDefaultHandler, // Hibernate + IntDefaultHandler, // USB0 + IntDefaultHandler, // PWM Generator 3 + IntDefaultHandler, // uDMA Software Transfer + IntDefaultHandler, // uDMA Error + IntDefaultHandler, // ADC1 Sequence 0 + IntDefaultHandler, // ADC1 Sequence 1 + IntDefaultHandler, // ADC1 Sequence 2 + IntDefaultHandler, // ADC1 Sequence 3 + IntDefaultHandler, // I2S0 + IntDefaultHandler, // External Bus Interface 0 + IntDefaultHandler, // GPIO Port J + IntDefaultHandler, // GPIO Port K + IntDefaultHandler, // GPIO Port L + IntDefaultHandler, // SSI2 Rx and Tx + IntDefaultHandler, // SSI3 Rx and Tx + IntDefaultHandler, // UART3 Rx and Tx + IntDefaultHandler, // UART4 Rx and Tx + IntDefaultHandler, // UART5 Rx and Tx + IntDefaultHandler, // UART6 Rx and Tx + IntDefaultHandler, // UART7 Rx and Tx + 0, // Reserved + 0, // Reserved + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // I2C2 Master and Slave + IntDefaultHandler, // I2C3 Master and Slave + IntDefaultHandler, // Timer 4 subtimer A + IntDefaultHandler, // Timer 4 subtimer B + 0, // Reserved + 0, // Reserved + 0, // Reserved + 0, // Reserved + 0, // Reserved + 0, // Reserved + 0, // Reserved + 0, // Reserved + 0, // Reserved + 0, // Reserved + 0, // Reserved + 0, // Reserved + 0, // Reserved + 0, // Reserved + 0, // Reserved + 0, // Reserved + 0, // Reserved + 0, // Reserved + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // Timer 5 subtimer A + IntDefaultHandler, // Timer 5 subtimer B + IntDefaultHandler, // Wide Timer 0 subtimer A + IntDefaultHandler, // Wide Timer 0 subtimer B + IntDefaultHandler, // Wide Timer 1 subtimer A + IntDefaultHandler, // Wide Timer 1 subtimer B + IntDefaultHandler, // Wide Timer 2 subtimer A + IntDefaultHandler, // Wide Timer 2 subtimer B + IntDefaultHandler, // Wide Timer 3 subtimer A + IntDefaultHandler, // Wide Timer 3 subtimer B + IntDefaultHandler, // Wide Timer 4 subtimer A + IntDefaultHandler, // Wide Timer 4 subtimer B + IntDefaultHandler, // Wide Timer 5 subtimer A + IntDefaultHandler, // Wide Timer 5 subtimer B + IntDefaultHandler, // FPU + IntDefaultHandler, // PECI 0 + IntDefaultHandler, // LPC 0 + IntDefaultHandler, // I2C4 Master and Slave + IntDefaultHandler, // I2C5 Master and Slave + IntDefaultHandler, // GPIO Port M + IntDefaultHandler, // GPIO Port N + IntDefaultHandler, // Quadrature Encoder 2 + IntDefaultHandler, // Fan 0 + 0, // Reserved + IntDefaultHandler, // GPIO Port P (Summary or P0) + IntDefaultHandler, // GPIO Port P1 + IntDefaultHandler, // GPIO Port P2 + IntDefaultHandler, // GPIO Port P3 + IntDefaultHandler, // GPIO Port P4 + IntDefaultHandler, // GPIO Port P5 + IntDefaultHandler, // GPIO Port P6 + IntDefaultHandler, // GPIO Port P7 + IntDefaultHandler, // GPIO Port Q (Summary or Q0) + IntDefaultHandler, // GPIO Port Q1 + IntDefaultHandler, // GPIO Port Q2 + IntDefaultHandler, // GPIO Port Q3 + IntDefaultHandler, // GPIO Port Q4 + IntDefaultHandler, // GPIO Port Q5 + IntDefaultHandler, // GPIO Port Q6 + IntDefaultHandler, // GPIO Port Q7 + IntDefaultHandler, // GPIO Port R + IntDefaultHandler, // GPIO Port S + IntDefaultHandler, // PWM 1 Generator 0 + IntDefaultHandler, // PWM 1 Generator 1 + IntDefaultHandler, // PWM 1 Generator 2 + IntDefaultHandler, // PWM 1 Generator 3 + IntDefaultHandler // PWM 1 Fault +}; + +//***************************************************************************** +// +// This is the code that gets called when the processor first starts execution +// following a reset event. Only the absolutely necessary set is performed, +// after which the application supplied entry() routine is called. Any fancy +// actions (such as making decisions based on the reset cause register, and +// resetting the bits in that register) are left solely in the hands of the +// application. +// +//***************************************************************************** +void +ResetISR(void) +{ + // + // Enable the floating-point unit. This must be done here to handle the + // case where main() uses floating-point and the function prologue saves + // floating-point registers (which will fault if floating-point is not + // enabled). Any configuration of the floating-point unit using DriverLib + // APIs must be done here prior to the floating-point unit being enabled. + // + // Note that this does not use DriverLib since it might not be included in + // this project. + // + HWREG(NVIC_CPAC) = ((HWREG(NVIC_CPAC) & + ~(NVIC_CPAC_CP10_M | NVIC_CPAC_CP11_M)) | + NVIC_CPAC_CP10_FULL | NVIC_CPAC_CP11_FULL); + + // + // Call the application's entry point. + // + __iar_program_start(); +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a NMI. This +// simply enters an infinite loop, preserving the system state for examination +// by a debugger. +// +//***************************************************************************** +static void +NmiSR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a fault +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +FaultISR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives an unexpected +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +IntDefaultHandler(void) +{ + // + // Go into an infinite loop. + // + while(1) + { + } +} diff --git a/boards/ek-lm4f120xl-boost-capsense/capsense/startup_gcc.c b/boards/ek-lm4f120xl-boost-capsense/capsense/startup_gcc.c new file mode 100644 index 0000000..4c64cd2 --- /dev/null +++ b/boards/ek-lm4f120xl-boost-capsense/capsense/startup_gcc.c @@ -0,0 +1,341 @@ +//***************************************************************************** +// +// startup_gcc.c - Startup code for use with GNU tools. +// +// Copyright (c) 2012 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 9453 of the EK-LM4F120XL Firmware Package. +// +//***************************************************************************** + +#include "inc/hw_nvic.h" +#include "inc/hw_types.h" + +//***************************************************************************** +// +// Forward declaration of the default fault handlers. +// +//***************************************************************************** +void ResetISR(void); +static void NmiSR(void); +static void FaultISR(void); +static void IntDefaultHandler(void); + +//***************************************************************************** +// +// The entry point for the application. +// +//***************************************************************************** +extern int main(void); + +//***************************************************************************** +// +// Reserve space for the system stack. +// +//***************************************************************************** +static unsigned long pulStack[128]; + +//***************************************************************************** +// +// The vector table. Note that the proper constructs must be placed on this to +// ensure that it ends up at physical address 0x0000.0000. +// +//***************************************************************************** +__attribute__ ((section(".isr_vector"))) +void (* const g_pfnVectors[])(void) = +{ + (void (*)(void))((unsigned long)pulStack + sizeof(pulStack)), + // The initial stack pointer + ResetISR, // The reset handler + NmiSR, // The NMI handler + FaultISR, // The hard fault handler + IntDefaultHandler, // The MPU fault handler + IntDefaultHandler, // The bus fault handler + IntDefaultHandler, // The usage fault handler + 0, // Reserved + 0, // Reserved + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // SVCall handler + IntDefaultHandler, // Debug monitor handler + 0, // Reserved + IntDefaultHandler, // The PendSV handler + IntDefaultHandler, // The SysTick handler + IntDefaultHandler, // GPIO Port A + IntDefaultHandler, // GPIO Port B + IntDefaultHandler, // GPIO Port C + IntDefaultHandler, // GPIO Port D + IntDefaultHandler, // GPIO Port E + IntDefaultHandler, // UART0 Rx and Tx + IntDefaultHandler, // UART1 Rx and Tx + IntDefaultHandler, // SSI0 Rx and Tx + IntDefaultHandler, // I2C0 Master and Slave + IntDefaultHandler, // PWM Fault + IntDefaultHandler, // PWM Generator 0 + IntDefaultHandler, // PWM Generator 1 + IntDefaultHandler, // PWM Generator 2 + IntDefaultHandler, // Quadrature Encoder 0 + IntDefaultHandler, // ADC Sequence 0 + IntDefaultHandler, // ADC Sequence 1 + IntDefaultHandler, // ADC Sequence 2 + IntDefaultHandler, // ADC Sequence 3 + IntDefaultHandler, // Watchdog timer + IntDefaultHandler, // Timer 0 subtimer A + IntDefaultHandler, // Timer 0 subtimer B + IntDefaultHandler, // Timer 1 subtimer A + IntDefaultHandler, // Timer 1 subtimer B + IntDefaultHandler, // Timer 2 subtimer A + IntDefaultHandler, // Timer 2 subtimer B + IntDefaultHandler, // Analog Comparator 0 + IntDefaultHandler, // Analog Comparator 1 + IntDefaultHandler, // Analog Comparator 2 + IntDefaultHandler, // System Control (PLL, OSC, BO) + IntDefaultHandler, // FLASH Control + IntDefaultHandler, // GPIO Port F + IntDefaultHandler, // GPIO Port G + IntDefaultHandler, // GPIO Port H + IntDefaultHandler, // UART2 Rx and Tx + IntDefaultHandler, // SSI1 Rx and Tx + IntDefaultHandler, // Timer 3 subtimer A + IntDefaultHandler, // Timer 3 subtimer B + IntDefaultHandler, // I2C1 Master and Slave + IntDefaultHandler, // Quadrature Encoder 1 + IntDefaultHandler, // CAN0 + IntDefaultHandler, // CAN1 + IntDefaultHandler, // CAN2 + IntDefaultHandler, // Ethernet + IntDefaultHandler, // Hibernate + IntDefaultHandler, // USB0 + IntDefaultHandler, // PWM Generator 3 + IntDefaultHandler, // uDMA Software Transfer + IntDefaultHandler, // uDMA Error + IntDefaultHandler, // ADC1 Sequence 0 + IntDefaultHandler, // ADC1 Sequence 1 + IntDefaultHandler, // ADC1 Sequence 2 + IntDefaultHandler, // ADC1 Sequence 3 + IntDefaultHandler, // I2S0 + IntDefaultHandler, // External Bus Interface 0 + IntDefaultHandler, // GPIO Port J + IntDefaultHandler, // GPIO Port K + IntDefaultHandler, // GPIO Port L + IntDefaultHandler, // SSI2 Rx and Tx + IntDefaultHandler, // SSI3 Rx and Tx + IntDefaultHandler, // UART3 Rx and Tx + IntDefaultHandler, // UART4 Rx and Tx + IntDefaultHandler, // UART5 Rx and Tx + IntDefaultHandler, // UART6 Rx and Tx + IntDefaultHandler, // UART7 Rx and Tx + 0, // Reserved + 0, // Reserved + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // I2C2 Master and Slave + IntDefaultHandler, // I2C3 Master and Slave + IntDefaultHandler, // Timer 4 subtimer A + IntDefaultHandler, // Timer 4 subtimer B + 0, // Reserved + 0, // Reserved + 0, // Reserved + 0, // Reserved + 0, // Reserved + 0, // Reserved + 0, // Reserved + 0, // Reserved + 0, // Reserved + 0, // Reserved + 0, // Reserved + 0, // Reserved + 0, // Reserved + 0, // Reserved + 0, // Reserved + 0, // Reserved + 0, // Reserved + 0, // Reserved + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // Timer 5 subtimer A + IntDefaultHandler, // Timer 5 subtimer B + IntDefaultHandler, // Wide Timer 0 subtimer A + IntDefaultHandler, // Wide Timer 0 subtimer B + IntDefaultHandler, // Wide Timer 1 subtimer A + IntDefaultHandler, // Wide Timer 1 subtimer B + IntDefaultHandler, // Wide Timer 2 subtimer A + IntDefaultHandler, // Wide Timer 2 subtimer B + IntDefaultHandler, // Wide Timer 3 subtimer A + IntDefaultHandler, // Wide Timer 3 subtimer B + IntDefaultHandler, // Wide Timer 4 subtimer A + IntDefaultHandler, // Wide Timer 4 subtimer B + IntDefaultHandler, // Wide Timer 5 subtimer A + IntDefaultHandler, // Wide Timer 5 subtimer B + IntDefaultHandler, // FPU + IntDefaultHandler, // PECI 0 + IntDefaultHandler, // LPC 0 + IntDefaultHandler, // I2C4 Master and Slave + IntDefaultHandler, // I2C5 Master and Slave + IntDefaultHandler, // GPIO Port M + IntDefaultHandler, // GPIO Port N + IntDefaultHandler, // Quadrature Encoder 2 + IntDefaultHandler, // Fan 0 + 0, // Reserved + IntDefaultHandler, // GPIO Port P (Summary or P0) + IntDefaultHandler, // GPIO Port P1 + IntDefaultHandler, // GPIO Port P2 + IntDefaultHandler, // GPIO Port P3 + IntDefaultHandler, // GPIO Port P4 + IntDefaultHandler, // GPIO Port P5 + IntDefaultHandler, // GPIO Port P6 + IntDefaultHandler, // GPIO Port P7 + IntDefaultHandler, // GPIO Port Q (Summary or Q0) + IntDefaultHandler, // GPIO Port Q1 + IntDefaultHandler, // GPIO Port Q2 + IntDefaultHandler, // GPIO Port Q3 + IntDefaultHandler, // GPIO Port Q4 + IntDefaultHandler, // GPIO Port Q5 + IntDefaultHandler, // GPIO Port Q6 + IntDefaultHandler, // GPIO Port Q7 + IntDefaultHandler, // GPIO Port R + IntDefaultHandler, // GPIO Port S + IntDefaultHandler, // PWM 1 Generator 0 + IntDefaultHandler, // PWM 1 Generator 1 + IntDefaultHandler, // PWM 1 Generator 2 + IntDefaultHandler, // PWM 1 Generator 3 + IntDefaultHandler // PWM 1 Fault +}; + +//***************************************************************************** +// +// The following are constructs created by the linker, indicating where the +// the "data" and "bss" segments reside in memory. The initializers for the +// for the "data" segment resides immediately following the "text" segment. +// +//***************************************************************************** +extern unsigned long _etext; +extern unsigned long _data; +extern unsigned long _edata; +extern unsigned long _bss; +extern unsigned long _ebss; + +//***************************************************************************** +// +// This is the code that gets called when the processor first starts execution +// following a reset event. Only the absolutely necessary set is performed, +// after which the application supplied entry() routine is called. Any fancy +// actions (such as making decisions based on the reset cause register, and +// resetting the bits in that register) are left solely in the hands of the +// application. +// +//***************************************************************************** +void +ResetISR(void) +{ + unsigned long *pulSrc, *pulDest; + + // + // Copy the data segment initializers from flash to SRAM. + // + pulSrc = &_etext; + for(pulDest = &_data; pulDest < &_edata; ) + { + *pulDest++ = *pulSrc++; + } + + // + // Zero fill the bss segment. + // + __asm(" ldr r0, =_bss\n" + " ldr r1, =_ebss\n" + " mov r2, #0\n" + " .thumb_func\n" + "zero_loop:\n" + " cmp r0, r1\n" + " it lt\n" + " strlt r2, [r0], #4\n" + " blt zero_loop"); + + // + // Enable the floating-point unit. This must be done here to handle the + // case where main() uses floating-point and the function prologue saves + // floating-point registers (which will fault if floating-point is not + // enabled). Any configuration of the floating-point unit using DriverLib + // APIs must be done here prior to the floating-point unit being enabled. + // + // Note that this does not use DriverLib since it might not be included in + // this project. + // + HWREG(NVIC_CPAC) = ((HWREG(NVIC_CPAC) & + ~(NVIC_CPAC_CP10_M | NVIC_CPAC_CP11_M)) | + NVIC_CPAC_CP10_FULL | NVIC_CPAC_CP11_FULL); + + // + // Call the application's entry point. + // + main(); +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a NMI. This +// simply enters an infinite loop, preserving the system state for examination +// by a debugger. +// +//***************************************************************************** +static void +NmiSR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a fault +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +FaultISR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives an unexpected +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +IntDefaultHandler(void) +{ + // + // Go into an infinite loop. + // + while(1) + { + } +} diff --git a/boards/ek-lm4f120xl-boost-capsense/capsense/startup_rvmdk.S b/boards/ek-lm4f120xl-boost-capsense/capsense/startup_rvmdk.S new file mode 100644 index 0000000..5de7fdc --- /dev/null +++ b/boards/ek-lm4f120xl-boost-capsense/capsense/startup_rvmdk.S @@ -0,0 +1,351 @@ +; <<< Use Configuration Wizard in Context Menu >>> +;****************************************************************************** +; +; startup_rvmdk.S - Startup code for use with Keil's uVision. +; +; Copyright (c) 2012 Texas Instruments Incorporated. All rights reserved. +; Software License Agreement +; +; Texas Instruments (TI) is supplying this software for use solely and +; exclusively on TI's microcontroller products. The software is owned by +; TI and/or its suppliers, and is protected under applicable copyright +; laws. You may not combine this software with "viral" open-source +; software in order to form a larger program. +; +; THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +; NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +; NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +; A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +; CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +; DAMAGES, FOR ANY REASON WHATSOEVER. +; +; This is part of revision 9453 of the EK-LM4F120XL Firmware Package. +; +;****************************************************************************** + +;****************************************************************************** +; +; Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> +; +;****************************************************************************** +Stack EQU 0x00000200 + +;****************************************************************************** +; +; Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> +; +;****************************************************************************** +Heap EQU 0x00000000 + +;****************************************************************************** +; +; Allocate space for the stack. +; +;****************************************************************************** + AREA STACK, NOINIT, READWRITE, ALIGN=3 +StackMem + SPACE Stack +__initial_sp + +;****************************************************************************** +; +; Allocate space for the heap. +; +;****************************************************************************** + AREA HEAP, NOINIT, READWRITE, ALIGN=3 +__heap_base +HeapMem + SPACE Heap +__heap_limit + +;****************************************************************************** +; +; Indicate that the code in this file preserves 8-byte alignment of the stack. +; +;****************************************************************************** + PRESERVE8 + +;****************************************************************************** +; +; Place code into the reset code section. +; +;****************************************************************************** + AREA RESET, CODE, READONLY + THUMB + +;****************************************************************************** +; +; The vector table. +; +;****************************************************************************** + EXPORT __Vectors +__Vectors + DCD StackMem + Stack ; Top of Stack + DCD Reset_Handler ; Reset Handler + DCD NmiSR ; NMI Handler + DCD FaultISR ; Hard Fault Handler + DCD IntDefaultHandler ; The MPU fault handler + DCD IntDefaultHandler ; The bus fault handler + DCD IntDefaultHandler ; The usage fault handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD IntDefaultHandler ; SVCall handler + DCD IntDefaultHandler ; Debug monitor handler + DCD 0 ; Reserved + DCD IntDefaultHandler ; The PendSV handler + DCD IntDefaultHandler ; The SysTick handler + DCD IntDefaultHandler ; GPIO Port A + DCD IntDefaultHandler ; GPIO Port B + DCD IntDefaultHandler ; GPIO Port C + DCD IntDefaultHandler ; GPIO Port D + DCD IntDefaultHandler ; GPIO Port E + DCD IntDefaultHandler ; UART0 Rx and Tx + DCD IntDefaultHandler ; UART1 Rx and Tx + DCD IntDefaultHandler ; SSI0 Rx and Tx + DCD IntDefaultHandler ; I2C0 Master and Slave + DCD IntDefaultHandler ; PWM Fault + DCD IntDefaultHandler ; PWM Generator 0 + DCD IntDefaultHandler ; PWM Generator 1 + DCD IntDefaultHandler ; PWM Generator 2 + DCD IntDefaultHandler ; Quadrature Encoder 0 + DCD IntDefaultHandler ; ADC Sequence 0 + DCD IntDefaultHandler ; ADC Sequence 1 + DCD IntDefaultHandler ; ADC Sequence 2 + DCD IntDefaultHandler ; ADC Sequence 3 + DCD IntDefaultHandler ; Watchdog timer + DCD IntDefaultHandler ; Timer 0 subtimer A + DCD IntDefaultHandler ; Timer 0 subtimer B + DCD IntDefaultHandler ; Timer 1 subtimer A + DCD IntDefaultHandler ; Timer 1 subtimer B + DCD IntDefaultHandler ; Timer 2 subtimer A + DCD IntDefaultHandler ; Timer 2 subtimer B + DCD IntDefaultHandler ; Analog Comparator 0 + DCD IntDefaultHandler ; Analog Comparator 1 + DCD IntDefaultHandler ; Analog Comparator 2 + DCD IntDefaultHandler ; System Control (PLL, OSC, BO) + DCD IntDefaultHandler ; FLASH Control + DCD IntDefaultHandler ; GPIO Port F + DCD IntDefaultHandler ; GPIO Port G + DCD IntDefaultHandler ; GPIO Port H + DCD IntDefaultHandler ; UART2 Rx and Tx + DCD IntDefaultHandler ; SSI1 Rx and Tx + DCD IntDefaultHandler ; Timer 3 subtimer A + DCD IntDefaultHandler ; Timer 3 subtimer B + DCD IntDefaultHandler ; I2C1 Master and Slave + DCD IntDefaultHandler ; Quadrature Encoder 1 + DCD IntDefaultHandler ; CAN0 + DCD IntDefaultHandler ; CAN1 + DCD IntDefaultHandler ; CAN2 + DCD IntDefaultHandler ; Ethernet + DCD IntDefaultHandler ; Hibernate + DCD IntDefaultHandler ; USB0 + DCD IntDefaultHandler ; PWM Generator 3 + DCD IntDefaultHandler ; uDMA Software Transfer + DCD IntDefaultHandler ; uDMA Error + DCD IntDefaultHandler ; ADC1 Sequence 0 + DCD IntDefaultHandler ; ADC1 Sequence 1 + DCD IntDefaultHandler ; ADC1 Sequence 2 + DCD IntDefaultHandler ; ADC1 Sequence 3 + DCD IntDefaultHandler ; I2S0 + DCD IntDefaultHandler ; External Bus Interface 0 + DCD IntDefaultHandler ; GPIO Port J + DCD IntDefaultHandler ; GPIO Port K + DCD IntDefaultHandler ; GPIO Port L + DCD IntDefaultHandler ; SSI2 Rx and Tx + DCD IntDefaultHandler ; SSI3 Rx and Tx + DCD IntDefaultHandler ; UART3 Rx and Tx + DCD IntDefaultHandler ; UART4 Rx and Tx + DCD IntDefaultHandler ; UART5 Rx and Tx + DCD IntDefaultHandler ; UART6 Rx and Tx + DCD IntDefaultHandler ; UART7 Rx and Tx + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD IntDefaultHandler ; I2C2 Master and Slave + DCD IntDefaultHandler ; I2C3 Master and Slave + DCD IntDefaultHandler ; Timer 4 subtimer A + DCD IntDefaultHandler ; Timer 4 subtimer B + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD IntDefaultHandler ; Timer 5 subtimer A + DCD IntDefaultHandler ; Timer 5 subtimer B + DCD IntDefaultHandler ; Wide Timer 0 subtimer A + DCD IntDefaultHandler ; Wide Timer 0 subtimer B + DCD IntDefaultHandler ; Wide Timer 1 subtimer A + DCD IntDefaultHandler ; Wide Timer 1 subtimer B + DCD IntDefaultHandler ; Wide Timer 2 subtimer A + DCD IntDefaultHandler ; Wide Timer 2 subtimer B + DCD IntDefaultHandler ; Wide Timer 3 subtimer A + DCD IntDefaultHandler ; Wide Timer 3 subtimer B + DCD IntDefaultHandler ; Wide Timer 4 subtimer A + DCD IntDefaultHandler ; Wide Timer 4 subtimer B + DCD IntDefaultHandler ; Wide Timer 5 subtimer A + DCD IntDefaultHandler ; Wide Timer 5 subtimer B + DCD IntDefaultHandler ; FPU + DCD IntDefaultHandler ; PECI 0 + DCD IntDefaultHandler ; LPC 0 + DCD IntDefaultHandler ; I2C4 Master and Slave + DCD IntDefaultHandler ; I2C5 Master and Slave + DCD IntDefaultHandler ; GPIO Port M + DCD IntDefaultHandler ; GPIO Port N + DCD IntDefaultHandler ; Quadrature Encoder 2 + DCD IntDefaultHandler ; Fan 0 + DCD 0 ; Reserved + DCD IntDefaultHandler ; GPIO Port P (Summary or P0) + DCD IntDefaultHandler ; GPIO Port P1 + DCD IntDefaultHandler ; GPIO Port P2 + DCD IntDefaultHandler ; GPIO Port P3 + DCD IntDefaultHandler ; GPIO Port P4 + DCD IntDefaultHandler ; GPIO Port P5 + DCD IntDefaultHandler ; GPIO Port P6 + DCD IntDefaultHandler ; GPIO Port P7 + DCD IntDefaultHandler ; GPIO Port Q (Summary or Q0) + DCD IntDefaultHandler ; GPIO Port Q1 + DCD IntDefaultHandler ; GPIO Port Q2 + DCD IntDefaultHandler ; GPIO Port Q3 + DCD IntDefaultHandler ; GPIO Port Q4 + DCD IntDefaultHandler ; GPIO Port Q5 + DCD IntDefaultHandler ; GPIO Port Q6 + DCD IntDefaultHandler ; GPIO Port Q7 + DCD IntDefaultHandler ; GPIO Port R + DCD IntDefaultHandler ; GPIO Port S + DCD IntDefaultHandler ; PWM 1 Generator 0 + DCD IntDefaultHandler ; PWM 1 Generator 1 + DCD IntDefaultHandler ; PWM 1 Generator 2 + DCD IntDefaultHandler ; PWM 1 Generator 3 + DCD IntDefaultHandler ; PWM 1 Fault + +;****************************************************************************** +; +; This is the code that gets called when the processor first starts execution +; following a reset event. +; +;****************************************************************************** + EXPORT Reset_Handler +Reset_Handler + ; + ; Enable the floating-point unit. This must be done here to handle the + ; case where main() uses floating-point and the function prologue saves + ; floating-point registers (which will fault if floating-point is not + ; enabled). Any configuration of the floating-point unit using + ; DriverLib APIs must be done here prior to the floating-point unit + ; being enabled. + ; + ; Note that this does not use DriverLib since it might not be included + ; in this project. + ; + MOVW R0, #0xED88 + MOVT R0, #0xE000 + LDR R1, [R0] + ORR R1, #0x00F00000 + STR R1, [R0] + + ; + ; Call the C library enty point that handles startup. This will copy + ; the .data section initializers from flash to SRAM and zero fill the + ; .bss section. + ; + IMPORT __main + B __main + +;****************************************************************************** +; +; This is the code that gets called when the processor receives a NMI. This +; simply enters an infinite loop, preserving the system state for examination +; by a debugger. +; +;****************************************************************************** +NmiSR + B NmiSR + +;****************************************************************************** +; +; This is the code that gets called when the processor receives a fault +; interrupt. This simply enters an infinite loop, preserving the system state +; for examination by a debugger. +; +;****************************************************************************** +FaultISR + B FaultISR + +;****************************************************************************** +; +; This is the code that gets called when the processor receives an unexpected +; interrupt. This simply enters an infinite loop, preserving the system state +; for examination by a debugger. +; +;****************************************************************************** +IntDefaultHandler + B IntDefaultHandler + +;****************************************************************************** +; +; Make sure the end of this section is aligned. +; +;****************************************************************************** + ALIGN + +;****************************************************************************** +; +; Some code in the normal code section for initializing the heap and stack. +; +;****************************************************************************** + AREA |.text|, CODE, READONLY + +;****************************************************************************** +; +; The function expected of the C library startup code for defining the stack +; and heap memory locations. For the C library version of the startup code, +; provide this function so that the C library initialization code can find out +; the location of the stack and heap. +; +;****************************************************************************** + IF :DEF: __MICROLIB + EXPORT __initial_sp + EXPORT __heap_base + EXPORT __heap_limit + ELSE + IMPORT __use_two_region_memory + EXPORT __user_initial_stackheap +__user_initial_stackheap + LDR R0, =HeapMem + LDR R1, =(StackMem + Stack) + LDR R2, =(HeapMem + Heap) + LDR R3, =StackMem + BX LR + ENDIF + +;****************************************************************************** +; +; Make sure the end of this section is aligned. +; +;****************************************************************************** + ALIGN + +;****************************************************************************** +; +; Tell the assembler that we're done. +; +;****************************************************************************** + END diff --git a/boards/ek-lm4f120xl-boost-capsense/capsense/startup_sourcerygxx.S b/boards/ek-lm4f120xl-boost-capsense/capsense/startup_sourcerygxx.S new file mode 100644 index 0000000..b720839 --- /dev/null +++ b/boards/ek-lm4f120xl-boost-capsense/capsense/startup_sourcerygxx.S @@ -0,0 +1,75 @@ +//***************************************************************************** +// +// startup_sourcerygxx.S - Startup code for Sourcery CodeBench. +// +// Copyright (c) 2012 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 9453 of the EK-LM4F120XL Firmware Package. +// +//***************************************************************************** + + .syntax unified + .thumb + +//***************************************************************************** +// +// Place this code into the .cs3.reset section so that it can be executed prior +// to the startup code in Sourcery CodeBench. +// +//***************************************************************************** + .section .cs3.reset,"x" + +//***************************************************************************** +// +// The reset handler, which overrides the one provided by CS3. +// +//***************************************************************************** + .globl __cs3_reset + .thumb_func +__cs3_reset: + // + // Enable the floating-point unit. This must be done here to handle the + // case where main() uses floating-point and the function prologue saves + // floating-point registers (which will fault if floating-point is not + // enabled). Any configuration of the floating-point unit using DriverLib + // APIs must be done here prior to the floating-point unit being enabled. + // + // Note that this does not use DriverLib since it might not be included in + // this project. + // + movw r0, #0xed88 + movt r0, #0xe000 + ldr r1, [r0] + orr r1, #0x00f00000 + str r1, [r0] + + // + // Branch to the normal CS3 startup code. + // + .extern __cs3_reset_ekc_lm4f232 + ldr r0, =__cs3_reset_ekc_lm4f232 + bx r0 + + // + // Place the literal pool here. + // + .ltorg + + // + // The end of the file. + // + .end diff --git a/boards/ek-lm4f120xl-boost-capsense/drivers/CTS_HAL.c b/boards/ek-lm4f120xl-boost-capsense/drivers/CTS_HAL.c new file mode 100644 index 0000000..5ad0720 --- /dev/null +++ b/boards/ek-lm4f120xl-boost-capsense/drivers/CTS_HAL.c @@ -0,0 +1,140 @@ +//***************************************************************************** +// +// CTS_HAL.c - Capacative Sense Library Hardware Abstraction Layer. +// +// Copyright (c) 2012 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 9453 of the EK-LM4F120XL Firmware Package. +// +//***************************************************************************** + +#include "inc/hw_types.h" +#include "inc/hw_gpio.h" +#include "inc/hw_memmap.h" +#include "inc/hw_nvic.h" +#include "drivers/CTS_structure.h" +#include "drivers/CTS_HAL.h" + +//***************************************************************************** +// +// Function to get a capacitance reading from a single-pin RC-based capacitive +// sensor. This function assumes that the capacitive sensor is charged by a +// GPIO, and then discharged through a resistor to GND. The same GPIO used to +// perform the charging will be used as an input during discharge to sense when +// the capacitor's voltage has decreased to at least VIL. The function will +// execute several cycles of this, and report how long the process took in +// units of SysTick counts. This count should be proportional to the current +// capacitance of the sensor, and the resistance of the discharge resistor. +// +//***************************************************************************** +void +CapSenseSystickRC(const tSensor *group, unsigned long *counts) +{ + unsigned char ucIndex; + + // + // Run an RC based capacitance measurement routine on each element in the + // sensor array. + // + for(ucIndex = 0; ucIndex < (group->ucNumElements); ucIndex++) + { + // + // Reset Systick to zero (probably not necessary for most cases, but we + // want to make sure that Systick doesn't roll over.) + // + HWREG(NVIC_ST_CURRENT) = 0x0; + + // + // Grab a count number from the capacitive sensor element. + // + counts[ucIndex] = + CapSenseElementSystickRC(group->Element[ucIndex]->ulGPIOPort, + group->Element[ucIndex]->ulGPIOPin, + group->ulNumSamples); + + } +} + +//***************************************************************************** +// +// +// +// +//***************************************************************************** +unsigned long +CapSenseElementSystickRC(unsigned long ulGPIOPort, unsigned long ulGPIOPin, + unsigned long ulNumSamples) +{ + volatile unsigned long ulStartTime; + volatile unsigned long ulEndTime; + unsigned long ulIndex; + unsigned long ulGPIODataReg; + unsigned long ulGPIODirReg; + + // + // Save off our GPIO information. + // + ulGPIODataReg = (ulGPIOPort + (GPIO_O_DATA + (ulGPIOPin << 2))); + ulGPIODirReg = ulGPIOPort + GPIO_O_DIR; + + // + // Grab the time + // + ulStartTime = HWREG(NVIC_ST_CURRENT); + + // + // Loop until we have the requisite number of samples. + // + for(ulIndex = 0; ulIndex < ulNumSamples; ulIndex++) + { + // + // Drive up. + // + //GPIOPinWrite(ulGPIOPort, ulGPIOPin, ulGPIOPin); + HWREG(ulGPIODataReg) = 0xFF; + + // + // Configure as input + // + //GPIOPinTypeGPIOInput(ulGPIOPort, ulGPIOPin); + HWREG(ulGPIODirReg) = (HWREG(ulGPIODirReg) & ~(ulGPIOPin)); + + // + // Wait until the capacitor drains away to ground + // + //while(GPIOPinRead(ulGPIOPort, ulGPIOPin)) + while(HWREG(ulGPIODataReg)) + { + } + + // + // Configure as an output. + // + //GPIOPinTypeGPIOOutput(ulGPIOPort, ulGPIOPin); + HWREG(ulGPIODirReg) = (HWREG(ulGPIODirReg) | ulGPIOPin); + } + + // + // Grab the time, and calculate the difference + // + ulEndTime = HWREG(NVIC_ST_CURRENT); + + // + // Return the time difference + // + return(ulStartTime - ulEndTime); +} diff --git a/boards/ek-lm4f120xl-boost-capsense/drivers/CTS_HAL.h b/boards/ek-lm4f120xl-boost-capsense/drivers/CTS_HAL.h new file mode 100644 index 0000000..40ba534 --- /dev/null +++ b/boards/ek-lm4f120xl-boost-capsense/drivers/CTS_HAL.h @@ -0,0 +1,34 @@ +//***************************************************************************** +// +// CTS_HAL.h - Capacative Sense HAL Header file definitions. +// +// Copyright (c) 2012 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 9453 of the EK-LM4F120XL Firmware Package. +// +//***************************************************************************** + +#ifndef __CTS_HAL_H__ +#define __CTS_HAL_H__ + +extern void CapSenseSystickRC(const tSensor *group, unsigned long *counts); + +extern unsigned long CapSenseElementSystickRC(unsigned long ulGPIOPort, + unsigned long ulGPIOPin, + unsigned long ulNumSamples); + +#endif // __CTS_HAL_H__ diff --git a/boards/ek-lm4f120xl-boost-capsense/drivers/CTS_Layer.c b/boards/ek-lm4f120xl-boost-capsense/drivers/CTS_Layer.c new file mode 100644 index 0000000..c16a0fd --- /dev/null +++ b/boards/ek-lm4f120xl-boost-capsense/drivers/CTS_Layer.c @@ -0,0 +1,663 @@ +//***************************************************************************** +// +// CTS_HAL.c - Capacative Sense Library Hardware Abstraction Layer. +// +// Copyright (c) 2012 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 9453 of the EK-LM4F120XL Firmware Package. +// +//***************************************************************************** + +#include "drivers/CTS_structure.h" +#include "drivers/CTS_Layer.h" +#define RAM_FOR_FLASH + +// Global variables for sensing +#ifdef TOTAL_NUMBER_OF_ELEMENTS +unsigned long baseCnt[TOTAL_NUMBER_OF_ELEMENTS]; +#ifdef RAM_FOR_FLASH +unsigned long measCnt[MAXIMUM_NUMBER_OF_ELEMENTS_PER_SENSOR]; +#endif +unsigned long ctsStatusReg = (DOI_INC+TRADOI_FAST+TRIDOI_SLOW); +#endif + +//***************************************************************************** +// +//! \addtogroup CTS_API +//! @{ +// +//***************************************************************************** + + +//***************************************************************************** +// +//! Measure the capacitance of each element within the Sensor +//! +//! \param groupOfElements Pointer to Sensor structure to be measured +//! +//! \param counts Address to where the measurements are to be written +//! +//! This function selects the appropriate HAL to perform the capacitance +//! measurement based upon the halDefinition found in the sensor structure. +//! The order of the elements within the Sensor structure is arbitrary but must +//! be consistent between the application and configuration. The first element +//! in the array (counts) corresponds to the first element within the Sensor +//! structure. +//! +//! \return None. +// +//***************************************************************************** +void +TI_CAPT_Raw(const tSensor* groupOfElements, unsigned long * counts) +{ + CapSenseSystickRC(groupOfElements, counts); +} + +#ifdef TOTAL_NUMBER_OF_ELEMENTS + + +//***************************************************************************** +// +//! Make a single capacitance meausrment to initialize baseline tracking +//! +//! \param groupOfElements Pointer to Sensor structure to be measured +//! +//! \return none +// +//***************************************************************************** +void +TI_CAPT_Init_Baseline(const tSensor* groupOfElements) +{ + TI_CAPT_Raw(groupOfElements, &baseCnt[groupOfElements->ulBaseOffset]); +} + +//***************************************************************************** +// +//! Update baseline tracking by averaging several measurements +//! +//! \param groupOfElements Pointer to Sensor structure to be measured +//! +//! \param numberOfAverages Number of measurements to be averaged +//! +//! \return none +// +//***************************************************************************** +void +TI_CAPT_Update_Baseline(const tSensor* groupOfElements, unsigned char numberOfAverages) +{ + unsigned char i,j; + #ifndef RAM_FOR_FLASH + unsigned long *measCnt; + measCnt = (unsigned long *)malloc(groupOfElements->ucNumElements * sizeof(unsigned long)); + if(measCnt ==0) + { + while(1); + } + #endif + for(j=0; j < numberOfAverages; j++) + { + for(i=0; i < groupOfElements->ucNumElements; i++) + { + TI_CAPT_Raw(groupOfElements, measCnt); + baseCnt[i+groupOfElements->ulBaseOffset] = measCnt[i]/2 + baseCnt[i+groupOfElements->ulBaseOffset]/2; + } + } + #ifndef RAM_FOR_FLASH + free(measCnt); + #endif +} + +//***************************************************************************** +//! Reset the Baseline Tracking algorithm to the default state +//! +//! \return none +// +//***************************************************************************** +void +TI_CAPT_Reset_Tracking(void) +{ + ctsStatusReg = (DOI_INC+TRADOI_FAST+TRIDOI_SLOW); +} + +//***************************************************************************** +// +//! Update the Baseline Tracking algorithm Direction of Interest +//! +//! \param direction Direction of increasing or decreasing capacitance +//! +//! \return none +// +//***************************************************************************** +void +TI_CAPT_Update_Tracking_DOI(unsigned char direction) +{ + if(direction) + { + ctsStatusReg |= DOI_INC; + } + else + { + ctsStatusReg &= ~DOI_INC; + } +} + +//***************************************************************************** +// +//! Update the baseling tracking algorithm tracking rates +//! +//! \param rate Rate of tracking changes in and against direction of intrest +//! +//! \return none +// +//***************************************************************************** +void +TI_CAPT_Update_Tracking_Rate(unsigned char rate) +{ + ctsStatusReg &= ~(TRIDOI_FAST+TRADOI_VSLOW); // clear fields + ctsStatusReg |= (rate & 0xF0); // update fields +} + +//***************************************************************************** +// +//! Measure the change in capacitance of the Sensor +//! +//! \param groupOfElements Pointer to Sensor structure to be measured +//! +//! \param deltaCnt Address to where the measurements are to be written +//! +//! This function measures the change in capacitance of each element within a +//! sensor and updates the baseline tracking in the event that no change +//! exceeds the detection threshold. The order of the elements within the +//! Sensor structure is arbitrary but must be consistent between the +//! application and configuration. The first element in the array (deltaCnt) +//! corresponds to the first element within the Sensor structure. +//! +//! \return none +// +//***************************************************************************** +void +TI_CAPT_Custom(const tSensor* groupOfElements, unsigned long * deltaCnt) +{ + unsigned char j; + unsigned long tempCnt; + ctsStatusReg &= ~ EVNT; + + // This section calculates the delta counts************************************* + //****************************************************************************** + TI_CAPT_Raw(groupOfElements, &deltaCnt[0]); // measure group of sensors + + for (j = 0; j < (groupOfElements->ucNumElements); j++) + { + tempCnt = deltaCnt[j]; + if((!(ctsStatusReg & DOI_MASK))) + { + // RO method, interested in an increase in capacitance + if(baseCnt[j+groupOfElements->ulBaseOffset] < deltaCnt[j]) + { + // If capacitance decreases, then measCnt is greater than base + // , set delta to zero + deltaCnt[j] = 0; + // Limit the change in the opposite direction to the threshold + if(((groupOfElements->Element[j])->ulThreshold) + && + (baseCnt[j+groupOfElements->ulBaseOffset]+(groupOfElements->Element[j])->ulThreshold < tempCnt)) + { + tempCnt = baseCnt[j+groupOfElements->ulBaseOffset]+(groupOfElements->Element[j])->ulThreshold; + } + } + else + { + // change occuring in our DOI, save result + deltaCnt[j] = baseCnt[j+groupOfElements->ulBaseOffset]-deltaCnt[j]; + } + } + if(((ctsStatusReg & DOI_MASK))) + { + // RO method: interested in a decrease in capactiance + // measCnt is greater than baseCnt + if(baseCnt[j+groupOfElements->ulBaseOffset] > deltaCnt[j]) + { + // If capacitance increases, set delta to zero + deltaCnt[j] = 0; + // Limit the change in the opposite direction to the threshold + if(((groupOfElements->Element[j])->ulThreshold) + && + (baseCnt[j+groupOfElements->ulBaseOffset] > tempCnt+(groupOfElements->Element[j])->ulThreshold)) + { + tempCnt = baseCnt[j+groupOfElements->ulBaseOffset]-(groupOfElements->Element[j])->ulThreshold; + } + } + else + { + // change occuring in our DOI + deltaCnt[j] = deltaCnt[j] - baseCnt[j+groupOfElements->ulBaseOffset]; + } + } + + // This section updates the baseline capacitance**************************** + //************************************************************************** + if (deltaCnt[j]==0) + { // if delta counts is 0, then the change in capacitance was opposite the + // direction of interest. The baseCnt[i] is updated with the saved + // measCnt value for the current index value 'i'. + switch ((ctsStatusReg & TRADOI_VSLOW)) + { + case TRADOI_FAST://Fast + tempCnt = tempCnt/2; + baseCnt[j+groupOfElements->ulBaseOffset] = (baseCnt[j+groupOfElements->ulBaseOffset]/2); + break; + case TRADOI_MED://Medium + tempCnt = tempCnt/4; + baseCnt[j+groupOfElements->ulBaseOffset] = 3*(baseCnt[j+groupOfElements->ulBaseOffset]/4); + break; + case TRADOI_SLOW://slow + tempCnt = tempCnt/64; + baseCnt[j+groupOfElements->ulBaseOffset] = 63*(baseCnt[j+groupOfElements->ulBaseOffset]/64); + break; + case TRADOI_VSLOW://very slow + tempCnt = tempCnt/128; + baseCnt[j+groupOfElements->ulBaseOffset] = 127*(baseCnt[j+groupOfElements->ulBaseOffset]/128); + break; + } + // set X, Y & Z, then perform calculation for baseline tracking: + // Base_Capacitance = X*(Measured_Capacitance/Z) + Y*(Base_Capacitance/Z) + baseCnt[j+groupOfElements->ulBaseOffset] = (tempCnt)+(baseCnt[j+groupOfElements->ulBaseOffset]); + } + // delta counts are either 0, less than threshold, or greater than threshold + // never negative + else if(deltaCnt[j]<(groupOfElements->Element[j])->ulThreshold && !(ctsStatusReg & PAST_EVNT)) + { //if delta counts is positive but less than threshold, + switch ((ctsStatusReg & TRIDOI_FAST)) + { + case TRIDOI_VSLOW://very slow + if(deltaCnt[j] > 15) + { + if(tempCnt < baseCnt[j+groupOfElements->ulBaseOffset]) + { + baseCnt[j+groupOfElements->ulBaseOffset] = baseCnt[j+groupOfElements->ulBaseOffset] - 1; + } + else + { + baseCnt[j+groupOfElements->ulBaseOffset] = baseCnt[j+groupOfElements->ulBaseOffset] + 1; + } + } + tempCnt = 0; + break; + case TRIDOI_SLOW://slow + if(tempCnt < baseCnt[j+groupOfElements->ulBaseOffset]) + { + baseCnt[j+groupOfElements->ulBaseOffset] = baseCnt[j+groupOfElements->ulBaseOffset] - 1; + } + else + { + baseCnt[j+groupOfElements->ulBaseOffset] = baseCnt[j+groupOfElements->ulBaseOffset] + 1; + } + tempCnt = 0; + break; + case TRIDOI_MED://medium + tempCnt = tempCnt/4; + baseCnt[j+groupOfElements->ulBaseOffset] = 3*(baseCnt[j+groupOfElements->ulBaseOffset]/4); + break; + case TRIDOI_FAST://fast + tempCnt = tempCnt/2; + baseCnt[j+groupOfElements->ulBaseOffset] = (baseCnt[j+groupOfElements->ulBaseOffset]/2); + break; + } + // set X, Y & Z, then perform calculation for baseline tracking: + // Base_Capacitance = X*(Measured_Capacitance/Z) + Y*(Base_Capacitance/Z) + baseCnt[j+groupOfElements->ulBaseOffset] = (tempCnt)+(baseCnt[j+groupOfElements->ulBaseOffset]); + } + //if delta counts above the threshold, event has occurred + else if(deltaCnt[j]>=(groupOfElements->Element[j])->ulThreshold) + { + ctsStatusReg |= EVNT; + ctsStatusReg |= PAST_EVNT; + } + }// end of for-loop + if(!(ctsStatusReg & EVNT)) + { + ctsStatusReg &= ~PAST_EVNT; + } +} + +//***************************************************************************** +// +//! Determine if a button is being pressed +//! +//! \param groupOfElements Pointer to button to be scanned +//! +//! \return result Indication if button is (1) or is not (0) being pressed +//! +// +//***************************************************************************** +unsigned char +TI_CAPT_Button(const tSensor * groupOfElements) +{ + unsigned char result = 0; + + #ifndef RAM_FOR_FLASH + unsigned long *measCnt; + measCnt = (unsigned long *)malloc(groupOfElements->ucNumElements * sizeof(unsigned long)); + if(measCnt ==0) + { + while(1); + } + #endif + + TI_CAPT_Custom(groupOfElements, measCnt); + #ifndef RAM_FOR_FLASH + free(measCnt); + #endif + if(ctsStatusReg & EVNT) + { + result = 1; + } + return result; +} + +//***************************************************************************** +// +//! \brief Determine which button if any is being pressed +//! +//! \param groupOfElements Pointer to buttons to be scanned +//! +//! \return result pointer to element (button) being pressed or 0 none +// +//***************************************************************************** +const tCapTouchElement * +TI_CAPT_Buttons(const tSensor *groupOfElements) +{ + unsigned char index; + #ifndef RAM_FOR_FLASH + unsigned long *measCnt; + measCnt = (unsigned long *)malloc(groupOfElements->ucNumElements * sizeof(unsigned long)); + if(measCnt ==0) + { + while(1); + } + #endif + TI_CAPT_Custom(groupOfElements, measCnt); + + if(ctsStatusReg & EVNT) + { + index = Dominant_Element(groupOfElements, measCnt); + //ctsStatusReg &= ~EVNT; + index++; + } + else + { + index = 0; + } + #ifndef RAM_FOR_FLASH + free(measCnt); + #endif + if(index) + { + return groupOfElements->Element[index-1]; + } + return 0; +} + +#ifdef SLIDER +//***************************************************************************** +// +//! Determine the position on a slider +// +//! \param groupOfElements Pointer to slider +// +//! \return result position on slider or illegal value if no touch +// +//***************************************************************************** +unsigned long +TI_CAPT_Slider(const tSensor* groupOfElements) +{ + unsigned char index; + signed long position; + // allocate memory for measurement + #ifndef RAM_FOR_FLASH + unsigned long *measCnt; + measCnt = (unsigned long *)malloc(groupOfElements->ucNumElements * sizeof(unsigned long)); + if(measCnt ==0) + { + while(1); + } + #endif + position = ILLEGAL_SLIDER_WHEEL_POSITION; + //make measurement + TI_CAPT_Custom(groupOfElements, measCnt); + + // Use EVNT flag to determine if slider was touched. + // The EVNT flag is a global variable and managed within the TI_CAPT_Custom function. + if(ctsStatusReg & EVNT) + { + index = Dominant_Element(groupOfElements, &measCnt[0]); + // The index represents the element within the array with the highest return. + if(index == 0) + { + // Special case of 1st element in slider, add 1st, last, and 2nd + position = measCnt[0] + measCnt[1]; + } + else if(index == (groupOfElements->ucNumElements -1)) + { + // Special case of Last element in slider, add last, 1st, and 2nd to last + position = measCnt[groupOfElements->ucNumElements -1] + measCnt[groupOfElements->ucNumElements -2]; + } + else + { + position = measCnt[index] + measCnt[index+1] + measCnt[index-1]; + } + // Determine if sensor threshold criteria is met + if(position > groupOfElements->ulSensorThreshold) + { + // calculate position + position = index*(groupOfElements->ucPoints/groupOfElements->ucNumElements); + position += (groupOfElements->ucPoints/groupOfElements->ucNumElements)/2; + if(index == 0) + { + // Special case of 1st element in slider, which only has one + // neighbor, measCnt[1]. measCnt is limited to ulMaxResponse + // within dominantElement function + if(measCnt[1]) + { + position += (measCnt[1]*(groupOfElements->ucPoints/groupOfElements->ucNumElements))/100; + } + else + { + position = (measCnt[0]*(groupOfElements->ucPoints/groupOfElements->ucNumElements)/2)/100; + } + } + else if(index == (groupOfElements->ucNumElements -1)) + { + // Special case of Last element in slider, which only has one + // neighbor, measCnt[x-1] or measCnt[ucNumElements-1] + if(measCnt[index-1]) + { + position -= (measCnt[index-1]*(groupOfElements->ucPoints/groupOfElements->ucNumElements))/100; + } + else + { + position = groupOfElements->ucPoints; + position -= (measCnt[index]*(groupOfElements->ucPoints/groupOfElements->ucNumElements)/2)/100; + } + } + else + { + position += (measCnt[index+1]*(groupOfElements->ucPoints/groupOfElements->ucNumElements))/100; + position -= (measCnt[index-1]*(groupOfElements->ucPoints/groupOfElements->ucNumElements))/100; + } + if((position > groupOfElements->ucPoints) || (position < 0)) + { + position = ILLEGAL_SLIDER_WHEEL_POSITION; + } + } + else + { + position = ILLEGAL_SLIDER_WHEEL_POSITION; + } + } + #ifndef RAM_FOR_FLASH + free(measCnt); + #endif + return position; +} +#endif + +#ifdef WHEEL +//***************************************************************************** +// +//! Determine the position on a wheel +// +//! \param groupOfElements Pointer to wheel +// +//! \return result position on wheel or illegal value if no touch +// +//***************************************************************************** +unsigned long +TI_CAPT_Wheel(const tSensor* groupOfElements) +{ + unsigned char index; + signed long position; + // allocate memory for measurement + #ifndef RAM_FOR_FLASH + unsigned long *measCnt; + measCnt = (unsigned long *)malloc(groupOfElements->ucNumElements * sizeof(unsigned long)); + if(measCnt ==0) + { + while(1); + } + #endif + position = ILLEGAL_SLIDER_WHEEL_POSITION; + //make measurement + TI_CAPT_Custom(groupOfElements, measCnt); + // Translate the EVNT flag from an element level EVNT to a sensor level EVNT. + // The sensor must read at least 75% cumulative response before indicating a + // touch. + if(ctsStatusReg & EVNT) + { + index = Dominant_Element(groupOfElements, &measCnt[0]); + // The index represents the element within the array with the highest return. + // + if(index == 0) + { + // Special case of 1st element in slider, add 1st, last, and 2nd + position = measCnt[0] + measCnt[groupOfElements->ucNumElements -1] + measCnt[1]; + } + else if(index == (groupOfElements->ucNumElements -1)) + { + // Special case of Last element in slider, add last, 1st, and 2nd to last + position = measCnt[index] + measCnt[0] + measCnt[index-1]; + } + else + { + position = measCnt[index] + measCnt[index+1] + measCnt[index-1]; + } + if(position > groupOfElements->ulSensorThreshold) + { + //index = Dominant_Element(groupOfElements, &measCnt[0]); + // The index represents the element within the array with the highest return. + // + position = index*(groupOfElements->ucPoints/groupOfElements->ucNumElements); + position += (groupOfElements->ucPoints/groupOfElements->ucNumElements)/2; + if(index == 0) + { + // Special case of 1st element in slider, which only has one neighbor, measCnt[1] + // measCnt is limited to ulMaxResponse within dominantElement function + position += (measCnt[1]*(groupOfElements->ucPoints/groupOfElements->ucNumElements))/100; + position -= (measCnt[groupOfElements->ucNumElements -1]*(groupOfElements->ucPoints/groupOfElements->ucNumElements))/100; + if(position < 0) + { + position = position + (unsigned long)groupOfElements->ucPoints; + } + } + else if(index == (groupOfElements->ucNumElements -1)) + { + // Special case of Last element in slider, which only has one neighbor, measCnt[x-1] or measCnt[ucNumElements-1] + // measCnt is limited to ulMaxResponse within dominantElement function + position += (measCnt[0]*(groupOfElements->ucPoints/groupOfElements->ucNumElements))/100; + position -= (measCnt[index-1]*(groupOfElements->ucPoints/groupOfElements->ucNumElements))/100; + if(position > (groupOfElements->ucPoints -1)) + { + position = position - (unsigned long)groupOfElements->ucPoints; + } + } + else + { + position += (measCnt[index+1]*(groupOfElements->ucPoints/groupOfElements->ucNumElements))/100; + position -= (measCnt[index-1]*(groupOfElements->ucPoints/groupOfElements->ucNumElements))/100; + } + if((position > groupOfElements->ucPoints) || position < 0) + { + position = ILLEGAL_SLIDER_WHEEL_POSITION; + } + } + else + { + position = ILLEGAL_SLIDER_WHEEL_POSITION; + } + } + #ifndef RAM_FOR_FLASH + free(measCnt); + #endif + return position; +} +#endif + +//***************************************************************************** +// +// Close the Doxygen group. +//! @} +// +//***************************************************************************** + + +//***************************************************************************** +// +// +//***************************************************************************** +unsigned char +Dominant_Element(const tSensor* groupOfElements, unsigned long* deltaCnt) +{ + unsigned char i; + unsigned long percentDelta=0; + unsigned char dominantElement=0; + for(i=0;iucNumElements;i++) + { + if(deltaCnt[i]>=(groupOfElements->Element[i])->ulThreshold) + { + if(deltaCnt[i] > ((groupOfElements->Element[i])->ulMaxResponse)) + { + deltaCnt[i] = (groupOfElements->Element[i])->ulMaxResponse; + // limit response to the maximum + } + // (ulMaxResponse - threshold) cannot exceed 655 + // 100*(delta - threshold) / (ulMaxResponse - threshold) + deltaCnt[i] = (100*(deltaCnt[i]-(groupOfElements->Element[i])->ulThreshold))/((groupOfElements->Element[i])->ulMaxResponse - (groupOfElements->Element[i])->ulThreshold); + if(deltaCnt[i] > percentDelta) + { + //update percentDelta + percentDelta = deltaCnt[i]; + dominantElement = i; + } + } + else + { + deltaCnt[i] = 0; + } + } // end for loop + return dominantElement; +} +#endif diff --git a/boards/ek-lm4f120xl-boost-capsense/drivers/CTS_Layer.h b/boards/ek-lm4f120xl-boost-capsense/drivers/CTS_Layer.h new file mode 100644 index 0000000..51f54ae --- /dev/null +++ b/boards/ek-lm4f120xl-boost-capsense/drivers/CTS_Layer.h @@ -0,0 +1,64 @@ +//***************************************************************************** +// +// CTS_Layer.h - Capacative Sense API Layer Header file definitions. +// +// Copyright (c) 2012 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 9453 of the EK-LM4F120XL Firmware Package. +// +//***************************************************************************** + +#ifndef __CTS_LAYER_H__ +#define __CTS_LAYER_H__ + +#define EVNT 0x01 +#define DOI_MASK 0x02 +#define DOI_INC 0x02 +#define DOI_DEC 0x00 +#define PAST_EVNT 0x04 +#define TRIDOI_VSLOW 0x00 +#define TRIDOI_SLOW 0x10 +#define TRIDOI_MED 0x20 +#define TRIDOI_FAST 0x30 +#define TRADOI_FAST 0x00 +#define TRADOI_MED 0x40 +#define TRADOI_SLOW 0x80 +#define TRADOI_VSLOW 0xC0 + + + +// API Calls +void TI_CAPT_Init_Baseline(const tSensor*); +void TI_CAPT_Update_Baseline(const tSensor*, unsigned char); + +void TI_CAPT_Reset_Tracking(void); +void TI_CAPT_Update_Tracking_DOI(unsigned char); +void TI_CAPT_Update_Tracking_Rate(unsigned char); + +void TI_CAPT_Raw(const tSensor*, unsigned long*); + +void TI_CAPT_Custom(const tSensor *, unsigned long*); + +unsigned char TI_CAPT_Button(const tSensor *); +const tCapTouchElement * TI_CAPT_Buttons(const tSensor *); +unsigned long TI_CAPT_Slider(const tSensor*); +unsigned long TI_CAPT_Wheel(const tSensor*); + +// Internal Calls +unsigned char Dominant_Element (const tSensor*, unsigned long*); + +#endif // __CTS_LAYER_H__ diff --git a/boards/ek-lm4f120xl-boost-capsense/drivers/CTS_structure.c b/boards/ek-lm4f120xl-boost-capsense/drivers/CTS_structure.c new file mode 100644 index 0000000..db1465e --- /dev/null +++ b/boards/ek-lm4f120xl-boost-capsense/drivers/CTS_structure.c @@ -0,0 +1,131 @@ +//***************************************************************************** +// +// CTS_structure.c - Capacative Sense structures. +// +// Copyright (c) 2012 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 9453 of the EK-LM4F120XL Firmware Package. +// +//***************************************************************************** + +//***************************************************************************** +// +// 4 elements configured as a wheel. +// 1 element configured as a button. [Center Button] +// 1 element configured as a proximity sensor. +// This file contains the structure names and the variable assingments. +// +// Revision 1.00 Baseline +// Developed with IAR 5.10.4 [Kickstart] (5.10.4.30168) +// +// 09/24/10 Rev1.00 Pre-Alpha Version. Added "max_cnts" slider variable in +// CT_Handler object. +// +// 09/29/10 0.02 Update naming convention for elements and sensors. +// +// 10/11/10 0.03 Update +// +//****************************************************************************** + +#include "inc/hw_types.h" +#include "inc/hw_gpio.h" +#include "inc/hw_memmap.h" +#include "driverlib/gpio.h" +#include "drivers/CTS_structure.h" + +// +// Volume down button on PD3 +// +const tCapTouchElement g_sVolumeDownElement = +{ + GPIO_PORTA_AHB_BASE,//ulGPIOPort + GPIO_PIN_7,//ulGPIOPin + 100,//ulThreshold + 2000//ulMaxResponse +}; + +// +// Left button on PD2 +// +const tCapTouchElement g_sLeftElement = +{ + GPIO_PORTA_AHB_BASE,//ulGPIOPort + GPIO_PIN_6,//ulGPIOPin + 100,//ulThreshold + 2000//ulMaxResponse +}; + +// +// Right button on PE3 +// +const tCapTouchElement g_sRightElement = +{ + GPIO_PORTA_AHB_BASE,//ulGPIOPort + GPIO_PIN_2,//ulGPIOPin + 100,//ulThreshold + 2000//ulMaxResponse +}; + +// +// Volume up button on PE2 +// +const tCapTouchElement g_sVolumeUpElement = +{ + GPIO_PORTA_AHB_BASE,//ulGPIOPort + GPIO_PIN_3,//ulGPIOPin + 100,//ulThreshold + 2000//ulMaxResponse +}; + +// +// Middle button on PE1 +// +const tCapTouchElement g_sMiddleElement = +{ + GPIO_PORTA_AHB_BASE,//ulGPIOPort + GPIO_PIN_4,//ulGPIOPin + 100,//ulThreshold + 1800//ulMaxResponse +}; + +const tSensor g_sSensorWheel = +{ + 4,//unsigned char ucNumElements; + 100,//unsigned long ulNumSamples; + 64,//unsigned char ucPoints; + 75,//unsigned char ucSensorThreshold; + 0,//unsigned long ulBaseOffset; + { + &g_sVolumeUpElement, + &g_sRightElement, + &g_sVolumeDownElement, + &g_sLeftElement + }//const tCapTouchElement *Element[MAXIMUM_NUMBER_OF_ELEMENTS_PER_SENSOR]; +}; + +const tSensor g_sMiddleButton = +{ + 1,//unsigned char ucNumElements; + 100,//unsigned long ulNumSamples; + 0,//unsigned char ucPoints; + 0,//unsigned char ucSensorThreshold; + 4,//unsigned long ulBaseOffset; + { + &g_sMiddleElement + }//const tCapTouchElement *Element[MAXIMUM_NUMBER_OF_ELEMENTS_PER_SENSOR]; +}; + diff --git a/boards/ek-lm4f120xl-boost-capsense/drivers/CTS_structure.h b/boards/ek-lm4f120xl-boost-capsense/drivers/CTS_structure.h new file mode 100644 index 0000000..eb603a4 --- /dev/null +++ b/boards/ek-lm4f120xl-boost-capsense/drivers/CTS_structure.h @@ -0,0 +1,74 @@ +//***************************************************************************** +// +// CTS_structure.c - Capacative Sense structures. +// +// Copyright (c) 2012 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 9453 of the EK-LM4F120XL Firmware Package. +// +//***************************************************************************** + +#ifndef __CTS_STRUCTURE_H__ +#define __CTS_STRUCTURE_H__ + + +#define MAXIMUM_NUMBER_OF_ELEMENTS_PER_SENSOR 4 +#define TOTAL_NUMBER_OF_ELEMENTS 6 + + +#define ILLEGAL_SLIDER_WHEEL_POSITION 0xFFFFFFFF +#define WHEEL + +//****************************************************************************** +// The following structure definitons are application independent and are not +// intended to be modified. +// +// The CT_handler 'groups' the sensor based upon function and capacitive +// measurement method. +//****************************************************************************** +typedef struct +{ + unsigned long ulGPIOPort; + unsigned long ulGPIOPin; + unsigned long ulThreshold; + unsigned long ulMaxResponse; +} +tCapTouchElement; + +typedef struct tSensor +{ + unsigned char ucNumElements; + unsigned long ulNumSamples; + unsigned char ucPoints; + unsigned long ulSensorThreshold; + unsigned long ulBaseOffset; + const tCapTouchElement *Element[MAXIMUM_NUMBER_OF_ELEMENTS_PER_SENSOR]; +} +tSensor; + +extern const tCapTouchElement g_sVolumeDownElement; // structure containing elements for +extern const tCapTouchElement g_sVolumeUpElement; // +extern const tCapTouchElement g_sRightElement; // +extern const tCapTouchElement g_sLeftElement; // +extern const tCapTouchElement g_sMiddleElement; // +extern const tCapTouchElement g_sProximityElement; // + +extern const tSensor g_sSensorWheel; + +extern const tSensor g_sMiddleButton; // structure of info for a given + +#endif // __CTS_STRUCTURE_H__ diff --git a/boards/ek-lm4f120xl-boost-capsense/ek-lm4f120xl-boost-capsense.eww b/boards/ek-lm4f120xl-boost-capsense/ek-lm4f120xl-boost-capsense.eww new file mode 100644 index 0000000..3f340d5 --- /dev/null +++ b/boards/ek-lm4f120xl-boost-capsense/ek-lm4f120xl-boost-capsense.eww @@ -0,0 +1,30 @@ + + + + + $WS_DIR$\..\..\driverlib\driverlib-cm4f.ewp + + + $WS_DIR$\..\..\usblib\usblib-cm4f.ewp + + + $WS_DIR$\capsense\capsense.ewp + + + + All Examples + + driverlib-cm4f + Debug + + + usblib-cm4f + Debug + + + capsense + Debug + + + + diff --git a/boards/ek-lm4f120xl-boost-capsense/ek-lm4f120xl-boost-capsense.sgxw b/boards/ek-lm4f120xl-boost-capsense/ek-lm4f120xl-boost-capsense.sgxw new file mode 100644 index 0000000..0d1b79a --- /dev/null +++ b/boards/ek-lm4f120xl-boost-capsense/ek-lm4f120xl-boost-capsense.sgxw @@ -0,0 +1,30 @@ + + + + + + + + + + diff --git a/boards/ek-lm4f120xl-boost-capsense/ek-lm4f120xl-boost-capsense.uvmpw b/boards/ek-lm4f120xl-boost-capsense/ek-lm4f120xl-boost-capsense.uvmpw new file mode 100644 index 0000000..63a8f56 --- /dev/null +++ b/boards/ek-lm4f120xl-boost-capsense/ek-lm4f120xl-boost-capsense.uvmpw @@ -0,0 +1,25 @@ + + + + 1.0 + +
### uVision Project, (C) Keil Software
+ + ek-lm4f120xl-boost-capsense + + + ..\..\driverlib\driverlib-cm4f.uvproj + 1 + + + + ..\..\usblib\usblib-cm4f.uvproj + 1 + + + + .\capsense\capsense.uvproj + 1 + + +
-- cgit v1.3.1