/** * \internal * \brief ADC callback mode test function * * This test checks the callback functionality of the ADC driver. * ADC callback for buffered conversion is enabled. * Converted results are verified for expected results. * * \param test Current test case. */ static void run_adc_callback_mode_test(const struct test_case *test) { uint16_t timeout_cycles = 0xFFFF; /* Set 0.5V DAC output */ dac_chan_write(&dac_inst, DAC_CHANNEL_0, DAC_VAL_HALF_VOLT); delay_ms(1); /* Start ADC read */ adc_read_buffer_job(&adc_inst, adc_buf, ADC_SAMPLES); do { timeout_cycles--; if (interrupt_flag) { break; } } while (timeout_cycles > 0); /* Test for timeout */ test_assert_true(test, timeout_cycles > 0, "Timeout in ADC read"); /* Test result */ for (uint8_t i = 0; i < ADC_SAMPLES; i++) { test_assert_true(test, (adc_buf[i] > (ADC_VAL_DAC_HALF_OUTPUT - ADC_OFFSET)) && (adc_buf[i] < (ADC_VAL_DAC_HALF_OUTPUT + ADC_OFFSET)), "Error in ADC conversion for 0.5V at index %d, Result: %d", i, adc_buf[i]); } }
int main(void) { system_init(); //! [setup_init] configure_adc(); configure_adc_callbacks(); //! [setup_init] //! [main] //! [enable_global_interrupts] system_interrupt_enable_global(); //! [enable_global_interrupts] //! [start_adc_job] adc_read_buffer_job(&adc_instance, adc_result_buffer, ADC_SAMPLES); //! [start_adc_job] //! [job_complete_poll] while (adc_read_done == false) { /* Wait for asynchronous ADC read to complete */ } //! [job_complete_poll] //! [inf_loop] while (1) { /* Infinite loop */ } //! [inf_loop] //! [main] }