Laser Sensing Display for UI interfaces in the real world

Dependencies:   mbed

Fork of skinGames_forktest by Alvaro Cassinelli

Committer:
mbedalvaro
Date:
Thu Apr 17 08:04:14 2014 +0000
Revision:
47:199042980678
Parent:
41:74e24a0e6e50
publishing for sharing with Ken Iwasaki

Who changed what in which revision?

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