Analog Peripherals Initialization and Configuration#
The WiSeConnect software development kit (SDK) provides unified application programming interfaces (APIs) for configuring and operating the analog-to-digital converter (ADC) and digital-to-analog converter (DAC) peripherals on SiWx917 devices. These peripherals support multiple modes, flexible sampling rates, direct memory access (DMA) integration, and ultra-low-power (ULP) variants for low-power applications.
This section explains how to initialize and configure ADC and DAC modules using Simplicity Studio, the Universal Configurator (UC), and WiSeConnect driver APIs.
Startup Sequence#
Analog peripherals initialize in a defined sequence for consistent hardware setup.
ADC Initialization Flow#
Configure the ADC clock source.
Initialize the ADC instance.
Configure input channels.
Register a callback function (for asynchronous operation).
Enable active channels.
Start ADC conversion.
DAC Initialization Flow#
Configure the DAC clock source.
Initialize the DAC peripheral.
Set DAC configuration parameters (such as mode, rate, and output pin).
Optionally register a callback.
Write initial output data.
Start DAC output operation.
Step-by-Step Setup in Simplicity Studio#
Step 1. Create or Open a Project#
Launch Simplicity Studio.
Create a new project for your SiWx91x device or open an existing one.
Choose from the available analog example projects in WiSeConnect SDK:
sl_si91x_adc_fifo_modesl_si91x_adc_static_modesl_si91x_ulp_adcsl_si91x_dacsl_si91x_ulp_dac


Figure: Automatic board detection in Simplicity Studio
Step 2. Add the ADC or DAC Component#
Open the project’s
.slcpconfiguration file.In the Software Components tab, search for “ADC” or “DAC” and add the corresponding component.
To add multiple instances, click Add New Instance.


Figure: ADC component selection in UC


Figure: DAC component selection in UC
Step 3. Configure the Peripheral in Universal Configurator#
ADC Configuration#
Set the following parameters in the UC GUI:
Setting | Description |
|---|---|
Number of channels | 1–16 |
Mode | FIFO (continuous) or Static (single conversion) |
Input type | Single-ended or differential |
Sampling rate | 1 SPS – 2.5 MSPS |
Sample length | Samples per conversion cycle |
Pin Mapping Options:
Pin Type | GPIO Options | ULP GPIO Options |
|---|---|---|
Positive (P) | GPIO 25–30 | ULP_GPIO 0–11 |
Negative (N) | GPIO 26, 28, 30 | ULP_GPIO 1, 5, 7, 9, 11 |
Tip: Use ULP_GPIO pins for low-power applications; use standard GPIO pins for maximum sampling rates.


Figure: ADC configuration screen in UC
DAC Configuration#
Set the following DAC options in the UC GUI:
Parameter | Range / Description |
|---|---|
Mode | Static or FIFO |
Sample rate | 63 SPS – 5 MSPS |
FIFO threshold | 0 – 7 |
Output pin | GPIO 68 / ULP_GPIO 4 |


Figure: DAC configuration in UC
Configuration Structures#
ADC Structures#
typedef struct {
uint16_t division_factor;
uint32_t soc_pll_clock;
uint32_t soc_pll_reference_clock;
} sl_adc_clock_config_t;
typedef struct {
uint8_t operation_mode; // Static or FIFO
uint8_t num_of_channel_enable; // Active channels
} sl_adc_config_t;Operating Modes
typedef enum {
SL_ADC_STATIC_MODE = 0,
SL_ADC_FIFO_MODE = 1
} sl_adc_operation_mode_t;Input Types
typedef enum {
SL_ADC_SINGLE_ENDED = 0,
SL_ADC_DIFFERENTIAL = 1
} sl_adc_input_type_t;DAC Structures#
typedef struct {
uint16_t division_factor;
uint32_t soc_pll_clock;
uint32_t soc_pll_reference_clock;
} sl_dac_clock_config_t;
typedef struct {
uint8_t operating_mode;
uint8_t dac_fifo_threshold;
uint8_t adc_channel;
uint32_t dac_sample_rate;
uint8_t dac_pin;
uint8_t dac_port;
} sl_dac_config_t;Operating Modes
typedef enum {
SL_DAC_STATIC_MODE = 0,
SL_DAC_FIFO_MODE = 1
} sl_dac_operation_mode_t;Step 4. Generate Initialization Code#
When you add or modify peripheral components, Simplicity Studio automatically generates driver and configuration files.


Figure: Auto-generated initialization code for analog peripherals
5. Initialize in Application Code#
ADC Initialization Example#
#include "sl_si91x_adc.h"
sl_adc_channel_config_t adc_channel_config = {0};
sl_adc_config_t adc_config = {
.operation_mode = SL_ADC_STATIC_MODE,
.num_of_channel_enable = 1
};
float vref_value = 3.3f;
sl_status_t status = sl_si91x_adc_init(adc_channel_config, adc_config, vref_value);
if (status != SL_STATUS_OK) {
printf("ADC init failed: %u\n", status);
} else {
printf("ADC initialized successfully\n");
}
sl_si91x_adc_register_event_callback(adc_callback_event);DAC Initialization Example#
#include "sl_si91x_dac.h"
sl_dac_clock_config_t dac_clock = {
.soc_pll_clock = 80000000,
.soc_pll_reference_clock = 40000000,
.division_factor = 0
};
sl_dac_config_t dac_config = {
.operating_mode = SL_DAC_STATIC_MODE,
.dac_sample_rate = 1000000,
.dac_fifo_threshold = 0,
.dac_pin = ULP_GPIO_4,
.dac_port = 0
};
float vref_value = 3.3f;
sl_status_t status = sl_si91x_dac_init(&dac_clock);
if (status == SL_STATUS_OK)
sl_si91x_dac_set_configuration(dac_config, vref_value);
sl_si91x_dac_register_event_callback(dac_callback_event);Step 6. Build, Flash, and Test#
Use the Virtual COM (VCOM) console in Simplicity Studio to monitor ADC/DAC logs in real time.
Build the project.
Flash the firmware to the SiWx91x board.
Launch the VCOM console or use an external terminal (such as PuTTY or Tera Term).
Observe ADC/DAC initialization and operation logs.


Figure: ADC operation log output


Figure: DAC operation log output