A Port of TI's Webserver for the CC3000

Dependencies:   mbed

Committer:
dflet
Date:
Mon Sep 16 18:37:14 2013 +0000
Revision:
2:e6a185df9e4c
Parent:
1:7a4efebd6e44
ADC and Leds now work on board and config.html page.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
dflet 1:7a4efebd6e44 1 /*******************************************************************************
dflet 1:7a4efebd6e44 2 *
dflet 1:7a4efebd6e44 3 * Wheel.c - Driver for the scroll wheel
dflet 1:7a4efebd6e44 4 *
dflet 1:7a4efebd6e44 5 * Copyright (C) 2010 Texas Instruments Incorporated - http://www.ti.com/
dflet 1:7a4efebd6e44 6 *
dflet 1:7a4efebd6e44 7 * Redistribution and use in source and binary forms, with or without
dflet 1:7a4efebd6e44 8 * modification, are permitted provided that the following conditions
dflet 1:7a4efebd6e44 9 * are met:
dflet 1:7a4efebd6e44 10 *
dflet 1:7a4efebd6e44 11 * Redistributions of source code must retain the above copyright
dflet 1:7a4efebd6e44 12 * notice, this list of conditions and the following disclaimer.
dflet 1:7a4efebd6e44 13 *
dflet 1:7a4efebd6e44 14 * Redistributions in binary form must reproduce the above copyright
dflet 1:7a4efebd6e44 15 * notice, this list of conditions and the following disclaimer in the
dflet 1:7a4efebd6e44 16 * documentation and/or other materials provided with the
dflet 1:7a4efebd6e44 17 * distribution.
dflet 1:7a4efebd6e44 18 *
dflet 1:7a4efebd6e44 19 * Neither the name of Texas Instruments Incorporated nor the names of
dflet 1:7a4efebd6e44 20 * its contributors may be used to endorse or promote products derived
dflet 1:7a4efebd6e44 21 * from this software without specific prior written permission.
dflet 1:7a4efebd6e44 22 *
dflet 1:7a4efebd6e44 23 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
dflet 1:7a4efebd6e44 24 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
dflet 1:7a4efebd6e44 25 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
dflet 1:7a4efebd6e44 26 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
dflet 1:7a4efebd6e44 27 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
dflet 1:7a4efebd6e44 28 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
dflet 1:7a4efebd6e44 29 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
dflet 1:7a4efebd6e44 30 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
dflet 1:7a4efebd6e44 31 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
dflet 1:7a4efebd6e44 32 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
dflet 1:7a4efebd6e44 33 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
dflet 1:7a4efebd6e44 34 *
dflet 1:7a4efebd6e44 35 ******************************************************************************/
dflet 1:7a4efebd6e44 36
dflet 1:7a4efebd6e44 37 /***************************************************************************//**
dflet 1:7a4efebd6e44 38 * @file HAL_Wheel.c
dflet 1:7a4efebd6e44 39 * @addtogroup HAL_Wheel
dflet 1:7a4efebd6e44 40 * @{
dflet 1:7a4efebd6e44 41 ******************************************************************************/
dflet 1:7a4efebd6e44 42 #include "mbed.h"
dflet 1:7a4efebd6e44 43 //#include "msp430.h"
dflet 1:7a4efebd6e44 44 #include "Wheel.h"
dflet 1:7a4efebd6e44 45
dflet 1:7a4efebd6e44 46 //#define WHEEL_PORT_DIR P8DIR
dflet 1:7a4efebd6e44 47 //#define WHEEL_PORT_OUT P8OUT
dflet 1:7a4efebd6e44 48 //#define WHEEL_ENABLE BIT0
dflet 1:7a4efebd6e44 49 //#define ADC_PORT_SEL P6SEL
dflet 1:7a4efebd6e44 50 //#define ADC_INPUT_A5 BIT5
dflet 1:7a4efebd6e44 51
dflet 1:7a4efebd6e44 52 uint16_t positionData;
dflet 1:7a4efebd6e44 53 uint16_t positionDataOld;
dflet 1:7a4efebd6e44 54
dflet 1:7a4efebd6e44 55 /***************************************************************************//**
dflet 1:7a4efebd6e44 56 * @brief Set up the wheel
dflet 1:7a4efebd6e44 57 * @param None
dflet 1:7a4efebd6e44 58 * @return None
dflet 1:7a4efebd6e44 59 ******************************************************************************/
dflet 1:7a4efebd6e44 60
dflet 1:7a4efebd6e44 61 void Wheel_init(void)
dflet 1:7a4efebd6e44 62 {
dflet 1:7a4efebd6e44 63 LPC_PINCON->PINSEL3 |= (3UL << 30); /* P1.31 is AD0.5, attached to pot1*/
dflet 1:7a4efebd6e44 64 LPC_SC->PCONP |= (1 << 12); /* Enable power to ADC block */
dflet 1:7a4efebd6e44 65 LPC_ADC->ADCR = (1 << 5) | /* select AD0.5 pin b100000*/
dflet 1:7a4efebd6e44 66 (4 << 8) | /* ADC clock is 25MHz/5 */
dflet 1:7a4efebd6e44 67 (1 << 21); /* enable ADC */
dflet 1:7a4efebd6e44 68
dflet 1:7a4efebd6e44 69 //WHEEL_PORT_DIR |= WHEEL_ENABLE;
dflet 1:7a4efebd6e44 70 //WHEEL_PORT_OUT |= WHEEL_ENABLE; // Enable wheel
dflet 1:7a4efebd6e44 71
dflet 1:7a4efebd6e44 72 //ADC12CTL0 = ADC12SHT02 + ADC12ON; // Sampling time, ADC12 on
dflet 1:7a4efebd6e44 73 //ADC12CTL1 = ADC12SHP; // Use sampling timer
dflet 1:7a4efebd6e44 74 //ADC12MCTL0 = ADC12INCH_5; // Use A5 (wheel) as input
dflet 1:7a4efebd6e44 75 //ADC12CTL0 |= ADC12ENC; // Enable conversions
dflet 1:7a4efebd6e44 76 //ADC_PORT_SEL |= ADC_INPUT_A5; // P6.5 ADC option select (A5)
dflet 1:7a4efebd6e44 77 }
dflet 1:7a4efebd6e44 78
dflet 1:7a4efebd6e44 79 /***************************************************************************//**
dflet 1:7a4efebd6e44 80 * @brief Determine the wheel's position
dflet 1:7a4efebd6e44 81 * @param None
dflet 1:7a4efebd6e44 82 * @return Wheel position (0~7)
dflet 1:7a4efebd6e44 83 ******************************************************************************/
dflet 1:7a4efebd6e44 84
dflet 1:7a4efebd6e44 85 uint8_t Wheel_getPosition(void)
dflet 1:7a4efebd6e44 86 {
dflet 1:7a4efebd6e44 87 uint8_t position = 0;
dflet 1:7a4efebd6e44 88
dflet 1:7a4efebd6e44 89 Wheel_getValue();
dflet 1:7a4efebd6e44 90
dflet 1:7a4efebd6e44 91 //determine which position the wheel is in
dflet 1:7a4efebd6e44 92 if (positionData > 0x0806)
dflet 1:7a4efebd6e44 93 position = 7 - (positionData - 0x0806) / 260; //scale the data for 8 different positions
dflet 1:7a4efebd6e44 94 else
dflet 1:7a4efebd6e44 95 position = positionData / 260;
dflet 1:7a4efebd6e44 96
dflet 1:7a4efebd6e44 97 return position;
dflet 1:7a4efebd6e44 98 }
dflet 1:7a4efebd6e44 99
dflet 1:7a4efebd6e44 100 /***************************************************************************//**
dflet 1:7a4efebd6e44 101 * @brief Determine the raw voltage value across the potentiometer
dflet 1:7a4efebd6e44 102 * @param None
dflet 1:7a4efebd6e44 103 * @return Value
dflet 1:7a4efebd6e44 104 ******************************************************************************/
dflet 1:7a4efebd6e44 105
dflet 1:7a4efebd6e44 106 uint16_t Wheel_getValue(void)
dflet 1:7a4efebd6e44 107 {
dflet 1:7a4efebd6e44 108
dflet 1:7a4efebd6e44 109 LPC_ADC->ADCR |= (1<<24); /* start conversion */
dflet 1:7a4efebd6e44 110 while (!(LPC_ADC->ADGDR & (1UL<<31))); /* Wait for Conversion end */
dflet 1:7a4efebd6e44 111 positionData = ((LPC_ADC->ADGDR >> 4) & 0xFFF); /* read converted value */
dflet 1:7a4efebd6e44 112 /* read value needs scaling*/
dflet 1:7a4efebd6e44 113 LPC_ADC->ADCR &= ~(7<<24); /* stop conversion */
dflet 2:e6a185df9e4c 114 //printf("ADC Value %i\r\n",positionData);
dflet 1:7a4efebd6e44 115 //measure ADC value
dflet 1:7a4efebd6e44 116 //ADC12IE = 0x01; // Enable interrupt
dflet 1:7a4efebd6e44 117 //ADC12CTL0 |= ADC12SC; // Start sampling/conversion
dflet 1:7a4efebd6e44 118 //__bis_SR_register(LPM0_bits + GIE); // LPM0, ADC12_ISR will force exit
dflet 1:7a4efebd6e44 119 //ADC12IE = 0x00; // Disable interrupt
dflet 1:7a4efebd6e44 120
dflet 1:7a4efebd6e44 121 //add hysteresis on wheel to remove fluctuations
dflet 1:7a4efebd6e44 122 if (positionData > positionDataOld)
dflet 1:7a4efebd6e44 123 if ((positionData - positionDataOld) > 10)
dflet 1:7a4efebd6e44 124 positionDataOld = positionData; //use new data if change is beyond
dflet 1:7a4efebd6e44 125 // fluctuation threshold
dflet 1:7a4efebd6e44 126 else
dflet 1:7a4efebd6e44 127 positionData = positionDataOld; //use old data if change is not beyond
dflet 1:7a4efebd6e44 128 // fluctuation threshold
dflet 1:7a4efebd6e44 129 else
dflet 1:7a4efebd6e44 130 if ((positionDataOld - positionData) > 10)
dflet 1:7a4efebd6e44 131 positionDataOld = positionData; //use new data if change is beyond
dflet 1:7a4efebd6e44 132 // fluctuation threshold
dflet 1:7a4efebd6e44 133 else
dflet 1:7a4efebd6e44 134 positionData = positionDataOld; //use old data if change is not beyond
dflet 1:7a4efebd6e44 135 // fluctuation threshold
dflet 1:7a4efebd6e44 136
dflet 1:7a4efebd6e44 137 return positionData;
dflet 1:7a4efebd6e44 138 }
dflet 1:7a4efebd6e44 139
dflet 1:7a4efebd6e44 140 /***************************************************************************//**
dflet 1:7a4efebd6e44 141 * @brief Disable wheel
dflet 1:7a4efebd6e44 142 * @param None
dflet 1:7a4efebd6e44 143 * @return none
dflet 1:7a4efebd6e44 144 ******************************************************************************/
dflet 1:7a4efebd6e44 145
dflet 1:7a4efebd6e44 146 void Wheel_disable(void)
dflet 1:7a4efebd6e44 147 {
dflet 1:7a4efebd6e44 148
dflet 1:7a4efebd6e44 149 //WHEEL_PORT_OUT &= ~WHEEL_ENABLE; //disable wheel
dflet 1:7a4efebd6e44 150 //ADC12CTL0 &= ~ADC12ENC; // Disable conversions
dflet 1:7a4efebd6e44 151 //ADC12CTL0 &= ~ADC12ON; // ADC12 off
dflet 1:7a4efebd6e44 152 }
dflet 1:7a4efebd6e44 153
dflet 1:7a4efebd6e44 154 /***************************************************************************//**
dflet 1:7a4efebd6e44 155 * @brief Enable wheel
dflet 1:7a4efebd6e44 156 * @param None
dflet 1:7a4efebd6e44 157 * @return none
dflet 1:7a4efebd6e44 158 ******************************************************************************/
dflet 1:7a4efebd6e44 159
dflet 1:7a4efebd6e44 160 void Wheel_enable(void)
dflet 1:7a4efebd6e44 161 {
dflet 1:7a4efebd6e44 162
dflet 1:7a4efebd6e44 163 //WHEEL_PORT_OUT |= WHEEL_ENABLE; //disable wheel
dflet 1:7a4efebd6e44 164 //ADC12CTL0 |= ADC12ON; // ADC12 on
dflet 1:7a4efebd6e44 165 //ADC12CTL0 |= ADC12ENC; // Enable conversions
dflet 1:7a4efebd6e44 166 }
dflet 1:7a4efebd6e44 167
dflet 1:7a4efebd6e44 168 /***************************************************************************//**
dflet 1:7a4efebd6e44 169 * @brief Handles ADC interrupts.
dflet 1:7a4efebd6e44 170 *
dflet 1:7a4efebd6e44 171 * Stores result of single ADC conversion for reading position of the scroll wheel.
dflet 1:7a4efebd6e44 172 * @param none
dflet 1:7a4efebd6e44 173 * @return none
dflet 1:7a4efebd6e44 174 ******************************************************************************/
dflet 1:7a4efebd6e44 175 /*
dflet 1:7a4efebd6e44 176 #pragma vector = ADC12_VECTOR
dflet 1:7a4efebd6e44 177 __interrupt void ADC12_ISR(void)
dflet 1:7a4efebd6e44 178 {
dflet 1:7a4efebd6e44 179 switch (__even_in_range(ADC12IV, ADC12IV_ADC12IFG15))
dflet 1:7a4efebd6e44 180 {
dflet 1:7a4efebd6e44 181 // Vector ADC12IV_NONE: No interrupt
dflet 1:7a4efebd6e44 182 case ADC12IV_NONE:
dflet 1:7a4efebd6e44 183 break;
dflet 1:7a4efebd6e44 184
dflet 1:7a4efebd6e44 185 // Vector ADC12IV_ADC12OVIFG: ADC overflow
dflet 1:7a4efebd6e44 186 case ADC12IV_ADC12OVIFG:
dflet 1:7a4efebd6e44 187 break;
dflet 1:7a4efebd6e44 188
dflet 1:7a4efebd6e44 189 // Vector ADC12IV_ADC12TOVIFG: ADC timing overflow
dflet 1:7a4efebd6e44 190 case ADC12IV_ADC12TOVIFG:
dflet 1:7a4efebd6e44 191 break;
dflet 1:7a4efebd6e44 192
dflet 1:7a4efebd6e44 193 // Vector ADC12IV_ADC12IFG0: ADC12IFG0:
dflet 1:7a4efebd6e44 194 case ADC12IV_ADC12IFG0:
dflet 1:7a4efebd6e44 195 positionData = ADC12MEM0; // ADC12MEM = A0 > 0.5AVcc?
dflet 1:7a4efebd6e44 196 __bic_SR_register_on_exit(LPM0_bits); // Exit active CPU
dflet 1:7a4efebd6e44 197 break;
dflet 1:7a4efebd6e44 198
dflet 1:7a4efebd6e44 199 // Vector ADC12IV_ADC12IFG1: ADC12IFG1
dflet 1:7a4efebd6e44 200 case ADC12IV_ADC12IFG1:
dflet 1:7a4efebd6e44 201 break;
dflet 1:7a4efebd6e44 202
dflet 1:7a4efebd6e44 203 // Vector ADC12IV_ADC12IFG2: ADC12IFG2
dflet 1:7a4efebd6e44 204 case ADC12IV_ADC12IFG2:
dflet 1:7a4efebd6e44 205 break;
dflet 1:7a4efebd6e44 206
dflet 1:7a4efebd6e44 207 // Vector ADC12IV_ADC12IFG3: ADC12IFG3
dflet 1:7a4efebd6e44 208 case ADC12IV_ADC12IFG3:
dflet 1:7a4efebd6e44 209 break;
dflet 1:7a4efebd6e44 210
dflet 1:7a4efebd6e44 211 // Vector ADC12IV_ADC12IFG4: ADC12IFG4
dflet 1:7a4efebd6e44 212 case ADC12IV_ADC12IFG4:
dflet 1:7a4efebd6e44 213 break;
dflet 1:7a4efebd6e44 214
dflet 1:7a4efebd6e44 215 // Vector ADC12IV_ADC12IFG5: ADC12IFG5
dflet 1:7a4efebd6e44 216 case ADC12IV_ADC12IFG5:
dflet 1:7a4efebd6e44 217 break;
dflet 1:7a4efebd6e44 218
dflet 1:7a4efebd6e44 219 // Vector ADC12IV_ADC12IFG6: ADC12IFG6
dflet 1:7a4efebd6e44 220 case ADC12IV_ADC12IFG6:
dflet 1:7a4efebd6e44 221 break;
dflet 1:7a4efebd6e44 222
dflet 1:7a4efebd6e44 223 // Vector ADC12IV_ADC12IFG7: ADC12IFG7
dflet 1:7a4efebd6e44 224 case ADC12IV_ADC12IFG7:
dflet 1:7a4efebd6e44 225 break;
dflet 1:7a4efebd6e44 226
dflet 1:7a4efebd6e44 227 // Vector ADC12IV_ADC12IFG8: ADC12IFG8
dflet 1:7a4efebd6e44 228 case ADC12IV_ADC12IFG8:
dflet 1:7a4efebd6e44 229 break;
dflet 1:7a4efebd6e44 230
dflet 1:7a4efebd6e44 231 // Vector ADC12IV_ADC12IFG9: ADC12IFG9
dflet 1:7a4efebd6e44 232 case ADC12IV_ADC12IFG9:
dflet 1:7a4efebd6e44 233 break;
dflet 1:7a4efebd6e44 234
dflet 1:7a4efebd6e44 235 // Vector ADC12IV_ADC12IFG10: ADC12IFG10
dflet 1:7a4efebd6e44 236 case ADC12IV_ADC12IFG10:
dflet 1:7a4efebd6e44 237 break;
dflet 1:7a4efebd6e44 238
dflet 1:7a4efebd6e44 239 // Vector ADC12IV_ADC12IFG11: ADC12IFG11
dflet 1:7a4efebd6e44 240 case ADC12IV_ADC12IFG11:
dflet 1:7a4efebd6e44 241 break;
dflet 1:7a4efebd6e44 242
dflet 1:7a4efebd6e44 243 // Vector ADC12IV_ADC12IFG12: ADC12IFG12
dflet 1:7a4efebd6e44 244 case ADC12IV_ADC12IFG12:
dflet 1:7a4efebd6e44 245 break;
dflet 1:7a4efebd6e44 246
dflet 1:7a4efebd6e44 247 // Vector ADC12IV_ADC12IFG13: ADC12IFG13
dflet 1:7a4efebd6e44 248 case ADC12IV_ADC12IFG13:
dflet 1:7a4efebd6e44 249 break;
dflet 1:7a4efebd6e44 250
dflet 1:7a4efebd6e44 251 // Vector ADC12IV_ADC12IFG14: ADC12IFG14
dflet 1:7a4efebd6e44 252 case ADC12IV_ADC12IFG14:
dflet 1:7a4efebd6e44 253 break;
dflet 1:7a4efebd6e44 254
dflet 1:7a4efebd6e44 255 // Vector ADC12IV_ADC12IFG15: ADC12IFG15
dflet 1:7a4efebd6e44 256 case ADC12IV_ADC12IFG15:
dflet 1:7a4efebd6e44 257 break;
dflet 1:7a4efebd6e44 258
dflet 1:7a4efebd6e44 259 default:
dflet 1:7a4efebd6e44 260 break;
dflet 1:7a4efebd6e44 261 }
dflet 1:7a4efebd6e44 262 }
dflet 1:7a4efebd6e44 263 */
dflet 1:7a4efebd6e44 264 /***************************************************************************//**
dflet 1:7a4efebd6e44 265 * @}
dflet 1:7a4efebd6e44 266 ******************************************************************************/
dflet 1:7a4efebd6e44 267