fml_adc.h 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  1. #ifndef __FML_ADC_H__
  2. #define __FML_ADC_H__
  3. #ifdef __cplusplus
  4. extern "C" {
  5. #endif
  6. //唤醒触发一次采样,3毫秒后触发一次采样,1秒后触发一次采样,3毫秒触发一次采样,1秒后触发一次采样
  7. /*Includes ------------------------------------------------------*/
  8. #include <stdbool.h>
  9. #include <stdint.h>
  10. #include <string.h>
  11. #include "sdk_common.h"
  12. #include "nrf_gpio.h"
  13. #include "SEGGER_RTT.h"
  14. #include "usr_config.h"
  15. /*Private macro ------------------------------------------------------------------------------------------------------------------------------------*/
  16. #define FML_ADC_SAMPLE_POINT_0 0 //触发采样点0,单位ms,表明刚唤醒就采集
  17. #define FML_ADC_SAMPLE_POINT_1 3 //触发采样点1,单位ms
  18. #define FML_ADC_SAMPLE_POINT_2 100 //触发采样点2,单位ms
  19. /*STRUCTION ----------------------------------------------------*/
  20. typedef struct _fml_adc_all_channel_adc_value
  21. {
  22. int16_t channel_0_adc_value;
  23. int16_t channel_1_adc_value;
  24. int16_t channel_2_adc_value;
  25. int16_t channel_3_adc_value;
  26. int16_t channel_4_adc_value;
  27. int16_t channel_5_adc_value;
  28. int16_t channel_6_adc_value;
  29. int16_t channel_7_adc_value;
  30. } Fml_Adc_All_Channel_Adc_Value_t;
  31. //sample_point:采集时间点
  32. //all_adc_value:所有通道的值
  33. //尽量不要在回调里执行耗时很长的操作,最好就是只有设置通道的操作
  34. typedef void (*fml_adc_sample_update_notify_callback)(uint32_t sample_point, Fml_Adc_All_Channel_Adc_Value_t all_adc_value);
  35. /*API -------------------------------------------------------*/
  36. /**
  37. @brief 初始化adc功能模块
  38. @param 无
  39. @return 错误代码 - [out] -1失败,0成功
  40. */
  41. int fml_adc_Init(void);
  42. /**
  43. @brief adc采样更新通知回调注册
  44. @param cb - [in] 回调函数注册
  45. @return 错误代码 - [out] -1失败,0成功
  46. */
  47. int fml_adc_sample_update_notify_register(fml_adc_sample_update_notify_callback cb);
  48. /**
  49. @brief adc读值
  50. @param channel - [in] 需要读取的通道
  51. @param value - [out] 返回通道的值
  52. @return 错误代码 - [out] -1失败,0成功
  53. */
  54. int fml_adc_get_value(uint32_t channel,int16_t *value);
  55. /**
  56. @brief 设置ADC通道
  57. @param pin - [in] 需要设置的引脚
  58. @param channel - [in] 需要设置的通道
  59. @param pin_pull - [in] 需要设置的通道上下拉
  60. @return 错误代码 - [out] -1失败,0成功
  61. */
  62. int fml_adc_set_pin_channel(uint32_t pin, uint32_t channel, nrf_gpio_pin_pull_t pin_pull);
  63. /**
  64. @brief 移除ADC通道
  65. @param pin - [in] 需要移除的引脚
  66. @param channel - [in] 需要移除的通道
  67. @return 错误代码 - [out] -1失败,0成功
  68. */
  69. int fml_adc_remove_pin_channel(uint32_t pin, uint32_t channel);
  70. #ifdef __cplusplus
  71. }
  72. #endif
  73. #endif