Skip to content

Ambiq Apollo3: Make SFE_ARTEMIS use arduino uno form factor, fix GPIO IRQ API #473

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 3 commits into from
Jul 3, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions hal/include/hal/gpio_irq_api.h
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,7 @@ typedef void (*gpio_irq_handler)(uintptr_t context, gpio_irq_event event);
* # Defined behavior
* * ::gpio_irq_init initializes the GPIO IRQ pin
* * ::gpio_irq_init attaches the interrupt handler
* * ::gpio_irq_init enables the IRQ
* * ::gpio_irq_free releases the GPIO IRQ pin
* * ::gpio_irq_set enables/disables pin IRQ event
* * ::gpio_irq_enable enables GPIO IRQ
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -38,69 +38,112 @@ extern "C"

typedef enum
{
// Digital naming
D0 = 25,
D1 = 24,
D2 = 35,
D3 = 4,
D4 = 22,
D5 = 23,
D6 = 27,
D7 = 28,
D8 = 32,
D9 = 12,
D10 = 13,
D11 = 7,
D12 = 6,
D13 = 5,
D14 = 40,
D15 = 39,
D16 = 29,
D17 = 11,
D18 = 34,
D19 = 33,
D20 = 16,
D21 = 31,

// Analog naming
A0 = D16,
A1 = D17,
A2 = D18,
A3 = D19,
A4 = D20,
A5 = D21,
A6 = D2,
// A7 = ??
A8 = D8,
A9 = D9,
A10 = D10,
// Apollo3 I/O pins - CSP and BGA packages
IO_0 = 0,
IO_1 = 1,
IO_2 = 2,
IO_3 = 3,
IO_4 = 4,
IO_5 = 5,
IO_6 = 6,
IO_7 = 7,
IO_8 = 8,
IO_9 = 9,
IO_10 = 10,
IO_11 = 11,
IO_12 = 12,
IO_13 = 13,
IO_14 = 14,
IO_15 = 15,
IO_16 = 16,
IO_17 = 17,
IO_18 = 18,
IO_19 = 19,
IO_20 = 20,
IO_21 = 21,
IO_22 = 22,
IO_23 = 23,
IO_24 = 24,
IO_25 = 25,
IO_26 = 26,
IO_27 = 27,
IO_28 = 28,
IO_29 = 29,
IO_39 = 39,
IO_40 = 40,
IO_41 = 41,
IO_44 = 44,
IO_47 = 47,
IO_48 = 48,
IO_49 = 49,

// Apollo3 I/O pins - BGA package only
IO_30 = 30,
IO_31 = 31,
IO_32 = 32,
IO_33 = 33,
IO_34 = 34,
IO_35 = 35,
IO_36 = 36,
IO_37 = 37,
IO_38 = 38,
IO_42 = 42,
IO_43 = 43,
IO_45 = 45,
IO_46 = 46,

#ifdef TARGET_FF_ARDUINO_UNO
// Arduino form factor pins
ARDUINO_UNO_D0 = IO_25,
ARDUINO_UNO_D1 = IO_24,
ARDUINO_UNO_D2 = IO_35,
ARDUINO_UNO_D3 = IO_4,
ARDUINO_UNO_D4 = IO_22,
ARDUINO_UNO_D5 = IO_23,
ARDUINO_UNO_D6 = IO_27,
ARDUINO_UNO_D7 = IO_28,
ARDUINO_UNO_D8 = IO_32,
ARDUINO_UNO_D9 = IO_12,
ARDUINO_UNO_D10 = IO_13,
ARDUINO_UNO_D11 = IO_7,
ARDUINO_UNO_D12 = IO_6,
ARDUINO_UNO_D13 = IO_5,
ARDUINO_UNO_D14 = IO_40,
ARDUINO_UNO_D15 = IO_39,

ARDUINO_UNO_A0 = IO_29,
ARDUINO_UNO_A1 = IO_11,
ARDUINO_UNO_A2 = IO_34,
ARDUINO_UNO_A3 = IO_33,
ARDUINO_UNO_A4 = IO_16,
ARDUINO_UNO_A5 = IO_31,
#endif

// UART
SERIAL_TX = AM_BSP_PRIM_UART_TX_PIN,
SERIAL_RX = AM_BSP_PRIM_UART_RX_PIN,
CONSOLE_TX = SERIAL_TX,
CONSOLE_RX = SERIAL_RX,

SERIAL1_TX = D1,
SERIAL1_RX = D0,
SERIAL1_TX = IO_24,
SERIAL1_RX = IO_25,

// Not connected
NC = NC_VAL
} PinName;

// LEDs
#define LED1 D13 // Blue LED
#define LED1 IO_5 // Blue LED

// I2C bus
#define I2C_SCL D15
#define I2C_SDA D14
// note: I2C_SCL and I2C_SDA defines are provided by the FF_ARDUINO_UNO header
#define QWIIC_SCL I2C_SCL
#define QWIIC_SDA I2C_SDA

// SPI bus
#define SPI_CLK D13
#define SPI_SDO D11
#define SPI_SDI D12
#define SPI_SCLK IO_5
#define SPI_MOSI IO_7
#define SPI_MISO IO_6

#if defined(MBED_CONF_TARGET_STDIO_UART_TX)
#define STDIO_UART_TX MBED_CONF_TARGET_STDIO_UART_TX
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -38,53 +38,110 @@ extern "C"

