1 /*
2  * Copyright (c) 2006-2023, RT-Thread Development Team
3  *
4  * SPDX-License-Identifier: Apache-2.0
5  *
6  * Change Logs:
7  * Date        Author    Email                    Notes
8  * 2022-04-16  Kevin.Liu kevin.liu.mchp@gmail.com First Release
9  */
10 
11 #include <rtthread.h>
12 
13 #include <atmel_start.h>
14 
15 #include "adc_demo.h"
16 
17 #ifdef SAM_ADC_EXAMPLE
18 
19 #if defined(SOC_SAMC21) || defined(SOC_SAML10)
20 #define ADC_RESOLUTION_12BIT    ADC_CTRLC_RESSEL_12BIT_Val
21 #define ADC_RESOLUTION_16BIT    ADC_CTRLC_RESSEL_16BIT_Val
22 #elif defined(SOC_SAME54)
23 #define ADC_RESOLUTION_12BIT    ADC_CTRLB_RESSEL_12BIT_Val
24 #define ADC_RESOLUTION_16BIT    ADC_CTRLB_RESSEL_16BIT_Val
25 #elif defined(SOC_SAME70)
26 #define ADC_RESOLUTION_12BIT    AFEC_EMR_RES_NO_AVERAGE_Val
27 #define ADC_RESOLUTION_16BIT    AFEC_EMR_RES_OSR256_Val
28 #else
29 #error "ADC undefined SOC Platform"
30 #endif
31 
32 /**
33  * @brief    Call this function will run ADC test code.
34  *
35  * @note     Test code will try to read ADC conversion result.
36  *
37  * @param    None.
38  *
39  * @return   RT_OK or -RT_ERROR.
40  */
41 
adc_demo_run(void)42 rt_err_t adc_demo_run(void)
43 {
44     rt_uint8_t buffer[2];
45 
46     /* enable ADC driver module */
47     adc_sync_enable_channel(&ADC_0, 0);
48 
49     adc_sync_read_channel(&ADC_0, 0, buffer, 2);
50 #ifndef RT_USING_FINSH
51     rt_kprintf("buf[0]=0x%02X buf[1]=0x%02X\r\n", buffer[0], buffer[1]);
52 #endif
53 
54     /* ADC 16-bit resolution */
55     adc_sync_disable_channel(&ADC_0, 0);
56     adc_sync_set_resolution(&ADC_0,  ADC_RESOLUTION_16BIT);
57     adc_sync_enable_channel(&ADC_0,  0);
58 #ifndef RT_USING_FINSH
59     rt_kprintf("buf[0]=0x%02X buf[1]=0x%02X\r\n", buffer[0], buffer[1]);
60 #endif
61 
62     /* ADC 12-bit resolution */
63     adc_sync_disable_channel(&ADC_0, 0);
64     adc_sync_set_resolution(&ADC_0,  ADC_RESOLUTION_12BIT);
65     adc_sync_enable_channel(&ADC_0,  0);
66 #ifndef RT_USING_FINSH
67     rt_kprintf("buf[0]=0x%02X buf[1]=0x%02X\r\n", buffer[0], buffer[1]);
68 #endif
69 
70     return RT_EOK;
71 }
72 #endif
73 
74 /*@}*/
75