| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265 |
- /*
- * Copyright (C) 2004 by Ole Reinhardt <ole.reinhardt@kernelconcepts.de>,
- * Kernelconcepts http://www.kernelconcepts.de
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the copyright holders nor the names of
- * contributors may be used to endorse or promote products derived
- * from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY EGNITE SOFTWARE GMBH AND CONTRIBUTORS
- * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
- * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL EGNITE
- * SOFTWARE GMBH OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
- * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
- * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
- * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
- * THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * For additional information see http://www.ethernut.de/
- *
- */
-
- /*!
- * \file include/dev/adc.h
- * \brief Header for AVR Adc driver
- */
- /*!
- * \addtogroup xgAvrAdc
- */
-
- /*@{*/
- #ifndef _ADC_H_
- #define _ADC_H_
- // ENUM declaring possible ADC reference voltages
- // - AVCC = 5V
- // - AREF = External reference
- // - INTERNAL_256 = 2.56V
- enum adc_ref_type
- {
- AVCC = 0,
- AREF,
- INTERNAL_256
- };
- typedef enum adc_ref_type adc_ref_t;
- // ENUM declaring possible ADC modes
- // FREE_RUNNING:
- // Free-running mode. Samples continuously taken
- // every 13 cycles of ADC clock after
- // ADC_start_conversion() is called.
- // SINGLE_CONVERSION:
- // Single-conversion mode. One sample taken every time
- // ADC_start_conversion() is called.
- enum adc_mode_type
- {
- ADC_OFF,
- FREE_RUNNING,
- SINGLE_CONVERSION
- };
- typedef enum adc_mode_type adc_mode_t;
- // ENUM declaring possible ADC channels
- enum adc_channel_type
- {
- ADC0=0,
- ADC1=1,
- ADC2=2,
- ADC3=3,
- ADC4=4,
- ADC5=5,
- ADC6=6,
- ADC7=7
- };
- typedef enum adc_channel_type adc_channel_t;
- #define ADC_PRESCALE_DIV2 0x00 ///< 0x01,0x00 -> CPU clk/2
- #define ADC_PRESCALE_DIV4 0x02 ///< 0x02 -> CPU clk/4
- #define ADC_PRESCALE_DIV8 0x03 ///< 0x03 -> CPU clk/8
- #define ADC_PRESCALE_DIV16 0x04 ///< 0x04 -> CPU clk/16
- #define ADC_PRESCALE_DIV32 0x05 ///< 0x05 -> CPU clk/32
- #define ADC_PRESCALE_DIV64 0x06 ///< 0x06 -> CPU clk/64
- #define ADC_PRESCALE_DIV128 0x07 ///< 0x07 -> CPU clk/128
- // ADC_Init
- //
- // This function initializes the ADC based on the
- // #defines in config.h
- //
- // post: ADC initialized and primed for call to
- // start_conversion
- void ADCInit(void);
- // ADC_SetRef
- //
- // Allows setting of reference voltage for ADC.
- //
- // NOTE: This function stops ADC conversion. One must
- // call ADC_start_conversion to restart the ADC.
- //
- // pre: "reference" is a valid ADC reference from the
- // choices given above
- // post: ADC conversion stopped and reference voltage
- // set to desired choice
- void ADCSetRef(adc_ref_t reference);
- // ADC_SetMode
- //
- // Allows setting of ADC conversion mode: either
- // single-conversion or free-running.
- //
- // NOTE: This function stops ADC conversion. One must
- // call ADC_start_conversion to restart the ADC.
- //
- // pre: "mode" is a valid ADC reference from the
- // choices given above
- // post: ADC conversion stopped and the ADC mode is
- // set to desired choice
- void ADCSetMode(adc_mode_t mode);
- // ADC_SetPrescale
- //
- // Allows setting of ADC clock prescalar (ADC rate).
- // The ADC rate is given by the system clock rate
- // divided by the prescalar value. Possible prescalar
- // values range from 2-128 in powers of 2 (2,4,8,etc.)
- //
- // NOTE: This function stops ADC conversion. One must
- // call ADC_start_conversion to restart the ADC.
- //
- // pre: "prescalar" is a valid ADC reference from the
- // choices given above
- // post: ADC conversion stopped and ADC prescalar
- // set to desired choice
- u_char ADCSetPrescale(u_char prescalar);
- // ADC_SetChannel
- //
- // Sets the channel that the ADC reads. The ADC
- // may only read from one channel at a time.
- //
- // pre: "adc_channel" is a valid ADC reference from the
- // choices given above
- // post: ADC conversion stopped and ADC channel
- // set to desired choice
- void ADCSetChannel(adc_channel_t adc_channel);
- // ADC_BufferFlush
- //
- // Flushes the local buffer used to store ADC values
- // between conversion and the user's call to ADC_read
- //
- // NOTE: It is recommended that one calls buffer flush
- // if any changes are made to the ADC's state.
- //
- // pre: none
- // post: Local ADC buffer has been flushed
- void ADCBufferFlush(void);
- // ADC_StartConversion
- //
- // Begins ADC conversion. If in single-conversion mode,
- // this function will only convert one value. If in
- // free-running mode, this function will begin
- // continuous conversion at the rate set by the
- // prescalar (see ADC_set_prescalar).
- //
- // NOTE: Converted values from the ADC are stored
- // in a local buffer. The user must call
- // ADC_read to obtain these values.
- //
- // pre: none
- // post: The ADC has started conversion. Completion of
- // any conversions is not guaranteed.
- void ADCStartConversion(void);
- // ADC_StartLowNoiseConversion
- //
- // Set Conversion Mode to SINGLE_CONVERSION, Enters
- // adc sleep mode and wait until conversion interrupt occurs.
- // CPU will go to sleep mode!!!
- // BE AWARE OF WHAT IS WRITTEN IN THE AVR DATASHEET
- //
- // NOTE: Converted values from the ADC are stored
- // in a local buffer. The user must call
- // ADC_read to obtain these values.
- //
- // Only implemented for avr_gcc. Any other architecture
- // and compiler will use normal conversion
- // pre: none
- // post: The ADC has started conversion. Completion of
- // any conversions is not guaranteed.
- void ADCStartLowNoiseConversion(void);
- // ADC_StopConversion
- //
- // Stops ADC conversion if ADC is in free-running
- // mode. Has no effect if ADC is in single-conversion
- // mode.
- //
- // pre: none
- // post: ADC conversion has been stopped.
- void ADCStopConversion(void);
- // ADC_read
- //
- // Reads ADC values from local buffer. Reads one ADC
- // conversion value at a time.
- //
- // return: 0 = OK
- // 1 = No ADC value to read. "value" is invalid
- //
- // pre: "value" points to a valid variable.
- // post: If no errors, one ADC conversion value has
- // been read and placed in the variable pointed
- // to by "value"
- u_char ADCRead(u_short *value);
- // ADC_GetMode
- // returns current conversion mode
- inline adc_mode_t ADCGetMode(void);
- #endif
- /*@}*/
|