X-Git-Url: http://git.linex4red.de/pub/USBasp.git/blobdiff_plain/cb779e3d7d32d7c43e0a45bb526de0a04135b0c7..279e1b6ece7fbc90db6cb642f1c289b45648cf9c:/LUFA/Drivers/Peripheral/AVRU4U6U7/ADC.h diff --git a/LUFA/Drivers/Peripheral/AVRU4U6U7/ADC.h b/LUFA/Drivers/Peripheral/AVRU4U6U7/ADC.h index 504061beb..ddeb53aa3 100644 --- a/LUFA/Drivers/Peripheral/AVRU4U6U7/ADC.h +++ b/LUFA/Drivers/Peripheral/AVRU4U6U7/ADC.h @@ -1,13 +1,13 @@ /* LUFA Library - Copyright (C) Dean Camera, 2010. + Copyright (C) Dean Camera, 2011. dean [at] fourwalledcubicle [dot] com www.lufa-lib.org */ /* - Copyright 2010 Dean Camera (dean [at] fourwalledcubicle [dot] com) + Copyright 2011 Dean Camera (dean [at] fourwalledcubicle [dot] com) Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted @@ -47,6 +47,27 @@ * \note This file should not be included directly. It is automatically included as needed by the ADC driver * dispatch header located in LUFA/Drivers/Peripheral/ADC.h. * + * \section Sec_ExampleUsage Example Usage + * The following snippet is an example of how this module may be used within a typical + * application. + * + * \code + * // Initialise the ADC driver before first use + * ADC_Init(ADC_FREE_RUNNING | ADC_PRESCALE_32); + * + * // Must setup the ADC channel to read beforehand + * ADC_SetupChannel(1); + * + * // Perform a single conversion of the ADC channel 1 + * ADC_GetChannelReading(ADC_REFERENCE_AVCC | ADC_RIGHT_ADJUSTED | ADC_CHANNEL1); + * printf("Conversion Result: %d\r\n", ADC_GetResult()); + * + * // Start reading ADC channel 1 in free running (continuous conversion) mode + * ADC_StartReading(ADC_REFERENCE_AVCC | ADC_RIGHT_ADJUSTED | ADC_CHANNEL1); + * while (!(ADC_IsReadingComplete())) {}; + * printf("Conversion Result: %d\r\n", ADC_GetResult()); + * \endcode + * * @{ */ @@ -69,8 +90,17 @@ #error Do not include this file directly. Include LUFA/Drivers/Peripheral/ADC.h instead. #endif + /* Private Interface - For use in library only: */ + #if !defined(__DOXYGEN__) + /* Macros: */ + #define _ADC_GET_MUX_MASK2(y) ADC_CHANNEL ## y + #define _ADC_GET_MUX_MASK(y) _ADC_GET_MUX_MASK2(y) + #endif + /* Public Interface - May be used in end-application: */ /* Macros: */ + /** \name ADC Reference Configuration Masks */ + //@{ /** Reference mask, for using the voltage present at the AVR's AREF pin for the ADC reference. */ #define ADC_REFERENCE_AREF 0 @@ -79,17 +109,23 @@ /** Reference mask, for using the internally generated 2.56V reference voltage as the ADC reference. */ #define ADC_REFERENCE_INT2560MV ((1 << REFS1) | (1 << REFS0)) - + //@} + + /** \name ADC Result Adjustment Configuration Masks */ + //@{ /** Left-adjusts the 10-bit ADC result, so that the upper 8 bits of the value returned by the - * ADC_GetResult() macro contain the 8 most significant bits of the result. + * \ref ADC_GetResult() macro contain the 8 most significant bits of the result. */ #define ADC_LEFT_ADJUSTED (1 << ADLAR) /** Right-adjusts the 10-bit ADC result, so that the lower 8 bits of the value returned by the - * ADC_GetResult() macro contain the 8 least significant bits of the result. + * \ref ADC_GetResult() macro contain the 8 least significant bits of the result. */ #define ADC_RIGHT_ADJUSTED (0 << ADLAR) + //@} + /** \name ADC Mode Configuration Masks */ + //@{ /** Sets the ADC mode to free running, so that conversions take place continuously as fast as the ADC * is capable of at the given input clock speed. */ @@ -99,7 +135,10 @@ * the ADC returns to idle. */ #define ADC_SINGLE_CONVERSION (0 << ADATE) - + //@} + + /** \name ADC Prescaler Configuration Masks */ + //@{ /** Sets the ADC input clock to prescale by a factor of 2 the AVR's system clock. */ #define ADC_PRESCALE_2 (1 << ADPS0) @@ -120,87 +159,98 @@ /** Sets the ADC input clock to prescale by a factor of 128 the AVR's system clock. */ #define ADC_PRESCALE_128 ((1 << ADPS2) | (1 << ADPS1) | (1 << ADPS0)) + //@} + /** \name ADC MUX Masks */ //@{ - /** MUX mask define for the ADC0 channel of the ADC. See \ref ADC_StartReading and \ref ADC_GetChannelReading. */ + /** MUX mask define for the ADC0 channel of the ADC. See \ref ADC_StartReading() and \ref ADC_GetChannelReading(). */ #define ADC_CHANNEL0 (0x00 << MUX0) - /** MUX mask define for the ADC1 channel of the ADC. See \ref ADC_StartReading and \ref ADC_GetChannelReading. */ + /** MUX mask define for the ADC1 channel of the ADC. See \ref ADC_StartReading() and \ref ADC_GetChannelReading(). */ #define ADC_CHANNEL1 (0x01 << MUX0) #if !(defined(__AVR_ATmega16U4__) || defined(__AVR_ATmega32U4__) || defined(__DOXYGEN__)) - /** MUX mask define for the ADC2 channel of the ADC. See \ref ADC_StartReading and \ref ADC_GetChannelReading. + /** MUX mask define for the ADC2 channel of the ADC. See \ref ADC_StartReading() and \ref ADC_GetChannelReading(). * * \note Not available on all AVR models. */ #define ADC_CHANNEL2 (0x02 << MUX0) - /** MUX mask define for the ADC3 channel of the ADC. See \ref ADC_StartReading and \ref ADC_GetChannelReading. + /** MUX mask define for the ADC3 channel of the ADC. See \ref ADC_StartReading() and \ref ADC_GetChannelReading(). * * \note Not available on all AVR models. */ #define ADC_CHANNEL3 (0x03 << MUX0) #endif - /** MUX mask define for the ADC4 channel of the ADC. See \ref ADC_StartReading and \ref ADC_GetChannelReading. */ + /** MUX mask define for the ADC4 channel of the ADC. See \ref ADC_StartReading() and \ref ADC_GetChannelReading(). */ #define ADC_CHANNEL4 (0x04 << MUX0) - /** MUX mask define for the ADC5 channel of the ADC. See \ref ADC_StartReading and \ref ADC_GetChannelReading. */ + /** MUX mask define for the ADC5 channel of the ADC. See \ref ADC_StartReading() and \ref ADC_GetChannelReading(). */ #define ADC_CHANNEL5 (0x05 << MUX0) - /** MUX mask define for the ADC6 channel of the ADC. See \ref ADC_StartReading and \ref ADC_GetChannelReading. */ + /** MUX mask define for the ADC6 channel of the ADC. See \ref ADC_StartReading() and \ref ADC_GetChannelReading(). */ #define ADC_CHANNEL6 (0x06 << MUX0) /** MUX mask define for the ADC7 channel of the ADC. See \ref ADC_StartReading and \ref ADC_GetChannelReading. */ #define ADC_CHANNEL7 (0x07 << MUX0) - /** MUX mask define for the internal 1.1V bandgap channel of the ADC. See \ref ADC_StartReading and \ref ADC_GetChannelReading. */ + /** MUX mask define for the internal 1.1V bandgap channel of the ADC. See \ref ADC_StartReading() and \ref ADC_GetChannelReading(). */ #define ADC_1100MV_BANDGAP (0x1E << MUX0) #if (defined(__AVR_ATmega16U4__) || defined(__AVR_ATmega32U4__) || defined(__DOXYGEN__)) - /** MUX mask define for the ADC8 channel of the ADC. See \ref ADC_StartReading and \ref ADC_GetChannelReading. + /** MUX mask define for the ADC8 channel of the ADC. See \ref ADC_StartReading() and \ref ADC_GetChannelReading(). * * \note Not available on all AVR models. */ #define ADC_CHANNEL8 ((1 << 8) | (0x00 << MUX0)) - /** MUX mask define for the ADC9 channel of the ADC. See \ref ADC_StartReading and \ref ADC_GetChannelReading. + /** MUX mask define for the ADC9 channel of the ADC. See \ref ADC_StartReading() and \ref ADC_GetChannelReading(). * * \note Not available on all AVR models. */ #define ADC_CHANNEL9 ((1 << 8) | (0x01 << MUX0)) - /** MUX mask define for the ADC10 channel of the ADC. See \ref ADC_StartReading and \ref ADC_GetChannelReading. + /** MUX mask define for the ADC10 channel of the ADC. See \ref ADC_StartReading() and \ref ADC_GetChannelReading(). * * \note Not available on all AVR models. */ #define ADC_CHANNEL10 ((1 << 8) | (0x02 << MUX0)) - /** MUX mask define for the ADC11 channel of the ADC. See \ref ADC_StartReading and \ref ADC_GetChannelReading. + /** MUX mask define for the ADC11 channel of the ADC. See \ref ADC_StartReading() and \ref ADC_GetChannelReading(). * * \note Not available on all AVR models. */ #define ADC_CHANNEL11 ((1 << 8) | (0x03 << MUX0)) - /** MUX mask define for the ADC12 channel of the ADC. See \ref ADC_StartReading and \ref ADC_GetChannelReading. + /** MUX mask define for the ADC12 channel of the ADC. See \ref ADC_StartReading() and \ref ADC_GetChannelReading(). * * \note Not available on all AVR models. */ #define ADC_CHANNEL12 ((1 << 8) | (0x04 << MUX0)) - /** MUX mask define for the ADC13 channel of the ADC. See \ref ADC_StartReading and \ref ADC_GetChannelReading. + /** MUX mask define for the ADC13 channel of the ADC. See \ref ADC_StartReading() and \ref ADC_GetChannelReading(). * * \note Not available on all AVR models. */ #define ADC_CHANNEL13 ((1 << 8) | (0x05 << MUX0)) - /** MUX mask define for the internal temperature sensor channel of the ADC. See \ref ADC_StartReading and - * \ref ADC_GetChannelReading. + /** MUX mask define for the internal temperature sensor channel of the ADC. See \ref ADC_StartReading() and + * \ref ADC_GetChannelReading(). * * \note Not available on all AVR models. */ #define ADC_INT_TEMP_SENS ((1 << 8) | (0x07 << MUX0)) #endif + + /** Retrieves the ADC MUX mask for the given ADC channel number. + * + * \note This macro will only work correctly on channel numbers that are compile-time + * constants defined by the preprocessor. + * + * \param[in] Channel Index of the ADC channel whose MUX mask is to be retrieved. + */ + #define ADC_GET_CHANNEL_MASK(Channel) _ADC_GET_MUX_MASK(Channel) //@} /* Inline Functions: */ @@ -212,7 +262,7 @@ * pin of the AVR, denoted by its special alternative function ADCx. * \n\n * - * \note The channel number must be specified as an integer, and NOT a ADC_CHANNELx mask. + * \note The channel number must be specified as an integer, and not a \c ADC_CHANNEL* mask. * * \param[in] ChannelIndex ADC channel number to set up for conversions. */ @@ -255,7 +305,7 @@ * pin of the AVR, denoted by its special alternative function ADCx. * \n\n * - * \note The channel number must be specified as an integer, and NOT a ADC_CHANNELx mask. + * \note The channel number must be specified as an integer, and not a \c ADC_CHANNEL* mask. * * \param[in] ChannelIndex ADC channel number to set up for conversions. */ @@ -371,15 +421,15 @@ /** Turns off the ADC. If this is called, any further ADC operations will require a call to * \ref ADC_Init() before the ADC can be used again. */ - static inline void ADC_ShutDown(void) ATTR_ALWAYS_INLINE; - static inline void ADC_ShutDown(void) + static inline void ADC_Disable(void) ATTR_ALWAYS_INLINE; + static inline void ADC_Disable(void) { ADCSRA = 0; } /** Indicates if the ADC is currently enabled. * - * \return Boolean true if the ADC subsystem is currently enabled, false otherwise. + * \return Boolean \c true if the ADC subsystem is currently enabled, \c false otherwise. */ static inline bool ADC_GetStatus(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE; static inline bool ADC_GetStatus(void)