1 #ifndef __SWM320_ADC_H__
2 #define __SWM320_ADC_H__
3 
4 typedef struct {
5     uint8_t clk_src;        //ADC转换时钟源:ADC_CLKSRC_HRC、ADC_CLKSRC_VCO_DIV16、ADC_CLKSRC_VCO_DIV32、ADC_CLKSRC_VCO_DIV32
6     uint8_t clk_div;        //ADC转换时钟分频,取值1--31
7     uint8_t pga_ref;        //PGA基准:PGA_REF_INTERNAL、PGA_REF_EXTERNAL
8     uint8_t channels;       //ADC转换通道选中,ADC_CH0、ADC_CH1、... ... 、ADC_CH7及其组合(即“按位或”运算)
9     uint8_t samplAvg;       //采样取平均,触发启动ADC转换后,ADC在一个通道上连续采样、转换多次,并将它们的平均值作为该通道转换结果
10     uint8_t trig_src;       //ADC触发方式:ADC_TRIGSRC_SW、ADC_TRIGSRC_PWM、ADC_TRIGSRC_TIMR2、ADC_TRIGSRC_TIMR3
11     uint8_t Continue;       //在软件触发模式下:1 连续转换模式,启动后一直采样、转换,直到软件清除START位
12                             //                  0 单次转换模式,转换完成后START位自动清除停止转换
13     uint8_t EOC_IEn;        //EOC中断使能,可针对每个通道设置,其有效值为ADC_CH0、ADC_CH1、... ... 、ADC_CH7及其组合(即“按位或”运算)
14     uint8_t OVF_IEn;        //OVF中断使能,可针对每个通道设置,其有效值为ADC_CH0、ADC_CH1、... ... 、ADC_CH7及其组合(即“按位或”运算)
15     uint8_t HFULL_IEn;      //FIFO半满中断使能,可针对每个通道设置,其有效值为ADC_CH0、ADC_CH1、... ... 、ADC_CH7及其组合(即“按位或”运算)
16     uint8_t FULL_IEn;       //FIFO  满中断使能,可针对每个通道设置,其有效值为ADC_CH0、ADC_CH1、... ... 、ADC_CH7及其组合(即“按位或”运算)
17 } ADC_InitStructure;
18 
19 #define ADC_CH0     0x01
20 #define ADC_CH1     0x02
21 #define ADC_CH2     0x04
22 #define ADC_CH3     0x08
23 #define ADC_CH4     0x10
24 #define ADC_CH5     0x20
25 #define ADC_CH6     0x40
26 #define ADC_CH7     0x80
27 
28 #define ADC_CLKSRC_HRC          1
29 #define ADC_CLKSRC_VCO_DIV16    2
30 #define ADC_CLKSRC_VCO_DIV32    3
31 #define ADC_CLKSRC_VCO_DIV64    4
32 
33 #define ADC_AVG_SAMPLE1         0
34 #define ADC_AVG_SAMPLE2         1   //一次启动连续采样、转换2次,并计算两次结果的平均值作为转换结果
35 #define ADC_AVG_SAMPLE4         3
36 #define ADC_AVG_SAMPLE8         7
37 #define ADC_AVG_SAMPLE16        15
38 
39 #define ADC_TRIGSRC_SW          0   //软件触发,即ADC->START.GO写1启动转换
40 #define ADC_TRIGSRC_PWM         1
41 
42 #define PGA_REF_INTERNAL        1   //PGA输入共模电平由内部电路产生,ADC_REFP和ADC_REFN可悬空
43 #define PGA_REF_EXTERNAL        0   //PGA输入共模电平由外部引脚提供,(ADC_REFP + ADC_REFN) 电平值须与量程相同
44 
45 
46 void ADC_Init(ADC_TypeDef * ADCx, ADC_InitStructure * initStruct);      //ADC模数转换器初始化
47 void ADC_Open(ADC_TypeDef * ADCx);                          //ADC开启,可以软件启动、或硬件触发ADC转换
48 void ADC_Close(ADC_TypeDef * ADCx);                         //ADC关闭,无法软件启动、或硬件触发ADC转换
49 void ADC_Start(ADC_TypeDef * ADCx);                         //启动指定ADC,开始模数转换
50 void ADC_Stop(ADC_TypeDef * ADCx);                          //关闭指定ADC,停止模数转换
51 
52 uint32_t ADC_Read(ADC_TypeDef * ADCx, uint32_t chn);        //从指定通道读取转换结果
53 uint32_t ADC_IsEOC(ADC_TypeDef * ADCx, uint32_t chn);       //指定通道是否End Of Conversion
54 
55 void ADC_ChnSelect(ADC_TypeDef * ADCx, uint32_t chns);
56 
57 
58 void ADC_IntEOCEn(ADC_TypeDef * ADCx, uint32_t chn);        //转换完成中断使能
59 void ADC_IntEOCDis(ADC_TypeDef * ADCx, uint32_t chn);       //转换完成中断禁止
60 void ADC_IntEOCClr(ADC_TypeDef * ADCx, uint32_t chn);       //转换完成中断标志清除
61 uint32_t ADC_IntEOCStat(ADC_TypeDef * ADCx, uint32_t chn);  //转换完成中断状态
62 
63 void ADC_IntOVFEn(ADC_TypeDef * ADCx, uint32_t chn);        //数据溢出中断使能
64 void ADC_IntOVFDis(ADC_TypeDef * ADCx, uint32_t chn);       //数据溢出中断禁止
65 void ADC_IntOVFClr(ADC_TypeDef * ADCx, uint32_t chn);       //数据溢出中断标志清除
66 uint32_t ADC_IntOVFStat(ADC_TypeDef * ADCx, uint32_t chn);  //数据溢出中断状态
67 
68 void ADC_IntHFULLEn(ADC_TypeDef * ADCx, uint32_t chn);      //FIFO半满中断使能
69 void ADC_IntHFULLDis(ADC_TypeDef * ADCx, uint32_t chn);     //FIFO半满中断禁止
70 void ADC_IntHFULLClr(ADC_TypeDef * ADCx, uint32_t chn);     //FIFO半满中断标志清除
71 uint32_t ADC_IntHFULLStat(ADC_TypeDef * ADCx, uint32_t chn);//FIFO半满中断状态
72 
73 void ADC_IntFULLEn(ADC_TypeDef * ADCx, uint32_t chn);       //FIFO满中断使能
74 void ADC_IntFULLDis(ADC_TypeDef * ADCx, uint32_t chn);      //FIFO满中断禁止
75 void ADC_IntFULLClr(ADC_TypeDef * ADCx, uint32_t chn);      //FIFO满中断标志清除
76 uint32_t ADC_IntFULLStat(ADC_TypeDef * ADCx, uint32_t chn); //FIFO满中断状态
77 
78 
79 #endif //__SWM320_ADC_H__
80