Fixed programming errors in the AVRISP-MKII project when the programming packet is...
[pub/USBasp.git] / LUFA / Drivers / Peripheral / AVRU4U6U7 / ADC.h
index 504061b..ddeb53a 100644 (file)
@@ -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
  *  \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
+ *
  *  @{
  */
 
                        #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
 
 
                        /** 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.
                         */
                         *  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)
 
 
                        /** 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: */
                         *        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 <b>not</b> a \c ADC_CHANNEL* mask.
                         *
                         *  \param[in] ChannelIndex  ADC channel number to set up for conversions.
                         */
                         *        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 <b>not</b> a \c ADC_CHANNEL* mask.
                         *
                         *  \param[in] ChannelIndex  ADC channel number to set up for conversions.
                         */
                        /** 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)