1010// Sample the first channel. On Hail, this is external pin A0 (AD0)
1111#define ADC_CHANNEL 0
1212
13- // Sampling frequencies
13+ // Sampling frequency
1414#define ADC_LOWSPEED_FREQUENCY 10
15- #define ADC_HIGHSPEED_FREQUENCY 44100
16-
17- // Buffer size
18- // Given a sampling frequency, we will receive callbacks every
19- // BUF_SIZE/FREQ seconds. At 44100 Hz and 4410 samples, this is a callback
20- // every 50 ms
21- #define BUF_SIZE 2205
22-
23- // data buffers
24- static uint16_t sample_buffer1 [BUF_SIZE ] = {0 };
25- static uint16_t sample_buffer2 [BUF_SIZE ] = {0 };
2615
2716static void continuous_sample_cb (uint8_t channel ,
2817 uint16_t sample );
29- static void continuous_buffered_sample_cb (uint8_t channel ,
30- uint32_t length ,
31- uint16_t * buf_ptr );
3218
3319static libtock_adc_callbacks callbacks = {
3420 .single_sample_callback = NULL ,
3521 .continuous_sample_callback = continuous_sample_cb ,
3622 .buffered_sample_callback = NULL ,
37- .continuous_buffered_sample_callback = continuous_buffered_sample_cb ,
23+ .continuous_buffered_sample_callback = NULL ,
3824};
3925
4026
@@ -62,52 +48,6 @@ static void continuous_sample_cb(uint8_t channel,
6248 }
6349
6450 // start buffered sampling
65- printf ("Beginning buffered sampling on channel %d at %d Hz\n" ,
66- ADC_CHANNEL , ADC_HIGHSPEED_FREQUENCY );
67- err = libtock_adc_continuous_buffered_sample (ADC_CHANNEL , ADC_HIGHSPEED_FREQUENCY , & callbacks );
68- if (err < RETURNCODE_SUCCESS ) {
69- printf ("continuous buffered sample error: %d\n" , err );
70- return ;
71- }
72- }
73- }
74-
75- static void continuous_buffered_sample_cb (uint8_t channel ,
76- uint32_t length ,
77- uint16_t * buf_ptr ) {
78- // buffer of ADC samples is ready
79- static uint8_t counter = 0 ;
80-
81- // calculate and print statistics about the data
82- uint32_t sum = 0 ;
83- uint16_t min = 0xFFFF ;
84- uint16_t max = 0 ;
85- for (uint32_t i = 0 ; i < length ; i ++ ) {
86- uint16_t sample = (buf_ptr [i ] * 3300 / 4095 );
87- sum += sample ;
88- if (sample < min ) {
89- min = sample ;
90- }
91- if (sample > max ) {
92- max = sample ;
93- }
94- }
95- printf ("Channel: %u\tCount: %d\tAvg: %lu\tMin: %u\tMax: %u\n" ,
96- channel , BUF_SIZE , sum / BUF_SIZE , min , max );
97-
98- // determine when to switch sampling method
99- counter ++ ;
100- if (counter == 10 ) {
101- counter = 0 ;
102-
103- // stop single sampling
104- int err = libtock_adc_stop_sampling ();
105- if (err < RETURNCODE_SUCCESS ) {
106- printf ("Failed to stop sampling: %d\n" , err );
107- return ;
108- }
109-
110- // start single sampling
11151 printf ("Beginning continuous sampling on channel %d at %d Hz\n" ,
11252 ADC_CHANNEL , ADC_LOWSPEED_FREQUENCY );
11353 err = libtock_adc_continuous_sample (ADC_CHANNEL , ADC_LOWSPEED_FREQUENCY , & callbacks );
@@ -118,6 +58,7 @@ static void continuous_buffered_sample_cb(uint8_t channel,
11858 }
11959}
12060
61+
12162int main (void ) {
12263 int err ;
12364 printf ("[Tock] ADC Continuous Test\n" );
@@ -131,21 +72,6 @@ int main(void) {
13172 libtock_adc_channel_count (& count );
13273 printf ("ADC driver exists with %d channels\n" , count );
13374
134- // set main buffer for ADC samples
135- err = libtock_adc_set_buffer (sample_buffer1 , BUF_SIZE );
136- if (err < RETURNCODE_SUCCESS ) {
137- printf ("set buffer error: %d\n" , err );
138- return -1 ;
139- }
140-
141- // set secondary buffer for ADC samples. In continuous mode, the ADC will
142- // automatically switch between the two each callback
143- err = libtock_adc_set_double_buffer (sample_buffer2 , BUF_SIZE );
144- if (err < RETURNCODE_SUCCESS ) {
145- printf ("set double buffer error: %d\n" , err );
146- return -1 ;
147- }
148-
14975 // begin continuous sampling
15076 printf ("Beginning continuous sampling on channel %d at %d Hz\n" ,
15177 ADC_CHANNEL , ADC_LOWSPEED_FREQUENCY );
@@ -155,7 +81,10 @@ int main(void) {
15581 return -1 ;
15682 }
15783
158- // return successfully. The system automatically calls `yield` continuously
159- // for us
84+ // loop forever
85+ while (1 ) {
86+ yield ();
87+ }
88+
16089 return 0 ;
16190}
0 commit comments