typedef enum
{
// Apollo3 I/O pins - CSP and BGA packages
IO_0 = 0,
IO_1 = 1,
IO_2 = 2,
IO_3 = 3,
IO_4 = 4,
IO_5 = 5,
IO_6 = 6,
IO_7 = 7,
IO_8 = 8,
IO_9 = 9,
IO_10 = 10,
IO_11 = 11,
IO_12 = 12,
IO_13 = 13,
IO_14 = 14,
IO_15 = 15,
IO_16 = 16,
IO_17 = 17,
IO_18 = 18,
IO_19 = 19,
IO_20 = 20,
IO_21 = 21,
IO_22 = 22,
IO_23 = 23,
IO_24 = 24,
IO_25 = 25,
IO_26 = 26,
IO_27 = 27,
IO_28 = 28,
IO_29 = 29,
IO_39 = 39,
IO_40 = 40,
IO_41 = 41,
IO_44 = 44,
IO_47 = 47,
IO_48 = 48,
IO_49 = 49,

// Apollo3 I/O pins - BGA package only
IO_30 = 30,
IO_31 = 31,
IO_32 = 32,
IO_33 = 33,
IO_34 = 34,
IO_35 = 35,
IO_36 = 36,
IO_37 = 37,
IO_38 = 38,
IO_42 = 42,
IO_43 = 43,
IO_45 = 45,
IO_46 = 46,

// Digital naming
D0 = 0,
D1 = 1,
D2 = 2,
D3 = 3,
D4 = 4,
D5 = 5,
D6 = 6,
D7 = 7,
D8 = 8,
D9 = 9,
D10 = 10,
D11 = 11,
D12 = 12,
D13 = 13,
D14 = 14,
D15 = 15,
D16 = 16,
D17 = 17,
D18 = 18,
D19 = 19,
// D20 = ??
// D21 = ??
D22 = 22,
D23 = 23,
D24 = 24,
D25 = 25,
D26 = 26,
D27 = 27,
D28 = 28,
D29 = 29,
// D30 = ??
D31 = 31,
D32 = 32,
D33 = 33,
D34 = 34,
D35 = 35,
D36 = 36,
D37 = 37,
D38 = 38,
D39 = 39,
D40 = 40,
D41 = 41,
D42 = 42,
D43 = 43,
D44 = 44,
D45 = 45,
D0 = IO_0,
D1 = IO_1,
D2 = IO_2,
D3 = IO_3,
D4 = IO_4,
D5 = IO_5,
D6 = IO_6,
D7 = IO_7,
D8 = IO_8,
D9 = IO_9,
D10 = IO_10,
D11 = IO_11,
D12 = IO_12,
D13 = IO_13,
D14 = IO_14,
D15 = IO_15,
D16 = IO_16,
D17 = IO_17,
D18 = IO_18,
D19 = IO_19,

// D20 and D21 used as SWD debug pins, not broken out

D22 = IO_22,
D23 = IO_23,
D24 = IO_24,
D25 = IO_25,
D26 = IO_26,
D27 = IO_27,
D28 = IO_28,
D29 = IO_29,

// D30 not broken out from Artemis module

D31 = IO_31,
D32 = IO_32,
D33 = IO_33,
D34 = IO_34,
D35 = IO_35,
D36 = IO_36,
D37 = IO_37,
D38 = IO_38,
D39 = IO_39,
D40 = IO_40,
D41 = IO_41,
D42 = IO_42,
D43 = IO_43,
D44 = IO_44,
D45 = IO_45,

// Analog naming
A11 = D11,
Expand All @@ -98,26 +155,6 @@ typedef enum
A34 = D34,
A35 = D35,

// LEDs
LED_BLUE = AM_BSP_GPIO_LED_BLUE,

// mbed original LED naming
LED1 = AM_BSP_GPIO_LED0,
LED2 = D42,

// I2C
I2C_SCL = AM_BSP_QWIIC_I2C_SCL_PIN,
I2C_SDA = AM_BSP_QWIIC_I2C_SDA_PIN,

// Qwiic
QWIIC_SCL = I2C_SCL,
QWIIC_SDA = I2C_SDA,

// SPI
SPI_CLK = AM_BSP_PRIM_SPI_CLK_PIN,
SPI_SDO = AM_BSP_PRIM_SPI_SDO_PIN,
SPI_SDI = AM_BSP_PRIM_SPI_SDI_PIN,

// UART
SERIAL_TX = AM_BSP_PRIM_UART_TX_PIN,
SERIAL_RX = AM_BSP_PRIM_UART_RX_PIN,
Expand All @@ -131,6 +168,21 @@ typedef enum
NC = NC_VAL
} PinName;

// LEDs
#define LED1 IO_5 // Blue LED

// I2C bus
#define I2C_SCL IO_39
#define I2C_SDA IO_40

#define QWIIC_SCL I2C_SCL
#define QWIIC_SDA I2C_SDA

// SPI bus
#define SPI_SCLK IO_5
#define SPI_MOSI IO_7
#define SPI_MISO IO_6

#if defined(MBED_CONF_TARGET_STDIO_UART_TX)
#define STDIO_UART_TX MBED_CONF_TARGET_STDIO_UART_TX
#else
Expand Down
Loading