4.6 CPU Details
Since the result ready interrupt is enabled in the ADC and the application example may store and transmit ADC results via the USART, the correct Interrupt Service Routine (ISR) may be implemented along with a mechanism to forward data to the USART.
The result ready interrupt routine could be implemented similarly to the
snippet below, given that the variables
ADC_result
and
send_flag
have been
defined.ISR(ADC0_RESRDY_vect)
{
/* Store the ADC result and notify the main loop to send the result */
ADC_result = ADC0.RESL;
send_flag = 1;
/* The Interrupt flag has to be cleared manually */
ADC0.INTFLAGS = ADC_RESRDY_bm;
}
For
simplicity, the example only stores and transmits the eight Least Significant bits of
the ADC result.Transmission of the stored value using a USART driver function generated by
Atmel START can then be implemented in the main loop in a similar way as in the snippet
below.
/* ADC result has been stored and is ready to be sent */
if (send_flag) {
USART_0_putc(ADC_result);
send_flag = 0;
}
The
‘USART_0_putc()
’ function simply writes the given eight bits to the
USART transmit register.To enable interrupts globally on the device, the I-bit in the CPU Status Register (SREG) must also be set.