Skip to content

Commit a0b41d6

Browse files
committed
Portenta H7: First cut add PinNames to the H7M7 variant
Note: the overload function definitions are in the PinNames.h PinNames.cpp - duplicates the pin table, as the main pin table is defined static within zephyrCommon.cpp Not sure if to move some up to there but sort of specific to Portenta H7 maybe X8, maybe GIGA... Also I sort of still have a lot of the MBED names within the pin names, Probably should be weeded out Maybe some place should define breakout board specific namings?
1 parent 6cb0bf2 commit a0b41d6

File tree

3 files changed

+370
-0
lines changed

3 files changed

+370
-0
lines changed

Diff for: variants/arduino_portenta_h7/PinNames.cpp

+61
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
#include <Arduino.h>
2+
#include "zephyrInternal.h"
3+
#include "PinNames.h"
4+
5+
// duplicate of one in zephyr common
6+
static const struct gpio_dt_spec arduino_pins[] = { DT_FOREACH_PROP_ELEM_SEP(
7+
DT_PATH(zephyr_user), digital_pin_gpios, GPIO_DT_SPEC_GET_BY_IDX, (, )) };
8+
9+
static const struct gpio_dt_spec arduino_ports[] = { DT_FOREACH_PROP_ELEM_SEP(
10+
DT_PATH(zephyr_user), port_pin_gpios, GPIO_DT_SPEC_GET_BY_IDX, (, )) };
11+
12+
13+
void pinMode(PinName pinNumber, PinMode mode) {
14+
// See if the pinName maps to a real pin number if so use the pin number version
15+
int pin_index = PinNameToIndex(pinNumber);
16+
if (pin_index != -1) {
17+
// this will grab any settings out of the device tree.
18+
pinMode((pin_size_t)pin_index, mode);
19+
return;
20+
}
21+
22+
if (mode == INPUT) { // input mode
23+
gpio_pin_configure(arduino_ports[pinNumber >> 4].port, pinNumber & 0xf,
24+
GPIO_INPUT | GPIO_ACTIVE_HIGH);
25+
} else if (mode == INPUT_PULLUP) { // input with internal pull-up
26+
gpio_pin_configure(arduino_ports[pinNumber >> 4].port, pinNumber & 0xf,
27+
GPIO_INPUT | GPIO_PULL_UP | GPIO_ACTIVE_HIGH);
28+
} else if (mode == INPUT_PULLDOWN) { // input with internal pull-down
29+
gpio_pin_configure(arduino_ports[pinNumber >> 4].port, pinNumber & 0xf,
30+
GPIO_INPUT | GPIO_PULL_DOWN | GPIO_ACTIVE_HIGH);
31+
} else if (mode == OUTPUT) { // output mode
32+
gpio_pin_configure(arduino_ports[pinNumber >> 4].port, pinNumber & 0xf,
33+
GPIO_OUTPUT_LOW | GPIO_ACTIVE_HIGH);
34+
}
35+
}
36+
37+
void digitalWrite(PinName pinNumber, PinStatus status) {
38+
gpio_pin_set(arduino_ports[pinNumber >> 4].port, pinNumber & 0xf, status);
39+
}
40+
41+
42+
int PinNameToIndex(PinName P) {
43+
for (size_t i = 0; i < ARRAY_SIZE(arduino_pins); i++) {
44+
if ((arduino_ports[P >> 4].port == arduino_pins[i].port) && ((P & 0xf) == arduino_pins[i].pin)) {
45+
return i;
46+
}
47+
}
48+
return -1;
49+
}
50+
51+
PinName digitalPinToPinName(pin_size_t P) {
52+
if (P < ARRAY_SIZE(arduino_pins)) {
53+
// Convert the pins port into an index into our port's list
54+
for (uint8_t port_index = 0; port_index < ARRAY_SIZE(arduino_ports); port_index++) {
55+
if (arduino_pins[P].port == arduino_ports[port_index].port) {
56+
return (PinName)((port_index << 4) | arduino_pins[P].pin);
57+
}
58+
}
59+
}
60+
return PinName::NC;
61+
}

Diff for: variants/arduino_portenta_h7/PinNames.h

