summaryrefslogtreecommitdiff
path: root/drivers
diff options
context:
space:
mode:
Diffstat (limited to 'drivers')
-rw-r--r--drivers/buttons.c193
-rw-r--r--drivers/buttons.h96
-rw-r--r--drivers/rgb.c298
-rw-r--r--drivers/rgb.h143
4 files changed, 730 insertions, 0 deletions
diff --git a/drivers/buttons.c b/drivers/buttons.c
new file mode 100644
index 0000000..4415168
--- /dev/null
+++ b/drivers/buttons.c
@@ -0,0 +1,193 @@
+//*****************************************************************************
+//
+// buttons.c - Evaluation board driver for push buttons.
+//
+// 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_memmap.h"
+#include "inc/hw_gpio.h"
+#include "driverlib/sysctl.h"
+#include "driverlib/rom.h"
+#include "driverlib/pin_map.h"
+#include "driverlib/gpio.h"
+#include "drivers/buttons.h"
+
+//*****************************************************************************
+//
+//! \addtogroup buttons_api
+//! @{
+//
+//*****************************************************************************
+
+//*****************************************************************************
+//
+// Holds the current, debounced state of each button. A 0 in a bit indicates
+// that that button is currently pressed, otherwise it is released.
+// We assume that we start with all the buttons released (though if one is
+// pressed when the application starts, this will be detected).
+//
+//*****************************************************************************
+static unsigned char g_ucButtonStates = ALL_BUTTONS;
+
+//*****************************************************************************
+//
+//! Polls the current state of the buttons and determines which have changed.
+//!
+//! \param pucDelta points to a character that will be written to indicate
+//! which button states changed since the last time this function was called.
+//! This value is derived from the debounced state of the buttons.
+//! \param pucRawState points to a location where the raw button state will
+//! be stored.
+//!
+//! This function should be called periodically by the application to poll the
+//! pushbuttons. It determines both the current debounced state of the buttons
+//! and also which buttons have changed state since the last time the function
+//! was called.
+//!
+//! In order for button debouncing to work properly, this function should be
+//! caled at a regular interval, even if the state of the buttons is not needed
+//! that often.
+//!
+//! If button debouncing is not required, the the caller can pass a pointer
+//! for the \e pucRawState parameter in order to get the raw state of the
+//! buttons. The value returned in \e pucRawState will be a bit mask where
+//! a 1 indicates the buttons is pressed.
+//!
+//! \return Returns the current debounced state of the buttons where a 1 in the
+//! button ID's position indicates that the button is pressed and a 0
+//! indicates that it is released.
+//
+//*****************************************************************************
+unsigned char
+ButtonsPoll(unsigned char *pucDelta, unsigned char *pucRawState)
+{
+ unsigned long ulDelta;
+ unsigned long ulData;
+ static unsigned char ucSwitchClockA = 0;
+ static unsigned char ucSwitchClockB = 0;
+
+ //
+ // Read the raw state of the push buttons. Save the raw state
+ // (inverting the bit sense) if the caller supplied storage for the
+ // raw value.
+ //
+ ulData = (ROM_GPIOPinRead(BUTTONS_GPIO_BASE, ALL_BUTTONS));
+ if(pucRawState)
+ {
+ *pucRawState = (unsigned char)~ulData;
+ }
+
+ //
+ // Determine the switches that are at a different state than the debounced
+ // state.
+ //
+ ulDelta = ulData ^ g_ucButtonStates;
+
+ //
+ // Increment the clocks by one.
+ //
+ ucSwitchClockA ^= ucSwitchClockB;
+ ucSwitchClockB = ~ucSwitchClockB;
+
+ //
+ // Reset the clocks corresponding to switches that have not changed state.
+ //
+ ucSwitchClockA &= ulDelta;
+ ucSwitchClockB &= ulDelta;
+
+ //
+ // Get the new debounced switch state.
+ //
+ g_ucButtonStates &= ucSwitchClockA | ucSwitchClockB;
+ g_ucButtonStates |= (~(ucSwitchClockA | ucSwitchClockB)) & ulData;
+
+ //
+ // Determine the switches that just changed debounced state.
+ //
+ ulDelta ^= (ucSwitchClockA | ucSwitchClockB);
+
+ //
+ // Store the bit mask for the buttons that have changed for return to
+ // caller.
+ //
+ if(pucDelta)
+ {
+ *pucDelta = (unsigned char)ulDelta;
+ }
+
+ //
+ // Return the debounced buttons states to the caller. Invert the bit
+ // sense so that a '1' indicates the button is pressed, which is a
+ // sensible way to interpret the return value.
+ //
+ return(~g_ucButtonStates);
+}
+
+//*****************************************************************************
+//
+//! Initializes the GPIO pins used by the board pushbuttons.
+//!
+//! This function must be called during application initialization to
+//! configure the GPIO pins to which the pushbuttons are attached. It enables
+//! the port used by the buttons and configures each button GPIO as an input
+//! with a weak pull-up.
+//!
+//! \return None.
+//
+//*****************************************************************************
+void
+ButtonsInit(void)
+{
+ //
+ // Enable the GPIO port to which the pushbuttons are connected.
+ //
+ ROM_SysCtlPeripheralEnable(BUTTONS_GPIO_PERIPH);
+
+ //
+ // Unlock PF0 so we can change it to a GPIO input
+ // Once we have enabled (unlocked) the commit register then re-lock it
+ // to prevent further changes. PF0 is muxed with NMI thus a special case.
+ //
+ HWREG(BUTTONS_GPIO_BASE + GPIO_O_LOCK) = GPIO_LOCK_KEY_DD;
+ HWREG(BUTTONS_GPIO_BASE + GPIO_O_CR) |= 0x01;
+ HWREG(BUTTONS_GPIO_BASE + GPIO_O_LOCK) = 0;
+
+ //
+ // Set each of the button GPIO pins as an input with a pull-up.
+ //
+ ROM_GPIODirModeSet(BUTTONS_GPIO_BASE, ALL_BUTTONS, GPIO_DIR_MODE_IN);
+ ROM_GPIOPadConfigSet(BUTTONS_GPIO_BASE, ALL_BUTTONS,
+ GPIO_STRENGTH_2MA, GPIO_PIN_TYPE_STD_WPU);
+
+ //
+ // Initialize the debounced button state with the current state read from
+ // the GPIO bank.
+ //
+ g_ucButtonStates = ROM_GPIOPinRead(BUTTONS_GPIO_BASE, ALL_BUTTONS);
+}
+
+//*****************************************************************************
+//
+// Close the Doxygen group.
+//! @}
+//
+//*****************************************************************************
diff --git a/drivers/buttons.h b/drivers/buttons.h
new file mode 100644
index 0000000..416125a
--- /dev/null
+++ b/drivers/buttons.h
@@ -0,0 +1,96 @@
+//*****************************************************************************
+//
+// buttons.h - Prototypes for the evaluation board buttons driver.
+//
+// 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 __BUTTONS_H__
+#define __BUTTONS_H__
+
+//*****************************************************************************
+//
+// Defines for the hardware resources used by the pushbuttons.
+//
+// The switches are on the following ports/pins:
+//
+// PF4 - Left Button
+// PF0 - Right Button
+//
+// The switches tie the GPIO to ground, so the GPIOs need to be configured
+// with pull-ups, and a value of 0 means the switch is pressed.
+//
+//*****************************************************************************
+#define BUTTONS_GPIO_PERIPH SYSCTL_PERIPH_GPIOF
+#define BUTTONS_GPIO_BASE GPIO_PORTF_BASE
+
+#define NUM_BUTTONS 2
+#define LEFT_BUTTON GPIO_PIN_4
+#define RIGHT_BUTTON GPIO_PIN_0
+
+#define ALL_BUTTONS (LEFT_BUTTON | RIGHT_BUTTON)
+
+//*****************************************************************************
+//
+// Useful macros for detecting button events.
+//
+//*****************************************************************************
+#define BUTTON_PRESSED(button, buttons, changed) \
+ (((button) & (changed)) && ((button) & (buttons)))
+
+#define BUTTON_RELEASED(button, buttons, changed) \
+ (((button) & (changed)) && !((button) & (buttons)))
+
+//*****************************************************************************
+//
+// If building with a C++ compiler, make all of the definitions in this header
+// have a C binding.
+//
+//*****************************************************************************
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+//*****************************************************************************
+//
+// Functions exported from buttons.c
+//
+//*****************************************************************************
+extern void ButtonsInit(void);
+extern unsigned char ButtonsPoll(unsigned char *pucDelta,
+ unsigned char *pucRaw);
+
+//*****************************************************************************
+//
+// Mark the end of the C bindings section for C++ compilers.
+//
+//*****************************************************************************
+#ifdef __cplusplus
+}
+#endif
+
+//*****************************************************************************
+//
+// Prototypes for the globals exported by this driver.
+//
+//*****************************************************************************
+
+#endif // __BUTTONS_H__
diff --git a/drivers/rgb.c b/drivers/rgb.c
new file mode 100644
index 0000000..f3107f2
--- /dev/null
+++ b/drivers/rgb.c
@@ -0,0 +1,298 @@
+//*****************************************************************************
+//
+// rgb.c - Evaluation board driver for RGB LED.
+//
+// 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_memmap.h"
+#include "inc/hw_timer.h"
+#include "driverlib/sysctl.h"
+#include "driverlib/rom.h"
+#include "driverlib/pin_map.h"
+#include "driverlib/timer.h"
+#include "driverlib/gpio.h"
+#include "rgb.h"
+
+//*****************************************************************************
+//
+//! \addtogroup rgb_api
+//! @{
+//
+//*****************************************************************************
+
+//*****************************************************************************
+//
+// This is a custom driver that allows the easy manipulation of the RGB LED.
+//
+// The driver uses the general purpose timers to govern the brightness of the
+// LED through simple PWM output mode of the GP Timers.
+//
+// A global array contains the current relative color of each of the three
+// LEDs. A global float variable controls intensity of the overall mixed color.
+//
+//*****************************************************************************
+static unsigned long g_ulColors[3];
+static float g_fIntensity = 0.3f;
+
+//*****************************************************************************
+//
+//! Initializes the Timer and GPIO functionality associated with the RGB LED
+//!
+//! \param ulEnable enables RGB immediately if set.
+//!
+//! This function must be called during application initialization to
+//! configure the GPIO pins to which the LEDs are attached. It enables
+//! the port used by the LEDs and configures each color's Timer. It optionally
+//! enables the RGB LED by configuring the GPIO pins and starting the timers.
+//!
+//! \return None.
+//
+//*****************************************************************************
+void
+RGBInit(unsigned long ulEnable)
+{
+ //
+ // Enable the GPIO Port and Timer for each LED
+ //
+ SysCtlPeripheralEnable(RED_GPIO_PERIPH);
+ SysCtlPeripheralEnable(RED_TIMER_PERIPH);
+
+ SysCtlPeripheralEnable(GREEN_GPIO_PERIPH);
+ SysCtlPeripheralEnable(GREEN_TIMER_PERIPH);
+
+ SysCtlPeripheralEnable(BLUE_GPIO_PERIPH);
+ SysCtlPeripheralEnable(BLUE_TIMER_PERIPH);
+
+ //
+ // Configure each timer for output mode
+ //
+ HWREG(GREEN_TIMER_BASE + TIMER_O_CFG) = 0x04;
+ HWREG(GREEN_TIMER_BASE + TIMER_O_TAMR) = 0x0A;
+ HWREG(GREEN_TIMER_BASE + TIMER_O_TAILR) = 0xFFFF;
+
+ HWREG(BLUE_TIMER_BASE + TIMER_O_CFG) = 0x04;
+ HWREG(BLUE_TIMER_BASE + TIMER_O_TBMR) = 0x0A;
+ HWREG(BLUE_TIMER_BASE + TIMER_O_TBILR) = 0xFFFF;
+
+ HWREG(RED_TIMER_BASE + TIMER_O_CFG) = 0x04;
+ HWREG(RED_TIMER_BASE + TIMER_O_TBMR) = 0x0A;
+ HWREG(RED_TIMER_BASE + TIMER_O_TBILR) = 0xFFFF;
+
+ //
+ // Invert the output signals.
+ //
+ HWREG(RED_TIMER_BASE + TIMER_O_CTL) |= 0x4000;
+ HWREG(GREEN_TIMER_BASE + TIMER_O_CTL) |= 0x40;
+ HWREG(BLUE_TIMER_BASE + TIMER_O_CTL) |= 0x4000;
+
+ if(ulEnable)
+ {
+ RGBEnable();
+ }
+}
+
+//*****************************************************************************
+//
+//! Enable the RGB LED with already configured timer settings
+//!
+//! This function or RGBDisable should be called during application
+//! initialization to configure the GPIO pins to which the LEDs are attached.
+//! This function enables the timers and configures the GPIO pins as timer
+//! outputs.
+//!
+//! \return None.
+//
+//*****************************************************************************
+void
+RGBEnable(void)
+{
+ //
+ // Enable timers to begin counting
+ //
+ TimerEnable(RED_TIMER_BASE, TIMER_BOTH);
+ TimerEnable(GREEN_TIMER_BASE, TIMER_BOTH);
+ TimerEnable(BLUE_TIMER_BASE, TIMER_BOTH);
+
+ //
+ // Reconfigure each LED's GPIO pad for timer control
+ //
+ GPIOPinConfigure(GREEN_GPIO_PIN_CFG);
+ GPIOPinTypeTimer(GREEN_GPIO_BASE, GREEN_GPIO_PIN);
+ GPIOPadConfigSet(GREEN_GPIO_BASE, GREEN_GPIO_PIN, GPIO_STRENGTH_8MA_SC,
+ GPIO_PIN_TYPE_STD);
+
+ GPIOPinConfigure(BLUE_GPIO_PIN_CFG);
+ GPIOPinTypeTimer(BLUE_GPIO_BASE, BLUE_GPIO_PIN);
+ GPIOPadConfigSet(BLUE_GPIO_BASE, BLUE_GPIO_PIN, GPIO_STRENGTH_8MA_SC,
+ GPIO_PIN_TYPE_STD);
+
+ GPIOPinConfigure(RED_GPIO_PIN_CFG);
+ GPIOPinTypeTimer(RED_GPIO_BASE, RED_GPIO_PIN);
+ GPIOPadConfigSet(RED_GPIO_BASE, RED_GPIO_PIN, GPIO_STRENGTH_8MA_SC,
+ GPIO_PIN_TYPE_STD);
+}
+
+//*****************************************************************************
+//
+//! Disable the RGB LED by configuring the GPIO's as inputs.
+//!
+//! This function or RGBEnable should be called during application
+//! initialization to configure the GPIO pins to which the LEDs are attached.
+//! This function disables the timers and configures the GPIO pins as inputs
+//! for minimum current draw.
+//!
+//! \return None.
+//
+//*****************************************************************************
+void
+RGBDisable(void)
+{
+ //
+ // Configure the GPIO pads as general purpose inputs.
+ //
+ GPIOPinTypeGPIOInput(RED_GPIO_BASE, RED_GPIO_PIN);
+ GPIOPinTypeGPIOInput(GREEN_GPIO_BASE, GREEN_GPIO_PIN);
+ GPIOPinTypeGPIOInput(BLUE_GPIO_BASE, BLUE_GPIO_PIN);
+
+ //
+ // Stop the timer counting.
+ //
+ TimerDisable(RED_TIMER_BASE, TIMER_BOTH);
+ TimerDisable(GREEN_TIMER_BASE, TIMER_BOTH);
+ TimerDisable(BLUE_TIMER_BASE, TIMER_BOTH);
+}
+
+//*****************************************************************************
+//
+//! Set the output color and intensity.
+//!
+//! \param pulRGBColor points to a three element array representing the
+//! relative intensity of each color. Red is element 0, Green is element 1,
+//! Blue is element 2. 0x0000 is off. 0xFFFF is fully on.
+//!
+//! \param fIntensity is used to scale the intensity of all three colors by
+//! the same amount. fIntensity should be between 0.0 and 1.0. This scale
+//! factor is applied to all three colors.
+//!
+//! This function should be called by the application to set the color and
+//! intensity of the RGB LED.
+//!
+//! \return None.
+//
+//*****************************************************************************
+void
+RGBSet(volatile unsigned long * pulRGBColor, float fIntensity)
+{
+ RGBColorSet(pulRGBColor);
+ RGBIntensitySet(fIntensity);
+}
+
+//*****************************************************************************
+//
+//! Set the output color.
+//!
+//! \param pulRGBColor points to a three element array representing the
+//! relative intensity of each color. Red is element 0, Green is element 1,
+//! Blue is element 2. 0x0000 is off. 0xFFFF is fully on.
+//!
+//! This function should be called by the application to set the color
+//! of the RGB LED.
+//!
+//! \return None.
+//
+//*****************************************************************************
+void
+RGBColorSet(volatile unsigned long * pulRGBColor)
+{
+ unsigned long ulColor[3];
+ unsigned long ulIndex;
+
+ for(ulIndex=0; ulIndex < 3; ulIndex++)
+ {
+ g_ulColors[ulIndex] = pulRGBColor[ulIndex];
+ ulColor[ulIndex] = (unsigned long) (((float) pulRGBColor[ulIndex]) *
+ g_fIntensity + 0.5f);
+
+ if(ulColor[ulIndex] > 0xFFFF)
+ {
+ ulColor[ulIndex] = 0xFFFF;
+ }
+ }
+
+ TimerMatchSet(RED_TIMER_BASE, RED_TIMER, ulColor[RED]);
+ TimerMatchSet(GREEN_TIMER_BASE, GREEN_TIMER, ulColor[GREEN]);
+ TimerMatchSet(BLUE_TIMER_BASE, BLUE_TIMER, ulColor[BLUE]);
+}
+
+//*****************************************************************************
+//
+//! Set the current output intensity.
+//!
+//! \param fIntensity is used to scale the intensity of all three colors by
+//! the same amount. fIntensity should be between 0.0 and 1.0. This scale
+//! factor is applied individually to all three colors.
+//!
+//! This function should be called by the application to set the intensity
+//! of the RGB LED.
+//!
+//! \return None.
+//
+//*****************************************************************************
+void
+RGBIntensitySet(float fIntensity)
+{
+ g_fIntensity = fIntensity;
+ RGBColorSet(g_ulColors);
+}
+
+//*****************************************************************************
+//
+//! Get the output color.
+//!
+//! \param pulRGBColor points to a three element array representing the
+//! relative intensity of each color. Red is element 0, Green is element 1,
+//! Blue is element 2. 0x0000 is off. 0xFFFF is fully on. Caller must allocate
+//! and pass a pointer to a three element array of unsigned longs.
+//!
+//! This function should be called by the application to get the current color
+//! of the RGB LED.
+//!
+//! \return None.
+//
+//*****************************************************************************
+void
+RGBColorGet(unsigned long * pulRGBColor)
+{
+ unsigned long ulIndex;
+
+ for(ulIndex=0; ulIndex < 3; ulIndex++)
+ {
+ pulRGBColor[ulIndex] = g_ulColors[ulIndex];
+ }
+}
+
+//*****************************************************************************
+//
+// Close the Doxygen group.
+//! @}
+//
+//*****************************************************************************
diff --git a/drivers/rgb.h b/drivers/rgb.h
new file mode 100644
index 0000000..27d2276
--- /dev/null
+++ b/drivers/rgb.h
@@ -0,0 +1,143 @@
+//*****************************************************************************
+//
+// rgb.h - Prototypes for the evaluation board RGB LED driver.
+//
+// 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 __RGBLED_H__
+#define __RGBLED_H__
+
+//*****************************************************************************
+//
+// Defines for the hardware resources used by the pushbuttons.
+//
+// The switches are on the following ports/pins:
+//
+// PF1 - RED (632 nanometer)
+// PF2 - GREEN (518 nanometer)
+// PF3 - BLUE (465 nanometer)
+
+//
+// The RGB LED is tied up to 5V but since the lowest Vf is 1.75 we can still
+// use a General Purpose Timer in pulse out mode.
+//
+//*****************************************************************************
+
+//
+// Indexes into the array of colors
+//
+#define RED 0
+#define BLUE 2
+#define GREEN 1
+
+
+//
+// Ratio for percent of full on that should be "true" white.
+//
+#define RED_WHITE_BALANCE 0.497f
+#define GREEN_WHITE_BALANCE 0.6f
+#define BLUE_WHITE_BALANCE 1.0f
+
+//
+// GPIO, Timer, Peripheral, and Pin assignments for the colors
+//
+#define RED_GPIO_PERIPH SYSCTL_PERIPH_GPIOF
+#define RED_TIMER_PERIPH SYSCTL_PERIPH_TIMER0
+#define BLUE_GPIO_PERIPH SYSCTL_PERIPH_GPIOF
+#define BLUE_TIMER_PERIPH SYSCTL_PERIPH_TIMER1
+#define GREEN_GPIO_PERIPH SYSCTL_PERIPH_GPIOF
+#define GREEN_TIMER_PERIPH SYSCTL_PERIPH_TIMER1
+
+
+#define RED_GPIO_BASE GPIO_PORTF_BASE
+#define RED_TIMER_BASE TIMER0_BASE
+#define BLUE_GPIO_BASE GPIO_PORTF_BASE
+#define BLUE_TIMER_BASE TIMER1_BASE
+#define GREEN_GPIO_BASE GPIO_PORTF_BASE
+#define GREEN_TIMER_BASE TIMER1_BASE
+
+#define RED_GPIO_PIN GPIO_PIN_1
+#define BLUE_GPIO_PIN GPIO_PIN_2
+#define GREEN_GPIO_PIN GPIO_PIN_3
+
+
+#define RED_GPIO_PIN_CFG GPIO_PF1_T0CCP1
+#define BLUE_GPIO_PIN_CFG GPIO_PF2_T1CCP0
+#define GREEN_GPIO_PIN_CFG GPIO_PF3_T1CCP1
+
+#define RED_TIMER_CFG TIMER_CFG_B_PWM
+#define BLUE_TIMER_CFG TIMER_CFG_A_PWM
+#define GREEN_TIMER_CFG TIMER_CFG_B_PWM
+
+#define RED_TIMER TIMER_B
+#define BLUE_TIMER TIMER_A
+#define GREEN_TIMER TIMER_B
+
+
+//*****************************************************************************
+//
+// Useful macros
+//
+//*****************************************************************************
+
+//*****************************************************************************
+//
+// If building with a C++ compiler, make all of the definitions in this header
+// have a C binding.
+//
+//*****************************************************************************
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+//*****************************************************************************
+//
+// Functions exported from rgb.c
+//
+//*****************************************************************************
+extern void RGBInit(unsigned long ulEnable);
+
+extern void RGBEnable(void);
+extern void RGBDisable(void);
+extern void RGBSet(volatile unsigned long * pulRGBColor, float fIntensity);
+extern void RGBColorSet(volatile unsigned long * pulRGBColor);
+
+extern void RGBIntensitySet(float fIntensity);
+
+extern void RGBGet(unsigned long * pulRGBColor, float * pfIntensity);
+
+//*****************************************************************************
+//
+// Mark the end of the C bindings section for C++ compilers.
+//
+//*****************************************************************************
+#ifdef __cplusplus
+}
+#endif
+
+//*****************************************************************************
+//
+// Prototypes for the globals exported by this driver.
+//
+//*****************************************************************************
+
+#endif // __RGBLED_H__