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