analyse audio input

Dependencies:   PololuLedStrip mbed

Committer:
KongXiangyue
Date:
Thu Aug 07 14:24:47 2014 +0000
Revision:
0:bd2ecb743ed5
AUDIO fft led

Who changed what in which revision?

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