adc_demo.c 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  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. #include <rtthread.h>
  11. #include <atmel_start.h>
  12. #include "adc_demo.h"
  13. #ifdef SAM_ADC_EXAMPLE
  14. #if defined(SOC_SAMC21) || defined(SOC_SAML10)
  15. #define ADC_RESOLUTION_12BIT ADC_CTRLC_RESSEL_12BIT_Val
  16. #define ADC_RESOLUTION_16BIT ADC_CTRLC_RESSEL_16BIT_Val
  17. #elif defined(SOC_SAME54)
  18. #define ADC_RESOLUTION_12BIT ADC_CTRLB_RESSEL_12BIT_Val
  19. #define ADC_RESOLUTION_16BIT ADC_CTRLB_RESSEL_16BIT_Val
  20. #elif defined(SOC_SAME70)
  21. #define ADC_RESOLUTION_12BIT AFEC_EMR_RES_NO_AVERAGE_Val
  22. #define ADC_RESOLUTION_16BIT AFEC_EMR_RES_OSR256_Val
  23. #else
  24. #error "ADC undefined SOC Platform"
  25. #endif
  26. /**
  27. * @brief Call this function will run ADC test code.
  28. *
  29. * @note Test code will try to read ADC conversion result.
  30. *
  31. * @param None.
  32. *
  33. * @return RT_OK or -RT_ERROR.
  34. */
  35. rt_err_t adc_demo_run(void)
  36. {
  37. rt_uint8_t buffer[2];
  38. /* enable ADC driver module */
  39. adc_sync_enable_channel(&ADC_0, 0);
  40. adc_sync_read_channel(&ADC_0, 0, buffer, 2);
  41. #ifndef RT_USING_FINSH
  42. rt_kprintf("buf[0]=0x%02X buf[1]=0x%02X\r\n", buffer[0], buffer[1]);
  43. #endif
  44. /* ADC 16-bit resolution */
  45. adc_sync_disable_channel(&ADC_0, 0);
  46. adc_sync_set_resolution(&ADC_0, ADC_RESOLUTION_16BIT);
  47. adc_sync_enable_channel(&ADC_0, 0);
  48. #ifndef RT_USING_FINSH
  49. rt_kprintf("buf[0]=0x%02X buf[1]=0x%02X\r\n", buffer[0], buffer[1]);
  50. #endif
  51. /* ADC 12-bit resolution */
  52. adc_sync_disable_channel(&ADC_0, 0);
  53. adc_sync_set_resolution(&ADC_0, ADC_RESOLUTION_12BIT);
  54. adc_sync_enable_channel(&ADC_0, 0);
  55. #ifndef RT_USING_FINSH
  56. rt_kprintf("buf[0]=0x%02X buf[1]=0x%02X\r\n", buffer[0], buffer[1]);
  57. #endif
  58. return RT_EOK;
  59. }
  60. #endif
  61. /*@}*/