+308
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,308 @@
1+
2+
#ifndef ZEPHYR_PINNAMES_H
3+
#define ZEPHYR_PINNAMES_H
4+
5+
#ifdef __cplusplus
6+
extern "C" {
7+
#endif
8+
9+
typedef enum {
10+
PA_0 = 0x00,
11+
PA_1 = 0x01,
12+
PA_2 = 0x02,
13+
PA_3 = 0x03,
14+
PA_4 = 0x04,
15+
PA_5 = 0x05,
16+
PA_6 = 0x06,
17+
PA_7 = 0x07,
18+
PA_8 = 0x08,
19+
PA_9 = 0x09,
20+
PA_10 = 0x0A,
21+
PA_11 = 0x0B,
22+
PA_12 = 0x0C,
23+
PA_13 = 0x0D,
24+
PA_14 = 0x0E,
25+
PA_15 = 0x0F,
26+
PB_0 = 0x10,
27+
PB_1 = 0x11,
28+
PB_2 = 0x12,
29+
PB_3 = 0x13,
30+
PB_4 = 0x14,
31+
PB_5 = 0x15,
32+
PB_6 = 0x16,
33+
PB_7 = 0x17,
34+
PB_8 = 0x18,
35+
PB_9 = 0x19,
36+
PB_10 = 0x1A,
37+
PB_11 = 0x1B,
38+
PB_12 = 0x1C,
39+
PB_13 = 0x1D,
40+
PB_14 = 0x1E,
41+
PB_15 = 0x1F,
42+
PC_0 = 0x20,
43+
PC_1 = 0x21,
44+
PC_2 = 0x22,
45+
PC_3 = 0x23,
46+
PC_4 = 0x24,
47+
PC_5 = 0x25,
48+
PC_6 = 0x26,
49+
PC_7 = 0x27,
50+
PC_8 = 0x28,
51+
PC_9 = 0x29,
52+
PC_10 = 0x2A,
53+
PC_11 = 0x2B,
54+
PC_12 = 0x2C,
55+
PC_13 = 0x2D,
56+
PC_14 = 0x2E,
57+
PC_15 = 0x2F,
58+
PD_0 = 0x30,
59+
PD_1 = 0x31,
60+
PD_2 = 0x32,
61+
PD_3 = 0x33,
62+
PD_4 = 0x34,
63+
PD_5 = 0x35,
64+
PD_6 = 0x36,
65+
PD_7 = 0x37,
66+
PD_8 = 0x38,
67+
PD_9 = 0x39,
68+
PD_10 = 0x3A,
69+
PD_11 = 0x3B,
70+
PD_12 = 0x3C,
71+
PD_13 = 0x3D,
72+
PD_14 = 0x3E,
73+
PD_15 = 0x3F,
74+
PE_0 = 0x40,
75+
PE_1 = 0x41,
76+
PE_2 = 0x42,
77+
PE_3 = 0x43,
78+
PE_4 = 0x44,
79+
PE_5 = 0x45,
80+
PE_6 = 0x46,
81+
PE_7 = 0x47,
82+
PE_8 = 0x48,
83+
PE_9 = 0x49,
84+
PE_10 = 0x4A,
85+
PE_11 = 0x4B,
86+
PE_12 = 0x4C,
87+
PE_13 = 0x4D,
88+
PE_14 = 0x4E,
89+
PE_15 = 0x4F,
90+
PF_0 = 0x50,
91+
PF_1 = 0x51,
92+
PF_2 = 0x52,
93+
PF_3 = 0x53,
94+
PF_4 = 0x54,
95+
PF_5 = 0x55,
96+
PF_6 = 0x56,
97+
PF_7 = 0x57,
98+
PF_8 = 0x58,
99+
PF_9 = 0x59,
100+
PF_10 = 0x5A,
101+
PF_11 = 0x5B,
102+
PF_12 = 0x5C,
103+
PF_13 = 0x5D,
104+
PF_14 = 0x5E,
105+
PF_15 = 0x5F,
106+
PG_0 = 0x60,
107+
PG_1 = 0x61,
108+
PG_2 = 0x62,
109+
PG_3 = 0x63,
110+
PG_4 = 0x64,
111+
PG_5 = 0x65,
112+
PG_6 = 0x66,
113+
PG_7 = 0x67,
114+
PG_8 = 0x68,
115+
PG_9 = 0x69,
116+
PG_10 = 0x6A,
117+
PG_11 = 0x6B,
118+
PG_12 = 0x6C,
119+
PG_13 = 0x6D,
120+
PG_14 = 0x6E,
121+
PG_15 = 0x6F,
122+
PH_0 = 0x70,
123+
PH_1 = 0x71,
124+
PH_2 = 0x72,
125+
PH_3 = 0x73,
126+
PH_4 = 0x74,
127+
PH_5 = 0x75,
128+
PH_6 = 0x76,
129+
PH_7 = 0x77,
130+
PH_8 = 0x78,
131+
PH_9 = 0x79,
132+
PH_10 = 0x7A,
133+
PH_11 = 0x7B,
134+
PH_12 = 0x7C,
135+
PH_13 = 0x7D,
136+
PH_14 = 0x7E,
137+
PH_15 = 0x7F,
138+
PI_0 = 0x80,
139+
PI_1 = 0x81,
140+
PI_2 = 0x82,
141+
PI_3 = 0x83,
142+
PI_4 = 0x84,
143+
PI_5 = 0x85,
144+
PI_6 = 0x86,
145+
PI_7 = 0x87,
146+
PI_8 = 0x88,
147+
PI_9 = 0x89,
148+
PI_10 = 0x8A,
149+
PI_11 = 0x8B,
150+
PI_12 = 0x8C,
151+
PI_13 = 0x8D,
152+
PI_14 = 0x8E,
153+
PI_15 = 0x8F,
154+
PJ_0 = 0x90,
155+
PJ_1 = 0x91,
156+
PJ_2 = 0x92,
157+
PJ_3 = 0x93,
158+
PJ_4 = 0x94,
159+
PJ_5 = 0x95,
160+
PJ_6 = 0x96,
161+
PJ_7 = 0x97,
162+
PJ_8 = 0x98,
163+
PJ_9 = 0x99,
164+
PJ_10 = 0x9A,
165+
PJ_11 = 0x9B,
166+
PJ_12 = 0x9C,
167+
PJ_13 = 0x9D,
168+
PJ_14 = 0x9E,
169+
PJ_15 = 0x9F,
170+
PK_0 = 0xA0,
171+
PK_1 = 0xA1,
172+
PK_2 = 0xA2,
173+
PK_3 = 0xA3,
174+
PK_4 = 0xA4,
175+
PK_5 = 0xA5,
176+
PK_6 = 0xA6,
177+
PK_7 = 0xA7,
178+
179+
WL_REG_ON = PJ_1,
180+
WL_HOST_WAKE = PJ_5,
181+
WL_SDIO_0 = PC_8,
182+
WL_SDIO_1 = PC_9,
183+
WL_SDIO_2 = PC_10,
184+
WL_SDIO_3 = PC_11,
185+
WL_SDIO_CMD = PD_2,
186+
WL_SDIO_CLK = PC_12,
187+
188+
/**** ADC internal channels ****/
189+
190+
ADC_TEMP = 0xF0, // Internal pin virtual value
191+
ADC_VREF = 0xF1, // Internal pin virtual value
192+
ADC_VBAT = 0xF2, // Internal pin virtual value
193+
194+
//Led mappings
195+
LED_RED = PK_5, //Red
196+
LED_GREEN = PK_6, //Green
197+
LED_BLUE = PK_7, //Blue
198+
199+
CYBSP_BT_UART_RX = PF_6,
200+
CYBSP_BT_UART_TX = PA_15,
201+
CYBSP_BT_UART_RTS = PF_8,
202+
CYBSP_BT_UART_CTS = PF_9,
203+
204+
CYBSP_BT_POWER = PJ_12,
205+
CYBSP_BT_HOST_WAKE = PJ_13,
206+
CYBSP_BT_DEVICE_WAKE = PJ_14,
207+
208+
/**** QSPI FLASH pins ****/
209+
QSPI_FLASH1_IO0 = PD_11,
210+
QSPI_FLASH1_IO1 = PD_12,
211+
QSPI_FLASH1_IO2 = PF_7,
212+
QSPI_FLASH1_IO3 = PD_13,
213+
QSPI_FLASH1_SCK = PF_10,
214+
QSPI_FLASH1_CSN = PG_6,
215+
216+
/**** USB FS pins ****/
217+
USB_OTG_FS_DM = PA_11,
218+
USB_OTG_FS_DP = PA_12,
219+
USB_OTG_FS_ID = PA_10,
220+
USB_OTG_FS_SOF = PA_8,
221+
USB_OTG_FS_VBUS = PA_9,
222+
223+
/**** USB HS pins ****/
224+
USB_OTG_HS_DM = PB_14,
225+
USB_OTG_HS_DP = PB_15,
226+
USB_OTG_HS_ID = PB_12,
227+
USB_OTG_HS_SOF = PA_4,
228+
USB_OTG_HS_ULPI_CK = PA_5,
229+
USB_OTG_HS_ULPI_D0 = PA_3,
230+
USB_OTG_HS_ULPI_D1 = PB_0,
231+
USB_OTG_HS_ULPI_D2 = PB_1,
232+
USB_OTG_HS_ULPI_D3 = PB_10,
233+
USB_OTG_HS_ULPI_D4 = PB_11,
234+
USB_OTG_HS_ULPI_D5 = PB_12,
235+
USB_OTG_HS_ULPI_D6 = PB_13,
236+
USB_OTG_HS_ULPI_D7 = PB_5,
237+
USB_OTG_HS_ULPI_DIR = PC_2,
238+
USB_OTG_HS_ULPI_NXT = PC_3,
239+
USB_OTG_HS_ULPI_STP = PC_0,
240+
USB_OTG_HS_VBUS = PB_13,
241+
242+
/**** ETHERNET pins ****/
243+
ETH_MDC = PC_1,
244+
ETH_MDIO = PA_2,
245+
ETH_CRS_DV = PA_7,
246+
ETH_REF_CLK = PA_1,
247+
ETH_RXD0 = PC_4,
248+
ETH_RXD1 = PC_5,
249+
ETH_RX_CLK = PA_1,
250+
ETH_TXD0 = PG_13,
251+
ETH_TXD1 = PG_12,
252+
ETH_TX_EN = PG_11,
253+
254+
/**** OSCILLATOR pins ****/
255+
RCC_OSC32_IN = PC_14,
256+
RCC_OSC32_OUT = PC_15,
257+
RCC_OSC_IN = PH_0,
258+
RCC_OSC_OUT = PH_1,
259+
260+
/**** DEBUG pins ****/
261+
SYS_JTCK_SWCLK = PA_14,
262+
SYS_JTDI = PA_15,
263+
SYS_JTDO_SWO = PB_3,
264+
SYS_JTMS_SWDIO = PA_13,
265+
SYS_JTRST = PB_4,
266+
SYS_PVD_IN = PB_7,
267+
SYS_TRACECLK = PE_2,
268+
SYS_TRACED0 = PE_3,
269+
SYS_TRACED0_ALT0 = PC_1,
270+
SYS_TRACED0_ALT1 = PG_13,
271+
SYS_TRACED1 = PE_4,
272+
SYS_TRACED1_ALT0 = PC_8,
273+
SYS_TRACED1_ALT1 = PG_14,
274+
SYS_TRACED2 = PE_5,
275+
SYS_TRACED2_ALT0 = PD_2,
276+
SYS_TRACED3 = PE_6,
277+
SYS_TRACED3_ALT0 = PC_12,
278+
SYS_TRGIO = PC_7,
279+
SYS_WKUP0 = PA_0,
280+
SYS_WKUP1 = PA_2,
281+
SYS_WKUP2 = PC_13,
282+
SYS_WKUP5 = PC_1,
283+
284+
// Not connected
285+
NC = (int)0xFFFFFFFF
286+
} PinName;
287+
288+
// Standardized LED and button names
289+
#define LED1 LED_RED
290+
#define LED2 LED_GREEN
291+
#define LED3 LED_BLUE
292+
#define BUTTON1 PC_13
293+
294+
295+
296+
#ifdef __cplusplus
297+
298+
}
299+
300+
// overloads - only cpp as c does not allow overloads of functions
301+
void pinMode(PinName pinNumber, PinMode mode);
302+
void digitalWrite(PinName pinNumber, PinStatus status);
303+
int PinNameToIndex(PinName P);
304+
PinName digitalPinToPinName(pin_size_t P);
305+
306+
#endif
307+
308+
#endif

Diff for: variants/arduino_portenta_h7/variant.h

+1
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
* SPDX-License-Identifier: Apache-2.0
55
*/
66
#include "pure_analog_pins.h"
7+
#include "PinNames.h"
78

89
// TODO: correctly handle these legacy defines
910
#define MOSI 0

0 commit comments

Comments
 (0)