Skip to content

Commit e2c8084

Browse files
committed
[pin_remap 3/3] nano_nora: implement and enable pin remap
1 parent 74f723b commit e2c8084

File tree

4 files changed

+127
-54
lines changed

4 files changed

+127
-54
lines changed

boards.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23878,7 +23878,7 @@ nano_nora.build.flash_mode=dio
2387823878
nano_nora.build.boot=qio
2387923879
nano_nora.build.boot_freq=80m
2388023880
nano_nora.build.partitions=app3M_fat9M_fact512k_16MB
23881-
nano_nora.build.defines=-DBOARD_HAS_PSRAM
23881+
nano_nora.build.defines=-DBOARD_HAS_PIN_REMAP -DBOARD_HAS_PSRAM
2388223882
nano_nora.build.loop_core=-DARDUINO_RUNNING_CORE=1
2388323883
nano_nora.build.event_core=-DARDUINO_EVENT_RUNNING_CORE=1
2388423884
nano_nora.build.psram_type=opi
Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
#ifndef BOARD_USES_HW_GPIO_NUMBERS
2+
3+
#include "Arduino.h"
4+
5+
static const int8_t TO_GPIO_NUMBER[NUM_DIGITAL_PINS] = {
6+
[D0] = 44, // RX
7+
[D1] = 43, // TX
8+
[D2] = 5,
9+
[D3] = 6, // CTS
10+
[D4] = 7, // DSR
11+
[D5] = 8,
12+
[D6] = 9,
13+
[D7] = 10,
14+
[D8] = 17,
15+
[D9] = 18,
16+
[D10] = 21, // SS
17+
[D11] = 38, // MOSI
18+
[D12] = 47, // MISO
19+
[D13] = 48, // SCK, LED_BUILTIN
20+
[LED_RED] = 46,
21+
[LED_GREEN] = 0,
22+
[LED_BLUE] = 45, // RTS
23+
[A0] = 1, // DTR
24+
[A1] = 2,
25+
[A2] = 3,
26+
[A3] = 4,
27+
[A4] = 11, // SDA
28+
[A5] = 12, // SCL
29+
[A6] = 13,
30+
[A7] = 14,
31+
};
32+
33+
int8_t digitalPinToGPIONumber(int8_t digitalPin)
34+
{
35+
if ((digitalPin < 0) || (digitalPin >= NUM_DIGITAL_PINS))
36+
return -1;
37+
return TO_GPIO_NUMBER[digitalPin];
38+
}
39+
40+
int8_t gpioNumberToDigitalPin(int8_t gpioNumber)
41+
{
42+
if (gpioNumber < 0)
43+
return -1;
44+
45+
// slow linear table lookup
46+
for (int8_t digitalPin = 0; digitalPin < NUM_DIGITAL_PINS; ++digitalPin) {
47+
if (TO_GPIO_NUMBER[digitalPin] == gpioNumber)
48+
return digitalPin;
49+
}
50+
51+
// not found
52+
return -1;
53+
}
54+
55+
#endif

variants/arduino_nano_nora/pins_arduino.h

Lines changed: 68 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -8,56 +8,73 @@
88
#define USB_PID 0x0070
99

