Prusa3d Marlin fork
adc.h
1 #pragma once
2 
3 #include <inttypes.h>
4 #include "config.h"
5 
6 /*
7 http://resnet.uoregon.edu/~gurney_j/jmpc/bitwise.html
8 */
9 #define BITCOUNT(x) (((BX_(x)+(BX_(x)>>4)) & 0x0F0F0F0F) % 255)
10 #define BX_(x) ((x) - (((x)>>1)&0x77777777) - (((x)>>2)&0x33333333) - (((x)>>3)&0x11111111))
11 
12 #define ADC_PIN_IDX(pin) BITCOUNT(ADC_CHAN_MSK & ((1 << (pin)) - 1))
13 
14 #if BITCOUNT(ADC_CHAN_MSK) != ADC_CHAN_CNT
15 # error "ADC_CHAN_MSK oes not match ADC_CHAN_CNT"
16 #endif
17 
18 #define VOLT_DIV_REF 5 //[V]
19 
20 extern volatile uint8_t adc_channel;
21 extern volatile uint16_t adc_values[ADC_CHAN_CNT];
22 
23 extern void adc_init();
24 extern void adc_start_cycle(); //should be called from an atomic context only
25 static inline bool adc_cycle_done() { return adc_channel >= ADC_CHAN_CNT; }