GSoC 2022 RTEMS -ADC API

Duc Doan
1 min readJul 25, 2022

--

This article describes the ADC API, its application usage, and how to implement for BSP/device drivers.

Repository URL: https://github.com/dtbpkmte/GSoC-2022-RTEMS

Description

This ADC API aims for increasing portability and simplifying application code in using analog input pins.

Features:

  • Read in blocking/non-blocking mode
  • Configure resolution, data alignment, and more
  • Register a transfer function for each pin and read converted results
  • ADC interrupts
  • Extends the Peripherals API: only a rtems_gpio object is required for operations

Usage

Getting a rtems_gpio object:

rtems_gpio *pin;
rtems_gpio_get(PIN_NUMBER, &pin);

Setting ADC API:

rtems_gpio_set_pin_mode(pin, RTEMS_GPIO_PINMODE_ANALOG);
rtems_periph_api_set_api(pin, RTEMS_PERIPH_TYPE_ADC); // required

Reading raw value, blocking:

uint32_t result;
rtems_adc_read_raw(pin, &result);

Reading raw value, non-blocking:

uint32_t result;
rtems_adc_start_read_raw_nb(pin);
rtems_adc_read_raw_nb(pin); // returns RTEMS_ADC_READY if conversion
// done

Assigning a transfer function:

double result;
rtems_adc_assign_tf(pot, to_voltage, NULL);
rtems_adc_read(pot, &result);
...double to_voltage(void *param, uint32_t raw) {
return (double) raw * 3.3 / MAX_ADC_VALUE;
}

Implementation for BSP/drivers

Please see my Peripherals API article here for BSP-specific implementation of all APIs in this system.

--

--

Duc Doan

Robotics Engineering, Electrical and Computer Engineering, WPI 2024. Contributor at RTEMS, Google Summer of Code 2022.