void configure_adc_callbacks(void) { //! [setup_register_callback] adc_register_callback(&adc_instance, adc_complete_callback, ADC_CALLBACK_READ_BUFFER); //! [setup_register_callback] //! [setup_enable_callback] adc_enable_callback(&adc_instance, ADC_CALLBACK_READ_BUFFER); //! [setup_enable_callback] }
/** * \internal * \brief Setup Function: ADC window mode test. * * This function initializes the ADC in window mode. * Upper and lower threshold values are provided. * It also registers & enables callback for window detection. * * \param test Current test case. */ static void setup_adc_window_mode_test(const struct test_case *test) { enum status_code status = STATUS_ERR_IO; interrupt_flag = false; /* Set 0.5V DAC output */ dac_chan_write(&dac_inst, DAC_CHANNEL_0, DAC_VAL_HALF_VOLT); delay_ms(1); /* Skip test if ADC initialization failed */ test_assert_true(test, adc_init_success, "Skipping test due to failed initialization"); /* Disable ADC before initialization */ adc_disable(&adc_inst); struct adc_config config; adc_get_config_defaults(&config); config.positive_input = ADC_POSITIVE_INPUT_PIN2; config.negative_input = ADC_NEGATIVE_INPUT_GND; #if (SAML21) config.reference = ADC_REFERENCE_INTREF; config.clock_prescaler = ADC_CLOCK_PRESCALER_DIV16; #else config.reference = ADC_REFERENCE_INT1V; #endif config.clock_source = GCLK_GENERATOR_3; #if !(SAML21) config.gain_factor = ADC_GAIN_FACTOR_1X; #endif config.resolution = ADC_RESOLUTION_12BIT; config.freerunning = true; config.window.window_mode = ADC_WINDOW_MODE_BETWEEN_INVERTED; config.window.window_lower_value = (ADC_VAL_DAC_HALF_OUTPUT - ADC_OFFSET); config.window.window_upper_value = (ADC_VAL_DAC_HALF_OUTPUT + ADC_OFFSET); /* Re-initialize & enable ADC */ status = adc_init(&adc_inst, ADC, &config); test_assert_true(test, status == STATUS_OK, "ADC initialization failed"); status = adc_enable(&adc_inst); test_assert_true(test, status == STATUS_OK, "ADC enabling failed"); /* Register and enable window mode callback */ adc_register_callback(&adc_inst, adc_user_callback, ADC_CALLBACK_WINDOW); adc_enable_callback(&adc_inst, ADC_CALLBACK_WINDOW); /* Start ADC conversion */ adc_start_conversion(&adc_inst); }
/** * \internal * \brief Setup Function: ADC callback mode test. * * This function initializes the ADC result buffer and * registers & enables callback for the ADC buffer read. * * \param test Current test case. */ static void setup_adc_callback_mode_test(const struct test_case *test) { interrupt_flag = false; /* Skip test if ADC initialization failed */ test_assert_true(test, adc_init_success, "Skipping test due to failed initialization"); /* Initialize ADC buffer */ for (uint8_t i = 0; i < ADC_SAMPLES; i++) { adc_buf[i] = 0; } /* Register and enable buffer read callback */ adc_register_callback(&adc_inst, adc_user_callback, ADC_CALLBACK_READ_BUFFER); adc_enable_callback(&adc_inst, ADC_CALLBACK_READ_BUFFER); }