1010
#define EXTERNAL_NUM_INTERRUPTS 46
11-
#define NUM_DIGITAL_PINS 48
12-
#define NUM_ANALOG_INPUTS 20
13-
14-
#define analogInputToDigitalPin(p) (((p)<20)?(analogChannelToDigitalPin(p)):-1)
15-
#define digitalPinToInterrupt(p) (((p)<48)?(p):-1)
16-
#define digitalPinHasPWM(p) (p < 46)
17-
18-
static const uint8_t TX = 43;
19-
static const uint8_t RX = 44;
20-
static const uint8_t RTS = 45;
21-
static const uint8_t CTS = 6;
22-
static const uint8_t DTR = 1;
23-
static const uint8_t DSR = 7;
24-
25-
static const uint8_t LED_RED = 46;
26-
static const uint8_t LED_GREEN = 0;
27-
static const uint8_t LED_BLUE = 45;
28-
static const uint8_t LED_BUILTIN = 48;
29-
#define LED_BUILTIN LED_BUILTIN
30-
31-
static const uint8_t SS = 21;
32-
static const uint8_t MOSI = 38;
33-
static const uint8_t MISO = 47;
34-
static const uint8_t SCK = 48;
35-
36-
static const uint8_t A0 = 1;
37-
static const uint8_t A1 = 2;
38-
static const uint8_t A2 = 3;
39-
static const uint8_t A3 = 4;
40-
static const uint8_t A4 = 11;
41-
static const uint8_t A5 = 12;
42-
static const uint8_t A6 = 13;
43-
static const uint8_t A7 = 14;
44-
45-
static const uint8_t D0 = 44; // RX0
46-
static const uint8_t D1 = 43; // TX0
47-
static const uint8_t D2 = 5;
48-
static const uint8_t D3 = 6;
49-
static const uint8_t D4 = 7;
50-
static const uint8_t D5 = 8;
51-
static const uint8_t D6 = 9;
52-
static const uint8_t D7 = 10;
53-
54-
static const uint8_t D8 = 17;
55-
static const uint8_t D9 = 18;
56-
static const uint8_t D10 = 21; // SS
57-
static const uint8_t D11 = 38; // MOSI
58-
static const uint8_t D12 = 47; // MISO
59-
static const uint8_t D13 = 48; // SCK
60-
static const uint8_t SDA = 11;
61-
static const uint8_t SCL = 12;
11+
#define NUM_DIGITAL_PINS 25
12+
#define NUM_ANALOG_INPUTS 8
13+
14+
#define analogInputToDigitalPin(p) (p)
15+
#define digitalPinToInterrupt(p) ((((uint8_t)digitalPinToGPIONumber(p)) < 48)? digitalPinToGPIONumber(p) : -1)
16+
#define digitalPinHasPWM(p) (((uint8_t)digitalPinToGPIONumber(p)) < 46)
17+
18+
#ifndef __cplusplus
19+
#define constexpr const
20+
#endif
21+
22+
// primary pin names
23+
24+
static constexpr uint8_t D0 = 0; // also RX
25+
static constexpr uint8_t D1 = 1; // also TX
26+
static constexpr uint8_t D2 = 2;
27+
static constexpr uint8_t D3 = 3; // also CTS
28+
static constexpr uint8_t D4 = 4; // also DSR
29+
static constexpr uint8_t D5 = 5;
30+
static constexpr uint8_t D6 = 6;
31+
static constexpr uint8_t D7 = 7;
32+
static constexpr uint8_t D8 = 8;
33+
static constexpr uint8_t D9 = 9;
34+
static constexpr uint8_t D10 = 10; // also SS
35+
static constexpr uint8_t D11 = 11; // also MOSI
36+
static constexpr uint8_t D12 = 12; // also MISO
37+
static constexpr uint8_t D13 = 13; // also SCK, LED_BUILTIN
38+
static constexpr uint8_t LED_RED = 14;
39+
static constexpr uint8_t LED_GREEN = 15;
40+
static constexpr uint8_t LED_BLUE = 16; // also RTS
41+
42+
static constexpr uint8_t A0 = 17; // also DTR
43+
static constexpr uint8_t A1 = 18;
44+
static constexpr uint8_t A2 = 19;
45+
static constexpr uint8_t A3 = 20;
46+
static constexpr uint8_t A4 = 21; // also SDA
47+
static constexpr uint8_t A5 = 22; // also SCL
48+
static constexpr uint8_t A6 = 23;
49+
static constexpr uint8_t A7 = 24;
50+
51+
// alternate pin functions
52+
53+
static constexpr uint8_t LED_BUILTIN = D13;
54+
55+
static constexpr uint8_t TX = D1;
56+
static constexpr uint8_t RX = D0;
57+
static constexpr uint8_t RTS = LED_BLUE;
58+
static constexpr uint8_t CTS = D3;
59+
static constexpr uint8_t DTR = A0;
60+
static constexpr uint8_t DSR = D4;
61+
62+
static constexpr uint8_t SS = D10;
63+
static constexpr uint8_t MOSI = D11;
64+
static constexpr uint8_t MISO = D12;
65+
static constexpr uint8_t SCK = D13;
66+
67+
static constexpr uint8_t SDA = A4;
68+
static constexpr uint8_t SCL = A5;
69+
70+
#define PIN_I2S_SCK D7
71+
#define PIN_I2S_FS D8
72+
#define PIN_I2S_SD D9
73+
#define PIN_I2S_SD_OUT D9 // same as bidir
74+
#define PIN_I2S_SD_IN D10
75+
76+
#ifndef __cplusplus
77+
#undef constexpr
78+
#endif
6279

6380
#endif /* Pins_Arduino_h */

variants/arduino_nano_nora/variant.cpp

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,11 @@
1-
#include "Arduino.h"
1+
// Enable pin remapping in this file, so pin constants are meaningful
2+
#undef ARDUINO_CORE_BUILD
23

4+
#include "Arduino.h"
35

46
extern "C" {
57
void initVariant() {
68
}
7-
// TODO: provide override for functions with pin numbers
89
}
910

1011
// defines an "Update" object accessed only by this translation unit

0 commit comments

Comments
 (0)