62 static void classb_dac_adc_test(DAC_t *dacptr, ADC_t *adcptr, uint16_t dac_out, uint16_t adc_assert) {
68 dacptr->CH0DATA = dac_out;
69 while( !(dacptr->STATUS & DAC_CH0DRE_bm) );
72 adcptr->CH3.INTFLAGS = ADC_CH_CHIF_bm;
74 adcptr->CTRLA |= (ADC_CH0START_bm | ADC_CH1START_bm | ADC_CH2START_bm | ADC_CH3START_bm);
77 while( !(adcptr->CH3.INTFLAGS & ADC_CH_CHIF_bm) );
80 adcDev = adcptr->CH0RES - adc_assert;
81 if (abs(adcDev) > CLASSB_ADC_DEV)
84 adcDev = adcptr->CH1RES - adc_assert;
85 if (abs(adcDev) > CLASSB_ADC_DEV)
88 adcDev = adcptr->CH2RES - adc_assert;
89 if (abs(adcDev) > CLASSB_ADC_DEV)
92 adcDev = adcptr->CH3RES - adc_assert;
93 if (abs(adcDev) > CLASSB_ADC_DEV)
97 adcptr->CH0.INTFLAGS = ADC_CH_CHIF_bm;
98 adcptr->CH1.INTFLAGS = ADC_CH_CHIF_bm;
99 adcptr->CH2.INTFLAGS = ADC_CH_CHIF_bm;
100 adcptr->CH3.INTFLAGS = ADC_CH_CHIF_bm;
119 dacptr->CTRLA = DAC_IDOEN_bm | DAC_ENABLE_bm;
120 dacptr->CTRLB = DAC_CHSEL_SINGLE_gc;
121 dacptr->CTRLC = DAC_REFSEL_INT1V_gc;
126 adcptr->CH0.CTRL = ADC_CH_INPUTMODE_INTERNAL_gc;
127 adcptr->CH1.CTRL = ADC_CH_INPUTMODE_INTERNAL_gc;
128 adcptr->CH2.CTRL = ADC_CH_INPUTMODE_INTERNAL_gc;
129 adcptr->CH3.CTRL = ADC_CH_INPUTMODE_INTERNAL_gc;
132 adcptr->CH0.MUXCTRL = ADC_CH_MUXINT_DAC_gc;
133 adcptr->CH1.MUXCTRL = ADC_CH_MUXINT_DAC_gc;
134 adcptr->CH2.MUXCTRL = ADC_CH_MUXINT_DAC_gc;
135 adcptr->CH3.MUXCTRL = ADC_CH_MUXINT_DAC_gc;
138 adcptr->CTRLA = ADC_ENABLE_bm;
140 adcptr->CTRLB = ADC_CONMODE_bm | ADC_RESOLUTION_12BIT_gc;
142 adcptr->REFCTRL = ADC_REFSEL_INT1V_gc;
144 adcptr->PRESCALER = ADC_PRESCALER_DIV512_gc;
152 classb_dac_adc_test(dacptr, adcptr, 0x000, 0x000);
153 classb_dac_adc_test(dacptr, adcptr, 0x400, 0x200);
154 classb_dac_adc_test(dacptr, adcptr, 0x800, 0x400);
155 classb_dac_adc_test(dacptr, adcptr, 0xC00, 0x600);
156 classb_dac_adc_test(dacptr, adcptr, 0xFFF, 0x7FF);
160 adcptr->CTRLA &= ~ADC_ENABLE_bm;
161 dacptr->CTRLA &= ~DAC_ENABLE_bm;