]> git.sur5r.net Git - freertos/blobdiff - FreeRTOS/Demo/CORTEX_A5_SAMA5D2x_Xplained_IAR/AtmelFiles/drivers/peripherals/adc.h
Add SAMA5D2 Xplained IAR demo.
[freertos] / FreeRTOS / Demo / CORTEX_A5_SAMA5D2x_Xplained_IAR / AtmelFiles / drivers / peripherals / adc.h
diff --git a/FreeRTOS/Demo/CORTEX_A5_SAMA5D2x_Xplained_IAR/AtmelFiles/drivers/peripherals/adc.h b/FreeRTOS/Demo/CORTEX_A5_SAMA5D2x_Xplained_IAR/AtmelFiles/drivers/peripherals/adc.h
new file mode 100644 (file)
index 0000000..62d5b5a
--- /dev/null
@@ -0,0 +1,399 @@
+/* ----------------------------------------------------------------------------\r
+ *         SAM Software Package License\r
+ * ----------------------------------------------------------------------------\r
+ * Copyright (c) 2015, Atmel Corporation\r
+ *\r
+ * All rights reserved.\r
+ *\r
+ * Redistribution and use in source and binary forms, with or without\r
+ * modification, are permitted provided that the following conditions are met:\r
+ *\r
+ * - Redistributions of source code must retain the above copyright notice,\r
+ * this list of conditions and the disclaimer below.\r
+ *\r
+ * Atmel's name may not be used to endorse or promote products derived from\r
+ * this software without specific prior written permission.\r
+ *\r
+ * DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR\r
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\r
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE\r
+ * DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,\r
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\r
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,\r
+ * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\r
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\r
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,\r
+ * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
+ * ----------------------------------------------------------------------------\r
+ */\r
+\r
+/**\r
+ *  \file\r
+ *\r
+ *  \section Purpose\r
+ *\r
+ *  Interface for configuration the Analog-to-Digital Converter (ADC) peripheral.\r
+ *\r
+ *  \section Usage\r
+ *\r
+ *  -# Configurate the pins for ADC.\r
+ *  -# Initialize the ADC with adc_initialize().\r
+ *  -# Set ADC clock and timing with adc_set_clock() and adc_set_timing().\r
+ *  -# Select the active channel using adc_enable_channel().\r
+ *  -# Start the conversion with adc_start_conversion().\r
+ *  -# Wait the end of the conversion by polling status with adc_get_status().\r
+ *  -# Finally, get the converted data using adc_get_converted_data() or adc_get_last_converted_data().\r
+ *\r
+*/\r
+#ifndef _ADC_\r
+#define _ADC_\r
+\r
+/*----------------------------------------------------------------------------\r
+ *        Headers\r
+ *----------------------------------------------------------------------------*/\r
+#include <assert.h>\r
+#include <stdint.h>\r
+\r
+/*------------------------------------------------------------------------------\r
+ *         Definitions\r
+ *------------------------------------------------------------------------------*/\r
+\r
+/* Max. ADC Clock Frequency (Hz) */\r
+#define ADC_CLOCK_MAX   20000000\r
+\r
+/* Max. normal ADC startup time (us) */\r
+#define ADC_STARTUP_NORMAL_MAX     40\r
+/* Max. fast ADC startup time (us) */\r
+#define ADC_STARTUP_FAST_MAX       12\r
+\r
+/* Definitions for ADC channels */\r
+#define ADC_CHANNEL_0  0\r
+#define ADC_CHANNEL_1  1\r
+#define ADC_CHANNEL_2  2\r
+#define ADC_CHANNEL_3  3\r
+#define ADC_CHANNEL_4  4\r
+#define ADC_CHANNEL_5  5\r
+#define ADC_CHANNEL_6  6\r
+#define ADC_CHANNEL_7  7\r
+#define ADC_CHANNEL_8  8\r
+#define ADC_CHANNEL_9  9\r
+#define ADC_CHANNEL_10 10\r
+#define ADC_CHANNEL_11 11\r
+\r
+#ifdef __cplusplus\r
+extern "C" {\r
+#endif\r
+\r
+/*------------------------------------------------------------------------------\r
+ *         Macros function of register access\r
+ *------------------------------------------------------------------------------*/\r
+\r
+#define adc_get_mode_reg()             (ADC->ADC_MR)\r
+\r
+#define adc_start_conversion()         (ADC->ADC_CR = ADC_CR_START)\r
+\r
+#define adc_enable_channel(channel)  {                 \\r
+               ADC->ADC_CHER = (1 << (channel));       \\r
+       }\r
+\r
+#define adc_disable_channel(channel) {                 \\r
+               ADC->ADC_CHDR = (1 << (channel));       \\r
+       }\r
+\r
+#define adc_enable_interrupt(mode)   {         \\r
+               ADC->ADC_IER = (mode);          \\r
+       }\r
+\r
+#define adc_disable_interrupt(mode)  {         \\r
+               ADC->ADC_IDR = (mode);          \\r
+       }\r
+\r
+#define adc_set_channel_gain(mode)    {        \\r
+               ADC->ADC_CGR = mode;            \\r
+       }\r
+\r
+#define adc_enable_data_ready_it()     (ADC->ADC_IER = ADC_IER_DRDY)\r
+\r
+#define adc_get_status()               (ADC->ADC_ISR)\r
+\r
+#define adc_get_compare_mode()         ((ADC->ADC_EMR)& (ADC_EMR_CMPMODE_Msk))\r
+\r
+#define adc_get_channel_status()       (ADC->ADC_CHSR)\r
+\r
+#define adc_interrupt_mask_status()    (ADC->ADC_IMR)\r
+\r
+#define adc_get_last_converted_data()  (ADC->ADC_LCDR)\r
+\r
+#define adc_get_overrun_status()               (ADC->ADC_OVER)\r
+\r
+/*------------------------------------------------------------------------------\r
+ *         Exported functions\r
+ *------------------------------------------------------------------------------*/\r
+\r
+/**\r
+ * \brief Returns the number of ADC channels\r
+ */\r
+extern uint32_t adc_num_channels(void);\r
+\r
+/**\r
+ * \brief Initialize the ADC controller\r
+ */\r
+extern void adc_initialize(void);\r
+\r
+/**\r
+ * \brief Set ADC clock.\r
+ *\r
+ * \param clk Desired ADC clock frequency.\r
+ *\r
+ * \return ADC clock\r
+ */\r
+extern uint32_t adc_set_clock(uint32_t clk);\r
+\r
+/**\r
+ * \brief Enable ADC interrupt sources\r
+ *\r
+ * \param mask bitmask of the sources to enable\r
+ */\r
+extern void adc_enable_it(uint32_t mask);\r
+\r
+/**\r
+ * \brief Disable ADC interrupt sources\r
+ *\r
+ * \param mask bitmask of the sources to disable\r
+ */\r
+extern void adc_disable_it(uint32_t mask);\r
+\r
+/**\r
+ * \brief Set ADC timing.\r
+ *\r
+ * \param startup startup value\r
+ * \param tracking tracking value\r
+ * \param settling settling value\r
+ */\r
+extern void adc_set_timing(uint32_t startup, uint32_t tracking,\r
+                          uint32_t settling);\r
+\r
+/**\r
+ * Sets the trigger mode to following:\r
+ * - \ref ADC_TRGR_TRGMOD_NO_TRIGGER\r
+ * - \ref ADC_TRGR_TRGMOD_EXT_TRIG_RISE\r
+ * - \ref ADC_TRGR_TRGMOD_EXT_TRIG_FALL\r
+ * - \ref ADC_TRGR_TRGMOD_EXT_TRIG_ANY\r
+ * - \ref ADC_TRGR_TRGMOD_PEN_TRIG\r
+ * - \ref ADC_TRGR_TRGMOD_PERIOD_TRIG\r
+ * - \ref ADC_TRGR_TRGMOD_CONTINUOUS\r
+ * \param mode Trigger mode.\r
+ */\r
+extern void adc_set_trigger_mode(uint32_t mode);\r
+\r
+/**\r
+ * \brief Enable/Disable sleep mode.\r
+ *\r
+ * \param enable Enable/Disable sleep mode.\r
+ */\r
+extern void adc_set_sleep_mode(uint8_t enable);\r
+\r
+extern void adc_set_fast_wakeup(uint8_t enable);\r
+\r
+/**\r
+ * \brief Enable/Disable seqnence mode.\r
+ *\r
+ * \param enable Enable/Disable seqnence mode.\r
+ */\r
+extern void adc_set_sequence_mode(uint8_t enable);\r
+\r
+/**\r
+ * \brief Set channel sequence.\r
+ *\r
+ * \param seq1 Sequence 1 ~ 8  channel number.\r
+ * \param seq2 Sequence 9 ~ 16 channel number.\r
+ */\r
+extern void adc_set_sequence(uint32_t seq1, uint32_t seq2);\r
+\r
+/**\r
+ * \brief Set channel sequence by given channel list.\r
+ *\r
+ * \param channel_list Channel list.\r
+ * \param len  Number of channels in list.\r
+ */\r
+extern void adc_set_sequence_by_list(uint8_t channel_list[],\r
+                                    uint8_t len);\r
+\r
+/**\r
+ * \brief Set "TAG" mode, show channel number in last data or not.\r
+ *\r
+ * \param enable Enable/Disable TAG value.\r
+ */\r
+extern void adc_set_tag_enable(uint8_t enable);\r
+\r
+/**\r
+ * Configure extended mode register\r
+ * \param mode ADC extended mode.\r
+ */\r
+extern void adc_configure_ext_mode(uint32_t mode);\r
+\r
+/**\r
+ * \brief Set compare channel.\r
+ *\r
+ * \param channel channel number to be set,16 for all channels\r
+ */\r
+extern void adc_set_compare_channel(uint32_t channel);\r
+\r
+/**\r
+ * \brief Set compare mode.\r
+ *\r
+ * \param mode compare mode\r
+ */\r
+extern void adc_set_compare_mode(uint32_t mode);\r
+\r
+/**\r
+ * \brief Set comparsion window.\r
+ *\r
+ * \param window Comparison Window\r
+ */extern void adc_set_comparison_window(uint32_t window);\r
+\r
+/**\r
+ * \brief Check if ADC configuration is right.\r
+ *\r
+ * \return 0 if check ok, others if not ok.\r
+ */\r
+extern uint8_t adc_check_configuration(void);\r
+\r
+/**\r
+ * \brief Return the Channel Converted Data\r
+ *\r
+ * \param channel channel to get converted value\r
+ */\r
+extern uint32_t adc_get_converted_data(uint32_t channel);\r
+\r
+#ifdef CONFIG_HAVE_ADC_INPUT_OFFSET\r
+/**\r
+ * \brief Enable differential input for the specified channel.\r
+ *\r
+ * \param channel ADC channel number.\r
+ */\r
+extern void adc_enable_channel_differential_input (uint32_t channel);\r
+\r
+/**\r
+ * \brief Disable differential input for the specified channel.\r
+ *\r
+ * \param channel ADC channel number.\r
+ */\r
+extern void adc_disable_channel_differential_input(uint32_t channel);\r
+\r
+/**\r
+ * \brief Enable analog signal offset for the specified channel.\r
+ *\r
+ * \param channel ADC channel number.\r
+ */\r
+extern void adc_enable_channel_input_offset (uint32_t channel);\r
+\r
+/**\r
+ * \brief Disable analog signal offset for the specified channel.\r
+ *\r
+ * \param channel ADC channel number.\r
+ */\r
+extern void adc_disable_channel_input_offset (uint32_t channel);\r
+#endif /* CONFIG_HAVE_ADC_INPUT_OFFSET */\r
+\r
+#ifdef CONFIG_HAVE_ADC_INPUT_GAIN\r
+/**\r
+ * \brief Configure input gain for the specified channel.\r
+ *\r
+ * \param channel ADC channel number.\r
+ * \param gain Gain value for the input.\r
+ */\r
+extern void adc_set_channel_input_gain (uint32_t channel, uint32_t gain);\r
+#endif /* CONFIG_HAVE_ADC_INPUT_GAIN */\r
+\r
+/**\r
+ * Sets the average of the touch screen ADC. The mode can be:\r
+ * - \ref ADC_TSMR_TSAV_NO_FILTER (No filtering)\r
+ * - \ref ADC_TSMR_TSAV_AVG2CONV (Average 2 conversions)\r
+ * - \ref ADC_TSMR_TSAV_AVG4CONV (Average 4 conversions)\r
+ * - \ref ADC_TSMR_TSAV_AVG8CONV (Average 8 conversions)\r
+ * \param avg_2_conv Average mode for touch screen\r
+ */\r
+extern void adc_set_ts_average(uint32_t avg_2_conv);\r
+\r
+/**\r
+ * Return X measurement position value.\r
+ */\r
+extern uint32_t adc_get_ts_xposition(void);\r
+\r
+/**\r
+ * Return Y measurement position value.\r
+ */\r
+extern uint32_t adc_get_ts_yposition(void);\r
+\r
+/**\r
+ * Return Z measurement position value.\r
+ */\r
+extern uint32_t adc_get_ts_pressure(void);\r
+\r
+/**\r
+ * Sets the touchscreen pan debounce time.\r
+ * \param time Debounce time in nS.\r
+ */\r
+extern void adc_set_ts_debounce(uint32_t time);\r
+\r
+/**\r
+ * Enable/Disable touch screen pen detection.\r
+ * \param enable If true, pen detection is enabled;\r
+ *               in normal mode otherwise.\r
+ */\r
+extern void adc_set_ts_pen_detect(uint8_t enable);\r
+\r
+/**\r
+ * Sets the ADC startup time.\r
+ * \param startup  Startup time in uS.\r
+ */\r
+extern void adc_set_startup_time(uint32_t startup);\r
+\r
+/**\r
+ * Set ADC tracking time\r
+ * \param dwNs  Tracking time in nS.\r
+ */\r
+extern void adc_set_tracking_time(uint32_t dwNs);\r
+\r
+/**\r
+ * Sets the trigger period.\r
+ * \param period Trigger period in nS.\r
+ */\r
+extern void adc_set_trigger_period(uint32_t period);\r
+\r
+/**\r
+ * Sets the operation mode of the touch screen ADC. The mode can be:\r
+ * - \ref ADC_TSMR_TSMODE_NONE (TSADC off)\r
+ * - \ref ADC_TSMR_TSMODE_4_WIRE_NO_PM\r
+ * - \ref ADC_TSMR_TSMODE_4_WIRE (CH 0~3 used)\r
+ * - \ref ADC_TSMR_TSMODE_5_WIRE (CH 0~4 used)\r
+ * \param mode Desired mode\r
+ */\r
+extern void adc_set_ts_mode(uint32_t mode);\r
+\r
+/**\r
+ * Start screen calibration (VDD/GND measurement)\r
+ */\r
+extern void adc_ts_calibration(void);\r
+\r
+/**\r
+ * \brief Set ADC trigger.\r
+ *\r
+ * \param trigger Trigger selection\r
+ */\r
+extern void adc_set_trigger(uint32_t trigger);\r
+\r
+#ifdef CONFIG_HAVE_ADC_LOW_RES\r
+/**\r
+ * \brief Enable/Disable low resolution.\r
+ *\r
+ * \param enable Enable/Disable low resolution.\r
+ */\r
+extern void adc_set_low_resolution(uint8_t enable);\r
+#endif /* CONFIG_HAVE_ADC_LOW_RES */\r
+\r
+#ifdef __cplusplus\r
+}\r
+#endif\r
+#endif /* _ADC_ */\r