GPIO voltage selection (MAX32625PICO)

I want to use a MAX32625PICO to perform some fairly basic IO operations using GPIO pins as 3.3V and 1.8V outputs. The datasheet says:

The MAX32625 has dual I/O supply rails and all the general-purpose digital I/O ports can be set individually to use either rail. The primary VDDIO rail is supplied from the 1.8V supply, and the VDDIOH rail is connected to several analog switches so that the application can configure it to use the 3.3V supply, or DIP pin 1, or from the SWD header pin 1.

However, I have not been able to find anything in the MBED drivers to actually select the voltage used. How is this set in code?

Hello,

This feature is specific for MAX’s targets and probably it is uniq so this is not supported in Mbed. The Mbed usually supports generic functionality what are available on every MCU.

I do not have personal experience with that but I remember something.
Every MAX related (MCU with this feature) code has to start with this line

// configure VDDIOH to local 3.3V supply, set dipVio and swdVio to 1.8V supply
MAX32625PICO pico(MAX32625PICO::IOH_3V3, MAX32625PICO::VIO_1V8, MAX32625PICO::VIO_1V8);

And this one comes from this library - max32625pico - Library for MAX32625PICO board. Configures IOH s… | Mbed
When you look to the header file I believe you will found something about requested feature.

BR, Jan

1 Like

Thanks to @JohnnyK for posting this code, I was able to write the following function to set all of the outputs to use 3.3V:

void set_all_pins_to_use_3v3(void)
{
    DigitalOut enable3V3Pin(P3_6, 1); // Connect 3V3 to VDDIOH
    volatile uint32_t * const iomanUseVddiohRegister0 = (volatile uint32_t *) 0x40000D00; // Set the register location
    *iomanUseVddiohRegister0 = ~((uint32_t) 0); // Turn all bits on
}