Laser Sensing Display for UI interfaces in the real world

Dependencies:   mbed

Fork of skinGames_forktest by Alvaro Cassinelli

Committer:
mbedalvaro
Date:
Wed Mar 28 14:40:01 2012 +0000
Revision:
0:345b3bc7a0ea
This version (using rigid frame, base and child classes, etc) works, but the blob is strangely smaller. Need to check this.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
mbedalvaro 0:345b3bc7a0ea 1 /* mbed Library - ADC
mbedalvaro 0:345b3bc7a0ea 2 * Copyright (c) 2010, sblandford
mbedalvaro 0:345b3bc7a0ea 3 * released under MIT license http://mbed.org/licence/mit
mbedalvaro 0:345b3bc7a0ea 4 */
mbedalvaro 0:345b3bc7a0ea 5
mbedalvaro 0:345b3bc7a0ea 6 #ifndef MBED_ADC_H
mbedalvaro 0:345b3bc7a0ea 7 #define MBED_ADC_H
mbedalvaro 0:345b3bc7a0ea 8
mbedalvaro 0:345b3bc7a0ea 9 #include "mbed.h"
mbedalvaro 0:345b3bc7a0ea 10
mbedalvaro 0:345b3bc7a0ea 11 #define XTAL_FREQ 12000000
mbedalvaro 0:345b3bc7a0ea 12 #define MAX_ADC_CLOCK 13000000
mbedalvaro 0:345b3bc7a0ea 13 #define CLKS_PER_SAMPLE 64
mbedalvaro 0:345b3bc7a0ea 14
mbedalvaro 0:345b3bc7a0ea 15 #define ADC_SAMPLE_RATE 150000
mbedalvaro 0:345b3bc7a0ea 16
mbedalvaro 0:345b3bc7a0ea 17
mbedalvaro 0:345b3bc7a0ea 18 class ADC {
mbedalvaro 0:345b3bc7a0ea 19 public:
mbedalvaro 0:345b3bc7a0ea 20
mbedalvaro 0:345b3bc7a0ea 21 //Initialize ADC with ADC maximum sample rate of
mbedalvaro 0:345b3bc7a0ea 22 //sample_rate and system clock divider of cclk_div
mbedalvaro 0:345b3bc7a0ea 23 //Maximum recommened sample rate is 184000
mbedalvaro 0:345b3bc7a0ea 24 ADC(int sample_rate, int cclk_div);
mbedalvaro 0:345b3bc7a0ea 25
mbedalvaro 0:345b3bc7a0ea 26 //Enable/disable ADC on pin according to state
mbedalvaro 0:345b3bc7a0ea 27 //and also select/de-select for next conversion
mbedalvaro 0:345b3bc7a0ea 28 void setup(PinName pin, int state);
mbedalvaro 0:345b3bc7a0ea 29
mbedalvaro 0:345b3bc7a0ea 30 //Return enabled/disabled state of ADC on pin
mbedalvaro 0:345b3bc7a0ea 31 int setup(PinName pin);
mbedalvaro 0:345b3bc7a0ea 32
mbedalvaro 0:345b3bc7a0ea 33 //Enable/disable burst mode according to state
mbedalvaro 0:345b3bc7a0ea 34 void burst(int state);
mbedalvaro 0:345b3bc7a0ea 35
mbedalvaro 0:345b3bc7a0ea 36 //Select channel already setup
mbedalvaro 0:345b3bc7a0ea 37 void select(PinName pin);
mbedalvaro 0:345b3bc7a0ea 38
mbedalvaro 0:345b3bc7a0ea 39 //Return burst mode enabled/disabled
mbedalvaro 0:345b3bc7a0ea 40 int burst(void);
mbedalvaro 0:345b3bc7a0ea 41
mbedalvaro 0:345b3bc7a0ea 42 /*Set start condition and edge according to mode:
mbedalvaro 0:345b3bc7a0ea 43 0 - No start (this value should be used when clearing PDN to 0).
mbedalvaro 0:345b3bc7a0ea 44 1 - Start conversion now.
mbedalvaro 0:345b3bc7a0ea 45 2 - Start conversion when the edge selected by bit 27 occurs on the P2.10 / EINT0 / NMI pin.
mbedalvaro 0:345b3bc7a0ea 46 3 - Start conversion when the edge selected by bit 27 occurs on the P1.27 / CLKOUT /
mbedalvaro 0:345b3bc7a0ea 47 USB_OVRCRn / CAP0.1 pin.
mbedalvaro 0:345b3bc7a0ea 48 4 - Start conversion when the edge selected by bit 27 occurs on MAT0.1. Note that this does
mbedalvaro 0:345b3bc7a0ea 49 not require that the MAT0.1 function appear on a device pin.
mbedalvaro 0:345b3bc7a0ea 50 5 - Start conversion when the edge selected by bit 27 occurs on MAT0.3. Note that it is not
mbedalvaro 0:345b3bc7a0ea 51 possible to cause the MAT0.3 function to appear on a device pin.
mbedalvaro 0:345b3bc7a0ea 52 6 - Start conversion when the edge selected by bit 27 occurs on MAT1.0. Note that this does
mbedalvaro 0:345b3bc7a0ea 53 not require that the MAT1.0 function appear on a device pin.
mbedalvaro 0:345b3bc7a0ea 54 7 - Start conversion when the edge selected by bit 27 occurs on MAT1.1. Note that this does
mbedalvaro 0:345b3bc7a0ea 55 not require that the MAT1.1 function appear on a device pin.
mbedalvaro 0:345b3bc7a0ea 56 When mode >= 2, conversion is triggered by edge:
mbedalvaro 0:345b3bc7a0ea 57 0 - Rising edge
mbedalvaro 0:345b3bc7a0ea 58 1 - Falling edge
mbedalvaro 0:345b3bc7a0ea 59 */
mbedalvaro 0:345b3bc7a0ea 60 void startmode(int mode, int edge);
mbedalvaro 0:345b3bc7a0ea 61
mbedalvaro 0:345b3bc7a0ea 62 //Return startmode state according to mode_edge=0: mode and mode_edge=1: edge
mbedalvaro 0:345b3bc7a0ea 63 int startmode(int mode_edge);
mbedalvaro 0:345b3bc7a0ea 64
mbedalvaro 0:345b3bc7a0ea 65 //Start ADC conversion
mbedalvaro 0:345b3bc7a0ea 66 void start(void);
mbedalvaro 0:345b3bc7a0ea 67
mbedalvaro 0:345b3bc7a0ea 68 //Set interrupt enable/disable for pin to state
mbedalvaro 0:345b3bc7a0ea 69 void interrupt_state(PinName pin, int state);
mbedalvaro 0:345b3bc7a0ea 70
mbedalvaro 0:345b3bc7a0ea 71 //Return enable/disable state of interrupt for pin
mbedalvaro 0:345b3bc7a0ea 72 int interrupt_state(PinName pin);
mbedalvaro 0:345b3bc7a0ea 73
mbedalvaro 0:345b3bc7a0ea 74 //Attach custom interrupt handler replacing default
mbedalvaro 0:345b3bc7a0ea 75 void attach(void(*fptr)(void));
mbedalvaro 0:345b3bc7a0ea 76
mbedalvaro 0:345b3bc7a0ea 77 //Restore default interrupt handler
mbedalvaro 0:345b3bc7a0ea 78 void detach(void);
mbedalvaro 0:345b3bc7a0ea 79
mbedalvaro 0:345b3bc7a0ea 80 //Append custom interrupt handler for pin
mbedalvaro 0:345b3bc7a0ea 81 void append(PinName pin, void(*fptr)(uint32_t value));
mbedalvaro 0:345b3bc7a0ea 82
mbedalvaro 0:345b3bc7a0ea 83 //Unappend custom interrupt handler for pin
mbedalvaro 0:345b3bc7a0ea 84 void unappend(PinName pin);
mbedalvaro 0:345b3bc7a0ea 85
mbedalvaro 0:345b3bc7a0ea 86 //Append custom global interrupt handler
mbedalvaro 0:345b3bc7a0ea 87 void append(void(*fptr)(int chan, uint32_t value));
mbedalvaro 0:345b3bc7a0ea 88
mbedalvaro 0:345b3bc7a0ea 89 //Unappend custom global interrupt handler
mbedalvaro 0:345b3bc7a0ea 90 void unappend(void);
mbedalvaro 0:345b3bc7a0ea 91
mbedalvaro 0:345b3bc7a0ea 92 //Set ADC offset to a value 0-7
mbedalvaro 0:345b3bc7a0ea 93 void offset(int offset);
mbedalvaro 0:345b3bc7a0ea 94
mbedalvaro 0:345b3bc7a0ea 95 //Return current ADC offset
mbedalvaro 0:345b3bc7a0ea 96 int offset(void);
mbedalvaro 0:345b3bc7a0ea 97
mbedalvaro 0:345b3bc7a0ea 98 //Return value of ADC on pin
mbedalvaro 0:345b3bc7a0ea 99 int read(PinName pin);
mbedalvaro 0:345b3bc7a0ea 100
mbedalvaro 0:345b3bc7a0ea 101 //Return DONE flag of ADC on pin
mbedalvaro 0:345b3bc7a0ea 102 int done(PinName pin);
mbedalvaro 0:345b3bc7a0ea 103
mbedalvaro 0:345b3bc7a0ea 104 //Return OVERRUN flag of ADC on pin
mbedalvaro 0:345b3bc7a0ea 105 int overrun(PinName pin);
mbedalvaro 0:345b3bc7a0ea 106
mbedalvaro 0:345b3bc7a0ea 107 //Return actual ADC clock
mbedalvaro 0:345b3bc7a0ea 108 int actual_adc_clock(void);
mbedalvaro 0:345b3bc7a0ea 109
mbedalvaro 0:345b3bc7a0ea 110 //Return actual maximum sample rate
mbedalvaro 0:345b3bc7a0ea 111 int actual_sample_rate(void);
mbedalvaro 0:345b3bc7a0ea 112
mbedalvaro 0:345b3bc7a0ea 113 //Return pin ID of ADC channel
mbedalvaro 0:345b3bc7a0ea 114 PinName channel_to_pin(int chan);
mbedalvaro 0:345b3bc7a0ea 115
mbedalvaro 0:345b3bc7a0ea 116 //Return pin number of ADC channel
mbedalvaro 0:345b3bc7a0ea 117 int channel_to_pin_number(int chan);
mbedalvaro 0:345b3bc7a0ea 118
mbedalvaro 0:345b3bc7a0ea 119
mbedalvaro 0:345b3bc7a0ea 120 private:
mbedalvaro 0:345b3bc7a0ea 121 int _pin_to_channel(PinName pin);
mbedalvaro 0:345b3bc7a0ea 122 uint32_t _data_of_pin(PinName pin);
mbedalvaro 0:345b3bc7a0ea 123
mbedalvaro 0:345b3bc7a0ea 124 int _adc_clk_freq;
mbedalvaro 0:345b3bc7a0ea 125 void adcisr(void);
mbedalvaro 0:345b3bc7a0ea 126 static void _adcisr(void);
mbedalvaro 0:345b3bc7a0ea 127 static ADC *instance;
mbedalvaro 0:345b3bc7a0ea 128
mbedalvaro 0:345b3bc7a0ea 129 uint32_t _adc_data[8];
mbedalvaro 0:345b3bc7a0ea 130 void(*_adc_isr[8])(uint32_t value);
mbedalvaro 0:345b3bc7a0ea 131 void(*_adc_g_isr)(int chan, uint32_t value);
mbedalvaro 0:345b3bc7a0ea 132 void(*_adc_m_isr)(void);
mbedalvaro 0:345b3bc7a0ea 133 };
mbedalvaro 0:345b3bc7a0ea 134
mbedalvaro 0:345b3bc7a0ea 135 extern ADC adc;
mbedalvaro 0:345b3bc7a0ea 136
mbedalvaro 0:345b3bc7a0ea 137 #endif