This is the quickstart guide for the SAM ADC driver, with step-by-step instructions on how to configure and use the driver in a selection of use cases.
The use cases contain several code fragments. The code fragments in the steps for setup can be copied into a custom initialization function, while the steps for usage can be copied into, e.g., the main application function.
Basic use case
In this basic use case, the ADC module and single channel are configured for:
- 12-bit, unsigned conversions
- Internal bandgap as 3.3 V reference
- ADC clock rate of at most 6.4 MHz and maximum sample rate is 1 MHz
- Software triggering of conversions
- Interrupt-based conversion handling
- Single channel measurement
- ADC_CHANNEL_5 as positive input
Prerequisites
- System Clock Management (Sysclock)
- Power Management Controller (PMC)
Setup steps
Example code
Add to application C-file:
void ADC_IrqHandler(void)
{
{
}
}
void adc_setup(void)
{
}
Workflow
- Define the interrupt service handler in the application:
void ADC_IrqHandler(void)
{
{
}
}
- Note
- Get ADC status and check if the conversion is finished. If done, read the last ADC result data.
- Initialize the given ADC with the specified ADC clock and startup time:
- Note
- The ADC clock range is between master clock / 2 and master clock / 512. The function sysclk_get_main_hz() is used to get the master clock frequency while ADC_CLOCK gives the ADC clock frequency.
- Configure ADC timing:
- Note
- Tracking Time = (0 + 1) * ADC Clock period Settling Time = ADC_SETTLING_TIME_3 * ADC Clock period Transfer Time = (1 * 2 + 3) * ADC Clock period
- Set the ADC resolution.
- Note
- The resolution value can be set to 10 bits or 12 bits.
- Enable the specified ADC channel:
- Enable ADC interrupts:
- Configure software conversion trigger:
Usage steps
Example code
Add to, e.g., main loop in application C-file:
Workflow
- Start ADC conversion on channel:
Advanced use cases
For more advanced use of the ADC driver, see the following use cases: