Update all demos, projects and bootloaders to indent all function parameters, one...
[pub/USBasp.git] / LUFA / Drivers / Peripheral / AVRU4U6U7 / ADC.h
index 00c18e7..756ec64 100644 (file)
                                 *  The "mode" parameter should be a mask comprised of a conversion mode (free running or single) and
                                 *  prescaler masks.
                                 *
-                                *  \param[in] Mode  Mask of ADC settings, including adjustment, prescale, mode and reference
+                                *  \param[in] Mode  Mask of ADC settings, including adjustment, prescale, mode and reference.
                                 */
                                static inline void ADC_Init(uint8_t Mode);
 
                                /** Indicates if the current ADC conversion is completed, or still in progress.
                                 *
                                 *  \return Boolean false if the reading is still taking place, or true if the conversion is
-                                *          complete and ready to be read out with \ref ADC_GetResult()
+                                *          complete and ready to be read out with \ref ADC_GetResult().
                                 */
                                static inline bool ADC_IsReadingComplete(void);
                                
                                /** Retrieves the conversion value of the last completed ADC conversion and clears the reading
                                 *  completion flag.
                                 *
-                                *  \return The result of the last ADC conversion
+                                *  \return The result of the last ADC conversion as an unsigned value.
                                 */
                                static inline uint16_t ADC_GetResult(void);
                        #else
                         *
                         *  \note The channel number must be specified as an integer, and NOT a ADC_CHANNELx mask.
                         *
-                        *  \param[in] Channel  ADC channel number to set up for conversions
+                        *  \param[in] Channel  ADC channel number to set up for conversions.
                         */
                        static inline void ADC_SetupChannel(const uint8_t Channel)
                        {
                                #endif
                        }
                        
+                       /** De-configures the given ADC channel, re-enabling digital I/O mode instead of analog. This
+                        *  function sets the associated port pin as an input and re-enabled the digital portion of
+                        *  the I/O.
+                        *
+                        *  \note This must only be called for ADC channels with are connected to a physical port
+                        *        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.
+                        *
+                        *  \param[in] Channel  ADC channel number to set up for conversions.
+                        */
+                       static inline void ADC_DisableChannel(const uint8_t Channel)
+                       {
+                               #if (defined(__AVR_AT90USB1286__) || defined(__AVR_AT90USB646__) || \
+                                        defined(__AVR_AT90USB1287__) || defined(__AVR_AT90USB647__) || \
+                                        defined(__AVR_ATmega32U6__))                           
+                               DDRF  &= ~(1 << Channel);
+                               DIDR0 &= ~(1 << Channel);
+                               #elif (defined(__AVR_ATmega16U4__) || defined(__AVR_ATmega32U4__))
+                               if (Channel < 8)
+                               {
+                                       DDRF  &= ~(1 << Channel);
+                                       DIDR0 &= ~(1 << Channel);
+                               }
+                               else if (Channel == 8)
+                               {
+                                       DDRD  &= ~(1 << 4);
+                                       DIDR2 &= ~(1 << 0);
+                               }
+                               else if (Channel < 11)
+                               {
+                                       DDRD  &= ~(1 << (Channel - 3));
+                                       DIDR2 &= ~(1 << (Channel - 8));
+                               }
+                               else
+                               {
+                                       DDRB  &= ~(1 << (Channel - 7));
+                                       DIDR2 &= ~(1 << (Channel - 8));
+                               }
+                               #endif
+                       }
+
                        /** Starts the reading of the given channel, but does not wait until the conversion has completed.
                         *  Once executed, the conversion status can be determined via the \ref ADC_IsReadingComplete() macro and
                         *  the result read via the \ref ADC_GetResult() macro.
                         *  conversions. If the ADC is in single conversion mode (or the channel to convert from is to be changed),
                         *  this function must be called each time a conversion is to take place.
                         *
-                        *  \param[in] MUXMask  Mask comprising of an ADC channel mask, reference mask and adjustment mask
+                        *  \param[in] MUXMask  Mask comprising of an ADC channel mask, reference mask and adjustment mask.
                         */
                        static inline void ADC_StartReading(const uint16_t MUXMask)
                        {
                         *        to \ref ADC_StartReading() to select the channel and begin the automated conversions, and
                         *        the results read directly from the \ref ADC_GetResult() instead to reduce overhead.
                         *
-                        *  \param[in] MUXMask  Mask comprising of an ADC channel mask, reference mask and adjustment mask
+                        *  \param[in] MUXMask  Mask comprising of an ADC channel mask, reference mask and adjustment mask.
                         */
                        static inline uint16_t ADC_GetChannelReading(const uint16_t MUXMask) ATTR_WARN_UNUSED_RESULT;
                        static inline uint16_t ADC_GetChannelReading(const uint16_t MUXMask)