Programming of the DDS-60 (AD9851) frequency synthesizer from AmQRP http://midnightdesignsolutions.com/dds60/index.html I had to use long, floating math in order to get accurate frequency output.

Dependencies:   TextLCD mbed ChaNFS

Committer:
loopsva
Date:
Wed Apr 04 18:14:54 2012 +0000
Revision:
0:1ed24aaf786d
050511

Who changed what in which revision?

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