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
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
|
/* Copyright 2012 Freescale Semiconductor, Inc.
*
* Freescale Faraday Quad ADC driver
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License.
*/
#ifndef MVF_ADC_H
#define MVF_ADC_H
#define ADC_CFG 0x14 /* Configuration Register */
/* Input Clock Select 1-0, Divide ratio 6-5 */
#define CLEAR_CLK_BIT 0x63
#define BUSCLK_SEL 0x00
#define BUSCLK2_SEL 0x01
#define ALTCLK_SEL 0x02
#define ADACK_SEL 0x03
#define CLK_DIV2 0x20
#define CLK_DIV4 0x40
#define CLK_DIV8 0x60
/* Conversion RES Mode Selection 3-2 */
#define CLEAR_MODE_BIT 0xC
#define BIT8 0x00
#define BIT10 0x01
#define BIT12 0x10
/* Low-Power Configuration 7 */
#define CLEAR_ADLPC_BIT 0x80
#define ADLPC_EN 0x80
/* Long/Short Sample Time Configuration 4,9-8 */
#define CLEAR_LSTC_BIT 0x310
#define ADLSMP_LONG 0x10
#define ADSTS_SHORT 0x100
#define ADSTS_NORMAL 0x200
#define ADSTS_LONG 0x300
/* High speed operation 10 */
#define CLEAR_ADHSC_BIT 0x400
#define ADHSC_EN 0x400
/* Voltage Reference Selection 12-11 */
#define CLEAR_REFSEL_BIT 0x1800
#define REFSEL_VALT 0x100
#define REFSEL_VBG 0x1000
/* Conversion Trigger Select 13 */
#define CLEAR_ADTRG_BIT 0x2000
#define ADTRG_HARD 0x2000
/* Hardware Average select 15-14 */
#define CLEAR_AVGS_BIT 0xC000
#define AVGS_8 0x4000
#define AVGS_16 0x8000
#define AVGS_32 0xC000
/* Data Overwrite Enable 16 */
#define CLEAR_OVWREN_BIT 0x10000
#define OVWREN 0x10000
#define ADC_GC 0x18 /* General control register */
/* Asynchronous clock output 0 */
#define CLEAR_ADACKEN_BIT 0x1
#define ADACKEN 0x1
/* DMA Enable 1 */
#define CLEAR_DMAEN_BIT 0x2
#define DMAEN 0x2
/* Compare Function Rang Enable 2*/
#define CLEAR_ACREN_BIT 0x4
#define ACREN 0x4
/* Compare Function Greater Than Enable 3 */
#define CLEAR_ACFGT_BIT 0x8
#define ACFGT 0x8
/* Enable compare function 4 */
#define CLEAR_ACFE_BIT 0x10
#define ACFE 0x10
/* Hardware Average Enable 5 */
#define CLEAR_AVGE_BIT 0x20
#define AVGEN 0x20
/* Continue Conversion Enable 6 */
#define CLEAR_ADCO_BIT 0x40
#define ADCON 0x40
#define ADC_HC0 0x00/* Control register for hardware triggers 0 */
#define ADC_HC1 0x04/* Control register for hardware triggers 1 */
#define IRQ_EN 0x80
#define ADCHC0(x) ((x)&0xF)
#define AIEN1 0x00000080
#define COCOA 0x00000000
#define ADC_HS 0x08/* Status register for HW triggers */
#define ADC_R0 0x0c/* Data result register for HW triggers */
#define ADC_R1 0x10/* Data result register for HW triggers */
#define ADC_GS 0x1c/* General status register (ADC0_GS) */
#define ADC_CV 0x20/* Compare value register (ADC0_CV) */
/* Offset correction value register (ADC0_OFS) */
#define ADC_OFS 0x24
#define ADC_CAL 0x28/* Calibration value register (ADC0_CAL) */
#define ADC_PCTL 0x30/* Pin control register (ADC0_PCTL) */
/* init */
#define CLECFG16 0x1ffff
#define SETCFG 0x10098
#define CLEHC0 0xff
#define SETHC0 0x85
#define CLEPCTL23 0xffffff
#define SETPCTL5 0x20
#define ADC_INIT _IO('p', 0xb1)
#define ADC_CONVERT _IO('p', 0xb2)
#define ADC_CONFIGURATION _IOWR('p', 0xb3, struct adc_feature)
#define ADC_REG_CLIENT _IOWR('p', 0xb4, struct adc_feature)
enum clk_sel {
ADCIOC_BUSCLK_SET,
ADCIOC_ALTCLK_SET,
ADCIOC_ADACK_SET,
};
#define ADCIOC_LPOFF_SET 0
#define ADCIOC_LPON_SET 1
#define ADCIOC_HSON_SET 1
#define ADCIOC_HSOFF_SET 0
enum vol_ref {
ADCIOC_VR_VREF_SET,
ADCIOC_VR_VALT_SET,
ADCIOC_VR_VBG_SET,
};
#define ADCIOC_SOFTTS_SET 0
#define ADCIOC_HARDTS_SET 1
#define ADCIOC_HA_DIS 0
#define ADCIOC_HA_SET 1
#define ADCIOC_DOEON_SET 1
#define ADCIOC_DOEOFF_SET 0
#define ADCIOC_ADACKENON_SET 1
#define ADCIOC_ADACKENOFF_SET 0
#define ADCIDC_DMAON_SET 1
#define ADCIDC_DMAOFF_SET 0
#define ADCIOC_CCEOFF_SET 0
#define ADCIOC_CCEON_SET 1
#define ADCIOC_ACFEON_SET 1
#define ADCIOC_ACFEOFF_SET 0
#define ADCIOC_ACFGTON_SET 1
#define ADCIOC_ACFGTOFF_SET 0
#define ADCIOC_ACRENON_SET 1
#define ADCIOC_ACRENOFF_SET 0
enum adc_channel {
ADC0,
ADC1,
ADC2,
ADC3,
ADC4,
ADC5,
ADC6,
ADC7,
ADC8,
ADC9,
ADC10,
ADC11,
ADC12,
ADC13,
ADC14,
ADC15,
};
struct adc_feature {
enum adc_channel channel;
enum clk_sel clk_sel;/* clock select */
int clk_div_num;/* clock divide number*/
int res_mode;/* resolution sample */
int sam_time;/* sample time */
int lp_con;/* low power configuration */
int hs_oper;/* high speed operation */
enum vol_ref vol_ref;/* voltage reference */
int tri_sel;/* trigger select */
int ha_sel;/* hardware average select */
int ha_sam;/* hardware average sample */
int do_ena;/* data overwrite enable */
int ac_ena;/* Asynchronous clock output enable */
int dma_ena;/* DMA enable */
int cc_ena;/* continue converdion enable */
int compare_func_ena;/* enable compare function */
int range_ena;/* range enable */
int greater_ena;/* greater than enable */
unsigned int result0, result1;
};
#endif
|