HWA
Bare metal programming with style
adb_2.h
Go to the documentation of this file.
1
2
/* This file is part of the HWA project.
3
* Copyright (c) 2012,2015 Christophe Duparquet.
4
* All rights reserved. Read LICENSE.TXT for details.
5
*/
6
12
/* Base class
13
*/
14
#include "
adx_2.h
"
15
71
#define hwa_configure__adb , _hwa_cfadb
72
73
#define _hwa_cfadb(o,a,k,...) \
74
do { \
75
_hwa_write(o,en,1);
/* turn the ADC on */
\
76
HW_BW(_hwa_cfadbck,clock,k)(o,k,__VA_ARGS__,,); \
77
} while(0)
78
79
/* Mandatory parameter 'clock'
80
*/
81
#define _hwa_cfadbck0(o,k,...) HW_E(HW_EM_AN(k,clock))
82
#define _hwa_cfadbck1(o,k,v,...) HW_BV(_hwa_cfadbck1,adxclock_,v,o)(o,v,__VA_ARGS__) // Push
83
#define _hwa_cfadbck10(v,o) HW_E(HW_EM_VAL(v,clock,(min, max, ioclk/2**(1..7)))) HW_EAT // Pop
84
#define _hwa_cfadbck11(f,v,o) _hwa_write(o,ps,f(v)); _hwa_cfadbtrg // Pop
85
86
/* Mandatory parameter 'trigger'
87
*/
88
#define _hwa_cfadbtrg(o,v,k,...) HW_BW(_hwa_cfadbtrg,trigger,k)(o,v,__VA_ARGS__)
89
#define _hwa_cfadbtrg0(o,k,...) HW_E(HW_EM_AN(k,trigger))
90
#define _hwa_cfadbtrg1(o,k,v,...) HW_B(_hwa_cfadbtrg2, _hw_par v)(o,v,__VA_ARGS__)
91
92
/* "manual" or "auto"
93
*/
94
#define _hwa_cfadbtrg20(o,v,...) HW_BV(_hwa_cfadbtrg20,adbtrg_,v,o)(o,v,__VA_ARGS__) // Push
95
#define _hwa_cfadbtrg201(_ate,_ts,o) _hwa_write(o,ate,_ate); _hwa_write(o,ts,_ts); _hwa_cfadbref
96
#define _hwa_cfadbtrg200(v,...) HW_E(HW_EM_VAL(v,trigger,(manual, auto, (int0,irq), (acmp0,irq), \
97
(counter0,compare0,irq), (counter0,overflow,irq), \
98
(counter1,compare1,irq), (counter1,overflow,irq), \
99
(counter1,capture0,irq)))); HW_EAT // Pop
100
/* IRQs
101
*/
102
#define _hwa_cfadbtrg21(o,v,...) _hwa_cfadbtrg22((HW_X(v)),o,v,__VA_ARGS__)
103
#define _hwa_cfadbtrg22(...) _hwa_cfadbtrg23(__VA_ARGS__)
104
#define _hwa_cfadbtrg23(d,...) HW_BW(_hwa_cfadbtrg3,_irq,HW_RP d)(d,__VA_ARGS__)
105
#define _hwa_cfadbtrg30(d,o,v,...) _hwa_cfadbtrg200(v,)(o,v,__VA_ARGS__) // Push
106
#define _hwa_cfadbtrg31(d,o,v,...) HW_BV(_hwa_cfadbtrg20,adbtrg_,HW_A1 d,)(o,v,__VA_ARGS__) // Push
107
108
#define _hw_adbtrg_manual , 0, 0
/* , ate, ts */
109
#define _hw_adbtrg_auto , 1, 0
110
#define _hw_adbtrg_acmp0_irq , 1, 1
111
#define _hw_adbtrg_int0_irq , 1, 2
112
#define _hw_adbtrg_counter0_irq_compare0 , 1, 3
113
#define _hw_adbtrg_counter0_compare0_irq , 1, 3
114
#define _hw_adbtrg_counter0_irq , 1, 4
115
#define _hw_adbtrg_counter0_irq_overflow , 1, 4
116
#define _hw_adbtrg_counter1_irq_compare1 , 1, 5
117
#define _hw_adbtrg_counter1_compare1_irq , 1, 5
118
#define _hw_adbtrg_counter1_irq , 1, 6
119
#define _hw_adbtrg_counter1_overflow_irq , 1, 6
120
#define _hw_adbtrg_counter1_irq_capture0 , 1, 7
121
#define _hw_adbtrg_counter1_capture0_irq , 1, 7
122
123
/* Mandatory parameter 'vref'
124
*/
125
#define _hwa_cfadbref(o,v,k,...) HW_BW(_hwa_cfadbref,vref,k)(o,k,__VA_ARGS__)
126
#define _hwa_cfadbref0(o,k,...) HW_E(HW_EM_AN(k,vref))
127
#define _hwa_cfadbref1(o,k,v,...) HW_B(_hwa_cfadbref2, _hw_par v)(o,v,__VA_ARGS__)
128
129
/* "bandgap_1100mV"
130
*/
131
#define _hwa_cfadbref20(o,v,...) HW_BV(_hwa_cfadbref20,adbref_,v,o)(o,v,__VA_ARGS__) // Push
132
#define _hwa_cfadbref201(v,o) _hwa_write(o,refs,v); _hwa_cfadbal // Pop
133
#define _hwa_cfadbref200(v,...) HW_E(HW_EM_VAL(v,vref,((pin,avcc), (pin,aref), bandgap_1100mV))) HW_EAT // Pop
134
135
/* (pin,aref) or (pin,avcc)
136
*/
137
#define _hwa_cfadbref21(o,v,...) _hwa_cfadbref22((HW_X(v)),o,v,__VA_ARGS__)
138
#define _hwa_cfadbref22(...) _hwa_cfadbref23(__VA_ARGS__)
139
#define _hwa_cfadbref23(d,...) HW_BW(_hwa_cfadbref3,_pin,HW_RP d)(d,__VA_ARGS__)
140
#define _hwa_cfadbref30(d,o,v,...) _hwa_cfadbref200(v,)(o,v,__VA_ARGS__) // Push
141
#define _hwa_cfadbref31(d,o,v,...) HW_BV(_hwa_cfadbref20,adbref_,HW_A1 d,o)(o,v,__VA_ARGS__) // Push
142
143
#define _hw_adbref_pin_aref , 0
/* , refs */
144
#define _hw_adbref_pin_avcc , 1
145
#define _hw_adbref_bandgap_1100mV , 3
146
147
/* Optionnal parameter 'align'
148
*/
149
#define _hwa_cfadbal(o,v,k,...) HW_BW(_hwa_cfadbal,align,k)(o,k,__VA_ARGS__)
150
#define _hwa_cfadbal0 _hwa_cfadbin
151
#define _hwa_cfadbal1(o,k,v,...) HW_BV(_hwa_cfadbal1,adbal_,v,o)(o,v,__VA_ARGS__) // Push
152
#define _hwa_cfadbal10(v,o) HW_E(HW_EM_VOAL(v,align,(left,right))) HW_EAT // Pop
153
#define _hwa_cfadbal11(v,o) _hwa_write(o,lar,v); _hwa_cfadbin // Pop
154
155
#define _hw_adbal_left , 1
/* , lar */
156
#define _hw_adbal_right , 0
157
158
/* Mandatory parameter `input`
159
*/
160
#define _hwa_cfadbin(o,v,k,...) HW_BW(_hwa_cfadbin,input,k)(o,k,__VA_ARGS__)
161
#define _hwa_cfadbin0(k) HW_E(HW_EM_AN(k,input))
162
#define _hwa_cfadbin1(o,k,v,...) HW_BV(_hwa_cfadbin1,adbin_,v,o)(o,v,__VA_ARGS__) // Push
163
#define _hwa_cfadbin10(v,o) HW_E(HW_EM_VAL(v,input,((pin,adc0..7),temperature,bandgap,gnd))) HW_EAT // Pop
164
#define _hwa_cfadbin11(v,o) _hwa_write(o,mux,v); _hwa_cfadbin12 // Pop
165
#define _hwa_cfadbin12(o,v,...) HW_EOL(__VA_ARGS__)
166
#define _hwa_cfadbin1_(o,v,...) _hwa_write(o,mux,_hw_adbin(HW_ADDRESS(v))); HW_EOL(__VA_ARGS__)
167
168
#define _hw_adbin_temperature , 8
/* , mux */
169
#define _hw_adbin_bandgap_1100mV , 14
170
#define _hw_adbin_gnd , 15
171
172
HW_INLINE uint8_t _hw_adbin( uint32_t a )
173
{
174
if
( a==
HW_ADDRESS
(pin_adc0) )
return
0;
175
if
( a==
HW_ADDRESS
(pin_adc1) )
return
1;
176
if
( a==
HW_ADDRESS
(pin_adc2) )
return
2;
177
if
( a==
HW_ADDRESS
(pin_adc3) )
return
3;
178
if
( a==
HW_ADDRESS
(pin_adc4) )
return
4;
179
if
( a==
HW_ADDRESS
(pin_adc5) )
return
5;
180
if
( a==
HW_ADDRESS
(pin_adc6) )
return
6;
181
if
( a==
HW_ADDRESS
(pin_adc7) )
return
7;
182
HWA_E
(HW_EM_AVL(input,((pin,adc0..7), temperature, bandgap_1100mV, gnd)));
183
return
0 ;
184
}
185
186
187
/* Power management
188
*/
189
#define hw_power__adb , _hw_power
190
#define hwa_power__adb , _hwa_power
191
192
206
#define hw_enable__adb , _hw_enable_adx_
207
#define hwa_enable__adb , _hwa_enable_adx_
208
209
223
#define hw_disable__adb , _hw_disable_adx_
224
#define hwa_disable__adb , _hwa_disable_adx_
225
226
240
#define hw_trigger__adb , _hw_trigger_adx_
241
#define hwa_trigger__adb , _hwa_trigger_adx_
242
243
253
#define hw_read__adb , _hw_rdadx_
254
265
#define hw_read_atomic__adb , _hw_ardadx_
266
267
290
#define hw_stat__adb , _hw_stat_adx_
291
292
293
/*******************************************************************************
294
* *
295
* Context management *
296
* *
297
*******************************************************************************/
298
299
#define _hwa_setup__adb(o,a) _hwa_setup__adx_(o)
300
#define _hwa_init__adb(o,a) _hwa_init__adx_(o)
301
#define _hwa_commit__adb(o,a) _hwa_commit__adx_(o)
302
303
HWA_E
#define HWA_E(...)
Trigger an error after code optimization.
Definition:
hwa_2.h:17
HW_ADDRESS
#define HW_ADDRESS(...)
Returns the address of an object or -1 if the object does not exist.
Definition:
hwa_1.h:454
adx_2.h
10-bit analog to digital converter common methods
Generated for HWA by
1.8.6