aboutsummaryrefslogtreecommitdiff
path: root/src/sample/io_sample/ADC/OneShotMode/io_adc.h
blob: c628a5f6784ad86c089fd266395253006f532191 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
/**
*********************************************************************************************************
*               Copyright(c) 2018, Realtek Semiconductor Corporation. All rights reserved.
*********************************************************************************************************
* @file     io_adc.h
* @brief
* @details
* @author   yuan
* @date     2018-12-07
* @version  v1.0
*********************************************************************************************************
*/

#ifndef __IO_ADC_H
#define __IO_ADC_H

#ifdef __cplusplus
extern "C" {
#endif

/* Includes ------------------------------------------------------------------*/
#include "rtl876x_adc.h"
#include "rtl876x_nvic.h"
#include "rtl876x_pinmux.h"
#include "rtl876x_rcc.h"

#include "app_msg.h"
#include "board.h"

/* Defines ------------------------------------------------------------------*/
/** ADC sample channel config.
  * ADC sample channel config:P2_2,P2_3,P2_6,P2_7 and VBAT
  * ADC sample channel index select: #define ADC_Channel_Index_0         0
  *                                  #define ADC_Channel_Index_1         1
  *                                  #define ADC_Channel_Index_2         2
  *                                  #define ADC_Channel_Index_3         3

  * If ADC_SAMPLE_PIN = P2_2, then ADC_SAMPLE_CHANNEL = ADC_Channel_Index_0;
  * If ADC_SAMPLE_PIN = P2_3, then ADC_SAMPLE_CHANNEL = ADC_Channel_Index_1;
  * If ADC_SAMPLE_PIN = P2_6, then ADC_SAMPLE_CHANNEL = ADC_Channel_Index_4;
  * If ADC_SAMPLE_PIN = P2_7, then ADC_SAMPLE_CHANNEL = ADC_Channel_Index_5;
  */
#define ADC_SAMPLE_CHANNEL_0        ADC_Channel_Index_0
#define ADC_SAMPLE_CHANNEL_1        ADC_Channel_Index_1
#define ADC_SAMPLE_CHANNEL_2        ADC_Channel_Index_2
#define ADC_SAMPLE_CHANNEL_3        ADC_Channel_Index_3

/* Define schedule index. */
#define ADC_Schedule_Index_0         0
#define ADC_Schedule_Index_1         1
#define ADC_Schedule_Index_2         2
#define ADC_Schedule_Index_3         3
#define ADC_Schedule_Index_4         4
#define ADC_Schedule_Index_5         5
#define ADC_Schedule_Index_6         6
#define ADC_Schedule_Index_7         7
#define ADC_Schedule_Index_8         8
#define ADC_Schedule_Index_9         9
#define ADC_Schedule_Index_10        10
#define ADC_Schedule_Index_11        11
#define ADC_Schedule_Index_12        12
#define ADC_Schedule_Index_13        13
#define ADC_Schedule_Index_14        14
#define ADC_Schedule_Index_15        15

/** Define that how many schedules to use, max 16.
  */
#define ADC_SCHEDULE_NUM            (2)

/** ADC mode config.
  * ADC pin hardware mode: bypass mode
  *                        divide mode
  */
#define ADC_DIVIDE_MODE             0
#define ADC_BYPASS_MODE             1
#define ADC_MODE_DIVIDE_OR_BYPASS   ADC_DIVIDE_MODE

/** ADC data hardware average config,
  * only sample one channel data and onle read data from ADC_Schedule_Index_0.
  * Mode: 0: ADC data hardware average disable
  *       1: ADC data hardware average enable
  */
#define ADC_DATA_HW_AVERAGE         1

/** ADC data output mode config.
  * Mode: 0: ADC data output to schedule table
  *       1: ADC data output to fifo
  */
#define ADC_DATA_OUTPUT_TO_FIFO     0

/** ADC ADC multiple fixed interval sampling config.
  * Mode: 0: ADC sample once and stop
  *       1: ADC timing sampling
  */
#define ADC_MULTI_SAMPLE            1

#define ADC_ONE_SHOT_SAMPLE_PERIOD  (1000000-1)//100ms

/* ADC global data struct*/
typedef struct
{
    uint16_t RawData[32];
    uint8_t RawDataLen;
} ADC_Data_TypeDef;

extern ADC_Data_TypeDef ADC_Global_Data;

void global_data_adc_init(void);
void board_adc_init(void);
void adc_demo_driver_init(void);
void adc_sample_start(void);

void io_handle_adc_msg(T_IO_MSG *io_adc_msg);


#ifdef __cplusplus
}
#endif

#endif