aboutsummaryrefslogtreecommitdiffstats
path: root/LUFA/Drivers/Peripheral/AVRU4U6U7/ADC.h
diff options
context:
space:
mode:
authorDean Camera <dean@fourwalledcubicle.com>2010-05-18 12:51:31 +0000
committerDean Camera <dean@fourwalledcubicle.com>2010-05-18 12:51:31 +0000
commitd3699d02619061de902eb7da620d0288a56c51f9 (patch)
tree0138690bfdcc115983a48cddb2eb049a36606816 /LUFA/Drivers/Peripheral/AVRU4U6U7/ADC.h
parentf13bc35a199f3840aaaabecf5f8616f20da7c262 (diff)
downloadlufa-d3699d02619061de902eb7da620d0288a56c51f9.tar.gz
lufa-d3699d02619061de902eb7da620d0288a56c51f9.tar.bz2
lufa-d3699d02619061de902eb7da620d0288a56c51f9.zip
Added new ADC_DisableChannel() function (thanks to Mich Davis).
Diffstat (limited to 'LUFA/Drivers/Peripheral/AVRU4U6U7/ADC.h')
-rw-r--r--LUFA/Drivers/Peripheral/AVRU4U6U7/ADC.h43
1 files changed, 43 insertions, 0 deletions
diff --git a/LUFA/Drivers/Peripheral/AVRU4U6U7/ADC.h b/LUFA/Drivers/Peripheral/AVRU4U6U7/ADC.h
index 00c18e786..f8f2b4325 100644
--- a/LUFA/Drivers/Peripheral/AVRU4U6U7/ADC.h
+++ b/LUFA/Drivers/Peripheral/AVRU4U6U7/ADC.h
@@ -287,6 +287,49 @@
#endif
}
+ /** Deconfigures 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.