Andrew Kuznetsov / Monitor

Dependencies:   EthernetNetIf mbed

Committer:
AndrewK
Date:
Tue Jun 26 06:23:18 2012 +0000
Revision:
0:013005f626db

        

Who changed what in which revision?

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