diff options
author | Manuel Coenen <manuel@duet3d.com> | 2021-01-26 14:33:52 +0300 |
---|---|---|
committer | Manuel Coenen <manuel@duet3d.com> | 2021-01-26 14:33:52 +0300 |
commit | 93fa897014e5e78df6667211e4dab87625f7b800 (patch) | |
tree | a814aadad2b430925a8cba70a1c1227503edd06f /src/DuetM | |
parent | 806d32c60b784d29b908e07d9c97d3d81714ff79 (diff) |
Convert Maestro build to CoreN2G
Diffstat (limited to 'src/DuetM')
-rw-r--r-- | src/DuetM/Pins_DuetM.cpp | 16 | ||||
-rw-r--r-- | src/DuetM/Pins_DuetM.h | 362 |
2 files changed, 155 insertions, 223 deletions
diff --git a/src/DuetM/Pins_DuetM.cpp b/src/DuetM/Pins_DuetM.cpp index 07461c6e..8fcbda72 100644 --- a/src/DuetM/Pins_DuetM.cpp +++ b/src/DuetM/Pins_DuetM.cpp @@ -9,9 +9,15 @@ // Hardware-dependent pins functions -// Function to look up a pin name pass back the corresponding index into the pin table +// Return a pointer to the pin description entry. Declared in and called from CoreN2G. +const PinDescriptionBase *AppGetPinDescription(Pin p) noexcept +{ + return (p < ARRAY_SIZE(PinTable)) ? &PinTable[p] : nullptr; +} + +// Function to look up a pin name and pass back the corresponding index into the pin table // On this platform, the mapping from pin names to pins is fixed, so this is a simple lookup -bool LookupPinName(const char*pn, LogicalPin& lpin, bool& hardwareInverted) noexcept +bool LookupPinName(const char *pn, LogicalPin &lpin, bool &hardwareInverted) noexcept { if (StringEqualsIgnoreCase(pn, NoPinName)) { @@ -22,7 +28,11 @@ bool LookupPinName(const char*pn, LogicalPin& lpin, bool& hardwareInverted) noex for (size_t lp = 0; lp < ARRAY_SIZE(PinTable); ++lp) { - const char *q = PinTable[lp].names; + const char *q = PinTable[lp].pinNames; + if (q == nullptr) + { + continue; + } while (*q != 0) { // Try the next alias in the list of names for this pin diff --git a/src/DuetM/Pins_DuetM.h b/src/DuetM/Pins_DuetM.h index 6a4ea490..b554a14f 100644 --- a/src/DuetM/Pins_DuetM.h +++ b/src/DuetM/Pins_DuetM.h @@ -8,6 +8,8 @@ #ifndef SRC_DUETM_PINS_DUETM_H_ #define SRC_DUETM_PINS_DUETM_H_ +#include <PinDescription.h> + #define BOARD_NAME "Duet 2 Maestro" #define BOARD_SHORT_NAME "2Maestro" #define FIRMWARE_NAME "RepRapFirmware for Duet 2 Maestro" @@ -104,11 +106,24 @@ constexpr Pin ENABLE_PINS[NumDirectDrivers] = { NoPin, NoPin, NoPin, NoPin, NoPi constexpr Pin STEP_PINS[NumDirectDrivers] = { PortCPin(20), PortCPin(2), PortCPin(28), PortCPin(4), PortCPin(5), PortCPin(31), PortCPin(21) }; constexpr Pin DIRECTION_PINS[NumDirectDrivers] = { PortCPin(18), PortAPin(8), PortBPin(4), PortBPin(7), PortCPin(6), PortAPin(18), PortCPin(24) }; +// Serial +// UART0 used by TMC drivers +constexpr Pin APIN_UART0_RXD = PortAPin(9); +constexpr Pin APIN_UART0_TXD = PortAPin(10); +constexpr GpioPinFunction USART0PeriphMode = GpioPinFunction::A; + +// Serial0 uses UART1 +constexpr Pin APIN_Serial0_RXD = PortAPin(2); +constexpr Pin APIN_Serial0_TXD = PortAPin(3); +constexpr GpioPinFunction Serial0PeriphMode = GpioPinFunction::A; + // UART interface to stepper drivers Uart * const UART_TMC22xx = UART0; constexpr IRQn TMC22xx_UART_IRQn = UART0_IRQn; constexpr uint32_t ID_TMC22xx_UART = ID_UART0; -constexpr uint8_t TMC22xx_UART_PINS = APINS_UART0; +constexpr Pin TMC22xxUartRxPin = APIN_UART0_RXD; +constexpr Pin TMC22xxUartTxPin = APIN_UART0_TXD; +constexpr GpioPinFunction TMC22xxUartPeriphMode = USART0PeriphMode; #define TMC22xx_UART_Handler UART0_Handler @@ -194,243 +209,150 @@ constexpr Pin EncoderPinSw = PortAPin(7); #define USART_SSPI USART0 #define ID_SSPI ID_USART0 -// Enum to represent allowed types of pin access -// We don't have a separate bit for servo, because Duet PWM-capable ports can be used for servos if they are on the Duet main board -enum class PinCapability: uint8_t -{ - // Individual capabilities - read = 1, - ain = 2, - write = 4, - pwm = 8, - - // Combinations - ainr = 1|2, - rw = 1|4, - wpwm = 4|8, - rwpwm = 1|4|8, - ainrw = 1|2|4, - ainrwpwm = 1|2|4|8 -}; - -constexpr inline PinCapability operator|(PinCapability a, PinCapability b) noexcept -{ - return (PinCapability)((uint8_t)a | (uint8_t)b); -} - -// Struct to represent a pin that can be assigned to various functions -// This can be varied to suit the hardware. It is a struct not a class so that it can be direct initialised in read-only memory. -struct PinEntry -{ - Pin GetPin() const noexcept { return pin; } - PinCapability GetCapability() const noexcept { return cap; } - const char* GetNames() const noexcept { return names; } - - Pin pin; - PinCapability cap; - const char *names; -}; - -// List of assignable pins and their mapping from names to MPU ports. This is indexed by logical pin number. -// The names must match user input that has been concerted to lowercase and had _ and - characters stripped out. -// Aliases are separate by the , character. -// If a pin name is prefixed by ! then this means the pin is hardware inverted. The same pin may have names for both the inverted and non-inverted cases, -// for example the inverted heater pins on the expansion connector are available as non-inverted servo pins on a DueX. -constexpr PinEntry PinTable[] = -{ - // Heater outputs - { PortCPin(0), PinCapability::wpwm, "!bedheat" }, - { PortCPin(1), PinCapability::wpwm, "!e0heat" }, - { PortAPin(16), PinCapability::wpwm, "!e1heat" }, - - // Fan outputs - { PortCPin(23), PinCapability::wpwm, "fan0" }, - { PortCPin(22), PinCapability::wpwm, "fan1" }, - { PortCPin(29), PinCapability::wpwm, "fan2" }, - - // Endstop inputs - { PortAPin(24), PinCapability::read, "xstop" }, - { PortBPin(6), PinCapability::read, "ystop" }, - { PortCPin(10), PinCapability::read, "zstop" }, - { PortAPin(25), PinCapability::read, "e0stop" }, - { PortCPin(7), PinCapability::read, "e1stop" }, - - // Thermistor inputs - { PortAPin(20), PinCapability::ainr, "bedtemp" }, - { PortBPin(0), PinCapability::ainr, "e0temp" }, - { PortCPin(30), PinCapability::ainr, "e1temp" }, - { PortBPin(1), PinCapability::ainr, "ctemp" }, - - // SPI CS signals on the daughter board connector - { PortBPin(14), PinCapability::rw, "spi.cs1" }, - { PortCPin(19), PinCapability::rw, "spi.cs2" }, - - // Misc - { Z_PROBE_PIN, PinCapability::ainr, "zprobe.in" }, - { Z_PROBE_MOD_PIN, PinCapability::write, "zprobe.mod,servo" }, - { ATX_POWER_PIN, PinCapability::write, "pson" }, - { PortBPin(2), PinCapability::rw, "urxd" }, - { PortBPin(3), PinCapability::rw, "utxd" }, - { PortAPin(21), PinCapability::ainrw, "exp.pa21" }, // also used by ST7567 LCD controllers - { PortAPin(22), PinCapability::ainrw, "exp.pa22" }, - { PortAPin(3), PinCapability::rw, "exp.pa3,twd0" }, - { PortAPin(4), PinCapability::rw, "exp.pa4,twck0" }, -}; - -#if 0 constexpr PinDescription PinTable[] = { // TC PWM ADC Capability PinNames // Port A - { TcOutput::none, PwmOutput::none, AdcInput::none, PinCapability::none, nullptr }, // PA00 - { TcOutput::none, PwmOutput::none, AdcInput::none, PinCapability::none, nullptr }, // PA01 - { TcOutput::none, PwmOutput::none, AdcInput::none, PinCapability::none, nullptr }, // PA02 - { TcOutput::none, PwmOutput::none, AdcInput::none, PinCapability::none, nullptr }, // PA03 - { TcOutput::none, PwmOutput::none, AdcInput::none, PinCapability::none, nullptr }, // PA04 - { TcOutput::none, PwmOutput::none, AdcInput::none, PinCapability::none, nullptr }, // PA05 - { TcOutput::none, PwmOutput::none, AdcInput::none, PinCapability::none, nullptr }, // PA06 - { TcOutput::none, PwmOutput::none, AdcInput::none, PinCapability::none, nullptr }, // PA07 - { TcOutput::none, PwmOutput::none, AdcInput::none, PinCapability::none, nullptr }, // PA08 - { TcOutput::none, PwmOutput::none, AdcInput::none, PinCapability::none, nullptr }, // PA09 - { TcOutput::none, PwmOutput::none, AdcInput::none, PinCapability::none, nullptr }, // PA10 - { TcOutput::none, PwmOutput::none, AdcInput::none, PinCapability::none, nullptr }, // PA11 - { TcOutput::none, PwmOutput::none, AdcInput::none, PinCapability::none, nullptr }, // PA12 - { TcOutput::none, PwmOutput::none, AdcInput::none, PinCapability::none, nullptr }, // PA13 - { TcOutput::none, PwmOutput::none, AdcInput::none, PinCapability::none, nullptr }, // PA14 - { TcOutput::none, PwmOutput::none, AdcInput::none, PinCapability::none, nullptr }, // PA15 - { TcOutput::none, PwmOutput::none, AdcInput::none, PinCapability::none, nullptr }, // PA16 - { TcOutput::none, PwmOutput::none, AdcInput::none, PinCapability::none, nullptr }, // PA17 - { TcOutput::none, PwmOutput::none, AdcInput::none, PinCapability::none, nullptr }, // PA18 - { TcOutput::none, PwmOutput::none, AdcInput::none, PinCapability::none, nullptr }, // PA19 - { TcOutput::none, PwmOutput::none, AdcInput::none, PinCapability::none, nullptr }, // PA20 - { TcOutput::none, PwmOutput::none, AdcInput::none, PinCapability::none, nullptr }, // PA21 - { TcOutput::none, PwmOutput::none, AdcInput::none, PinCapability::none, nullptr }, // PA22 - { TcOutput::none, PwmOutput::none, AdcInput::none, PinCapability::none, nullptr }, // PA23 - { TcOutput::none, PwmOutput::none, AdcInput::none, PinCapability::none, nullptr }, // PA24 - { TcOutput::none, PwmOutput::none, AdcInput::none, PinCapability::none, nullptr }, // PA25 - { TcOutput::none, PwmOutput::none, AdcInput::none, PinCapability::none, nullptr }, // PA26 - { TcOutput::none, PwmOutput::none, AdcInput::none, PinCapability::none, nullptr }, // PA27 - { TcOutput::none, PwmOutput::none, AdcInput::none, PinCapability::none, nullptr }, // PA28 - { TcOutput::none, PwmOutput::none, AdcInput::none, PinCapability::none, nullptr }, // PA29 - { TcOutput::none, PwmOutput::none, AdcInput::none, PinCapability::none, nullptr }, // PA30 - { TcOutput::none, PwmOutput::none, AdcInput::none, PinCapability::none, nullptr }, // PA31 + { TcOutput::none, PwmOutput::none, AdcInput::none, PinCapability::write, "pson" }, // PA00 PS_ON + { TcOutput::none, PwmOutput::none, AdcInput::none, PinCapability::none, nullptr }, // PA01 ENN to all stepper drivers + { TcOutput::none, PwmOutput::none, AdcInput::none, PinCapability::none, nullptr }, // PA02 SCK0 (daughter boards, external SD card) + { TcOutput::none, PwmOutput::none, AdcInput::none, PinCapability::rw, "exp.pa3,twd0" }, // PA03 TWD0 (expansion) + { TcOutput::none, PwmOutput::none, AdcInput::none, PinCapability::rw, "exp.pa4,twck0" }, // PA04 TWCK0 (expansion) + { TcOutput::none, PwmOutput::none, AdcInput::none, PinCapability::none, nullptr }, // PA05 RXD0 (daughter boards, external SD card) + { TcOutput::none, PwmOutput::none, AdcInput::none, PinCapability::none, nullptr }, // PA06 TXD0 (daughter boards, external SD card) + { TcOutput::none, PwmOutput::none, AdcInput::none, PinCapability::none, nullptr }, // PA07 LCD ENC_SW + { TcOutput::none, PwmOutput::none, AdcInput::none, PinCapability::none, nullptr }, // PA08 Y dir + { TcOutput::none, PwmOutput::none, AdcInput::none, PinCapability::none, nullptr }, // PA09 Stepper drivers UART + { TcOutput::none, PwmOutput::none, AdcInput::none, PinCapability::none, nullptr }, // PA10 Stepper drivers UART + { TcOutput::none, PwmOutput::none, AdcInput::none, PinCapability::none, nullptr }, // PA11 NPCS0 (W5500) + { TcOutput::none, PwmOutput::none, AdcInput::none, PinCapability::none, nullptr }, // PA12 MISO (W5500) + { TcOutput::none, PwmOutput::none, AdcInput::none, PinCapability::none, nullptr }, // PA13 MOSI (W5500) + { TcOutput::none, PwmOutput::none, AdcInput::none, PinCapability::none, nullptr }, // PA14 SPCK (W5500) + { TcOutput::tioa1, PwmOutput::none, AdcInput::none, PinCapability::none, nullptr }, // PA15 LCD beep + { TcOutput::none, PwmOutput::pwm0l2_c,AdcInput::none, PinCapability::wpwm, "!e1heat" }, // PA16 Heater 2 + { TcOutput::none, PwmOutput::none, AdcInput::adc0_0, PinCapability::none, nullptr }, // PA17 VREF_MON + { TcOutput::none, PwmOutput::none, AdcInput::adc0_1, PinCapability::none, nullptr }, // PA18 E2 dir + { TcOutput::none, PwmOutput::none, AdcInput::adc0_2, PinCapability::none, nullptr }, // PA19 VSSA_MON + { TcOutput::none, PwmOutput::none, AdcInput::adc0_3, PinCapability::ainr, "bedtemp" }, // PA20 Thermistor 0 + { TcOutput::none, PwmOutput::none, AdcInput::adc0_8, PinCapability::ainrw, "exp.pa21" }, // PA21 Analogue, digital or UART expansion + { TcOutput::none, PwmOutput::none, AdcInput::adc0_9, PinCapability::ainrw, "exp.pa22" }, // PA22 Analogue, digital or UART expansion + { TcOutput::none, PwmOutput::none, AdcInput::none, PinCapability::none, nullptr }, // PA23 W5500 interrupt + { TcOutput::none, PwmOutput::none, AdcInput::none, PinCapability::read, "xstop" }, // PA24 X stop + { TcOutput::none, PwmOutput::none, AdcInput::none, PinCapability::read, "e0stop" }, // PA25 E0 stop + { TcOutput::none, PwmOutput::none, AdcInput::none, PinCapability::none, nullptr }, // PA26 HSMCI MCDA2 + { TcOutput::none, PwmOutput::none, AdcInput::none, PinCapability::none, nullptr }, // PA27 HSMCI MCDA3 + { TcOutput::none, PwmOutput::none, AdcInput::none, PinCapability::none, nullptr }, // PA28 HSMCI MCCDA + { TcOutput::none, PwmOutput::none, AdcInput::none, PinCapability::none, nullptr }, // PA29 HSMCI MCCK + { TcOutput::none, PwmOutput::none, AdcInput::none, PinCapability::none, nullptr }, // PA30 HSMCI MCDA0 + { TcOutput::none, PwmOutput::none, AdcInput::none, PinCapability::none, nullptr }, // PA31 HSMCI MCDA1 // Port B - { TcOutput::none, PwmOutput::none, AdcInput::none, PinCapability::none, nullptr }, // PB00 - { TcOutput::none, PwmOutput::none, AdcInput::none, PinCapability::none, nullptr }, // PB01 - { TcOutput::none, PwmOutput::none, AdcInput::none, PinCapability::none, nullptr }, // PB02 - { TcOutput::none, PwmOutput::none, AdcInput::none, PinCapability::none, nullptr }, // PB03 - { TcOutput::none, PwmOutput::none, AdcInput::none, PinCapability::none, nullptr }, // PB04 - { TcOutput::none, PwmOutput::none, AdcInput::none, PinCapability::none, nullptr }, // PB05 - { TcOutput::none, PwmOutput::none, AdcInput::none, PinCapability::none, nullptr }, // PB06 - { TcOutput::none, PwmOutput::none, AdcInput::none, PinCapability::none, nullptr }, // PB07 + { TcOutput::none, PwmOutput::none, AdcInput::adc0_4, PinCapability::ainr, "e0temp" }, // PB00 Thermistor 1 + { TcOutput::none, PwmOutput::none, AdcInput::adc0_5, PinCapability::ainr, "ctemp" }, // PB01 Thermistor 3 + { TcOutput::none, PwmOutput::none, AdcInput::none, PinCapability::rw, "urxd" }, // PB02 URXD0 PanelDue Dout + { TcOutput::none, PwmOutput::none, AdcInput::none, PinCapability::rw, "utxd" }, // PB03 UTXD0 PanelDue Din + { TcOutput::none, PwmOutput::none, AdcInput::none, PinCapability::none, nullptr }, // PB04 Z dir + { TcOutput::none, PwmOutput::none, AdcInput::none, PinCapability::none, nullptr }, // PB05 LCD ENC_A + { TcOutput::none, PwmOutput::none, AdcInput::none, PinCapability::read, "ystop" }, // PB06 Y stop + { TcOutput::none, PwmOutput::none, AdcInput::none, PinCapability::none, nullptr }, // PB07 E0 dir { TcOutput::none, PwmOutput::none, AdcInput::none, PinCapability::none, nullptr }, // PB08 { TcOutput::none, PwmOutput::none, AdcInput::none, PinCapability::none, nullptr }, // PB09 { TcOutput::none, PwmOutput::none, AdcInput::none, PinCapability::none, nullptr }, // PB10 { TcOutput::none, PwmOutput::none, AdcInput::none, PinCapability::none, nullptr }, // PB11 { TcOutput::none, PwmOutput::none, AdcInput::none, PinCapability::none, nullptr }, // PB12 - { TcOutput::none, PwmOutput::none, AdcInput::none, PinCapability::none, nullptr }, // PB13 - { TcOutput::none, PwmOutput::none, AdcInput::none, PinCapability::none, nullptr }, // PB14 - { TcOutput::none, PwmOutput::none, AdcInput::none, PinCapability::none, nullptr }, // PB15 - { TcOutput::none, PwmOutput::none, AdcInput::none, PinCapability::none, nullptr }, // PB16 - { TcOutput::none, PwmOutput::none, AdcInput::none, PinCapability::none, nullptr }, // PB17 - { TcOutput::none, PwmOutput::none, AdcInput::none, PinCapability::none, nullptr }, // PB18 - { TcOutput::none, PwmOutput::none, AdcInput::none, PinCapability::none, nullptr }, // PB19 - { TcOutput::none, PwmOutput::none, AdcInput::none, PinCapability::none, nullptr }, // PB20 - { TcOutput::none, PwmOutput::none, AdcInput::none, PinCapability::none, nullptr }, // PB21 - { TcOutput::none, PwmOutput::none, AdcInput::none, PinCapability::none, nullptr }, // PB22 - { TcOutput::none, PwmOutput::none, AdcInput::none, PinCapability::none, nullptr }, // PB23 - { TcOutput::none, PwmOutput::none, AdcInput::none, PinCapability::none, nullptr }, // PB24 - { TcOutput::none, PwmOutput::none, AdcInput::none, PinCapability::none, nullptr }, // PB25 - { TcOutput::none, PwmOutput::none, AdcInput::none, PinCapability::none, nullptr }, // PB26 - { TcOutput::none, PwmOutput::none, AdcInput::none, PinCapability::none, nullptr }, // PB27 - { TcOutput::none, PwmOutput::none, AdcInput::none, PinCapability::none, nullptr }, // PB28 - { TcOutput::none, PwmOutput::none, AdcInput::none, PinCapability::none, nullptr }, // PB29 - { TcOutput::none, PwmOutput::none, AdcInput::none, PinCapability::none, nullptr }, // PB30 - { TcOutput::none, PwmOutput::none, AdcInput::none, PinCapability::none, nullptr }, // PB31 + { TcOutput::none, PwmOutput::none, AdcInput::dac0, PinCapability::none, nullptr }, // PB13 SPI0_CS0 (external SD card) + { TcOutput::none, PwmOutput::none, AdcInput::dac1, PinCapability::rw, "spi.cs1" }, // PB14 SPI0_CS1 (daughter boards) + { TcOutput::none, PwmOutput::none, AdcInput::none, PinCapability::none, nullptr }, // PB15 not on chip + { TcOutput::none, PwmOutput::none, AdcInput::none, PinCapability::none, nullptr }, // PB16 not on chip + { TcOutput::none, PwmOutput::none, AdcInput::none, PinCapability::none, nullptr }, // PB17 not on chip + { TcOutput::none, PwmOutput::none, AdcInput::none, PinCapability::none, nullptr }, // PB18 not on chip + { TcOutput::none, PwmOutput::none, AdcInput::none, PinCapability::none, nullptr }, // PB19 not on chip + { TcOutput::none, PwmOutput::none, AdcInput::none, PinCapability::none, nullptr }, // PB20 not on chip + { TcOutput::none, PwmOutput::none, AdcInput::none, PinCapability::none, nullptr }, // PB21 not on chip + { TcOutput::none, PwmOutput::none, AdcInput::none, PinCapability::none, nullptr }, // PB22 not on chip + { TcOutput::none, PwmOutput::none, AdcInput::none, PinCapability::none, nullptr }, // PB23 not on chip + { TcOutput::none, PwmOutput::none, AdcInput::none, PinCapability::none, nullptr }, // PB24 not on chip + { TcOutput::none, PwmOutput::none, AdcInput::none, PinCapability::none, nullptr }, // PB25 not on chip + { TcOutput::none, PwmOutput::none, AdcInput::none, PinCapability::none, nullptr }, // PB26 not on chip + { TcOutput::none, PwmOutput::none, AdcInput::none, PinCapability::none, nullptr }, // PB27 not on chip + { TcOutput::none, PwmOutput::none, AdcInput::none, PinCapability::none, nullptr }, // PB28 not on chip + { TcOutput::none, PwmOutput::none, AdcInput::none, PinCapability::none, nullptr }, // PB29 not on chip + { TcOutput::none, PwmOutput::none, AdcInput::none, PinCapability::none, nullptr }, // PB30 not on chip + { TcOutput::none, PwmOutput::none, AdcInput::none, PinCapability::none, nullptr }, // PB31 not on chip // Port C - { TcOutput::none, PwmOutput::none, AdcInput::none, PinCapability::none, nullptr }, // PC00 - { TcOutput::none, PwmOutput::none, AdcInput::none, PinCapability::none, nullptr }, // PC01 - { TcOutput::none, PwmOutput::none, AdcInput::none, PinCapability::none, nullptr }, // PC02 - { TcOutput::none, PwmOutput::none, AdcInput::none, PinCapability::none, nullptr }, // PC03 - { TcOutput::none, PwmOutput::none, AdcInput::none, PinCapability::none, nullptr }, // PC04 - { TcOutput::none, PwmOutput::none, AdcInput::none, PinCapability::none, nullptr }, // PC05 - { TcOutput::none, PwmOutput::none, AdcInput::none, PinCapability::none, nullptr }, // PC06 - { TcOutput::none, PwmOutput::none, AdcInput::none, PinCapability::none, nullptr }, // PC07 - { TcOutput::none, PwmOutput::none, AdcInput::none, PinCapability::none, nullptr }, // PC08 - { TcOutput::none, PwmOutput::none, AdcInput::none, PinCapability::none, nullptr }, // PC09 - { TcOutput::none, PwmOutput::none, AdcInput::none, PinCapability::none, nullptr }, // PC10 - { TcOutput::none, PwmOutput::none, AdcInput::none, PinCapability::none, nullptr }, // PC11 - { TcOutput::none, PwmOutput::none, AdcInput::none, PinCapability::none, nullptr }, // PC12 - { TcOutput::none, PwmOutput::none, AdcInput::none, PinCapability::none, nullptr }, // PC13 - { TcOutput::none, PwmOutput::none, AdcInput::none, PinCapability::none, nullptr }, // PC14 - { TcOutput::none, PwmOutput::none, AdcInput::none, PinCapability::none, nullptr }, // PC15 - { TcOutput::none, PwmOutput::none, AdcInput::none, PinCapability::none, nullptr }, // PC16 - { TcOutput::none, PwmOutput::none, AdcInput::none, PinCapability::none, nullptr }, // PC17 - { TcOutput::none, PwmOutput::none, AdcInput::none, PinCapability::none, nullptr }, // PC18 - { TcOutput::none, PwmOutput::none, AdcInput::none, PinCapability::none, nullptr }, // PC19 - { TcOutput::none, PwmOutput::none, AdcInput::none, PinCapability::none, nullptr }, // PC20 - { TcOutput::none, PwmOutput::none, AdcInput::none, PinCapability::none, nullptr }, // PC21 - { TcOutput::none, PwmOutput::none, AdcInput::none, PinCapability::none, nullptr }, // PC22 - { TcOutput::none, PwmOutput::none, AdcInput::none, PinCapability::none, nullptr }, // PC23 - { TcOutput::none, PwmOutput::none, AdcInput::none, PinCapability::none, nullptr }, // PC24 - { TcOutput::none, PwmOutput::none, AdcInput::none, PinCapability::none, nullptr }, // PC25 - { TcOutput::none, PwmOutput::none, AdcInput::none, PinCapability::none, nullptr }, // PC26 - { TcOutput::none, PwmOutput::none, AdcInput::none, PinCapability::none, nullptr }, // PC27 - { TcOutput::none, PwmOutput::none, AdcInput::none, PinCapability::none, nullptr }, // PC28 - { TcOutput::none, PwmOutput::none, AdcInput::none, PinCapability::none, nullptr }, // PC29 - { TcOutput::none, PwmOutput::none, AdcInput::none, PinCapability::none, nullptr }, // PC30 - { TcOutput::none, PwmOutput::none, AdcInput::none, PinCapability::none, nullptr }, // PC31 - - // PORT D - { TcOutput::none, PwmOutput::none, AdcInput::none, PinCapability::none, nullptr }, // PD00 - { TcOutput::none, PwmOutput::none, AdcInput::none, PinCapability::none, nullptr }, // PD01 - { TcOutput::none, PwmOutput::none, AdcInput::none, PinCapability::none, nullptr }, // PD02 - { TcOutput::none, PwmOutput::none, AdcInput::none, PinCapability::none, nullptr }, // PD03 - { TcOutput::none, PwmOutput::none, AdcInput::none, PinCapability::none, nullptr }, // PD04 - { TcOutput::none, PwmOutput::none, AdcInput::none, PinCapability::none, nullptr }, // PD05 - { TcOutput::none, PwmOutput::none, AdcInput::none, PinCapability::none, nullptr }, // PD06 - { TcOutput::none, PwmOutput::none, AdcInput::none, PinCapability::none, nullptr }, // PD07 - { TcOutput::none, PwmOutput::none, AdcInput::none, PinCapability::none, nullptr }, // PD08 - { TcOutput::none, PwmOutput::none, AdcInput::none, PinCapability::none, nullptr }, // PD09 - { TcOutput::none, PwmOutput::none, AdcInput::none, PinCapability::none, nullptr }, // PD10 - { TcOutput::none, PwmOutput::none, AdcInput::none, PinCapability::none, nullptr }, // PD11 - { TcOutput::none, PwmOutput::none, AdcInput::none, PinCapability::none, nullptr }, // PD12 - { TcOutput::none, PwmOutput::none, AdcInput::none, PinCapability::none, nullptr }, // PD13 - { TcOutput::none, PwmOutput::none, AdcInput::none, PinCapability::none, nullptr }, // PD14 - { TcOutput::none, PwmOutput::none, AdcInput::none, PinCapability::none, nullptr }, // PD15 - { TcOutput::none, PwmOutput::none, AdcInput::none, PinCapability::none, nullptr }, // PD16 - { TcOutput::none, PwmOutput::none, AdcInput::none, PinCapability::none, nullptr }, // PD17 - { TcOutput::none, PwmOutput::none, AdcInput::none, PinCapability::none, nullptr }, // PD18 - { TcOutput::none, PwmOutput::none, AdcInput::none, PinCapability::none, nullptr }, // PD19 - { TcOutput::none, PwmOutput::none, AdcInput::none, PinCapability::none, nullptr }, // PD20 - { TcOutput::none, PwmOutput::none, AdcInput::none, PinCapability::none, nullptr }, // PD21 - { TcOutput::none, PwmOutput::none, AdcInput::none, PinCapability::none, nullptr }, // PD22 - { TcOutput::none, PwmOutput::none, AdcInput::none, PinCapability::none, nullptr }, // PD23 - { TcOutput::none, PwmOutput::none, AdcInput::none, PinCapability::none, nullptr }, // PD24 - { TcOutput::none, PwmOutput::none, AdcInput::none, PinCapability::none, nullptr }, // PD25 - { TcOutput::none, PwmOutput::none, AdcInput::none, PinCapability::none, nullptr }, // PD26 - { TcOutput::none, PwmOutput::none, AdcInput::none, PinCapability::none, nullptr }, // PD27 - { TcOutput::none, PwmOutput::none, AdcInput::none, PinCapability::none, nullptr }, // PD28 - { TcOutput::none, PwmOutput::none, AdcInput::none, PinCapability::none, nullptr }, // PD29 - { TcOutput::none, PwmOutput::none, AdcInput::none, PinCapability::none, nullptr }, // PD30 - { TcOutput::none, PwmOutput::none, AdcInput::none, PinCapability::none, nullptr }, // PD31 - - // Port E - { TcOutput::none, PwmOutput::none, AdcInput::none, PinCapability::none, nullptr }, // PE00 - { TcOutput::none, PwmOutput::none, AdcInput::none, PinCapability::none, nullptr }, // PE01 - { TcOutput::none, PwmOutput::none, AdcInput::none, PinCapability::none, nullptr }, // PE02 - { TcOutput::none, PwmOutput::none, AdcInput::none, PinCapability::none, nullptr }, // PE03 - { TcOutput::none, PwmOutput::none, AdcInput::none, PinCapability::none, nullptr }, // PE04 - { TcOutput::none, PwmOutput::none, AdcInput::none, PinCapability::none, nullptr }, // PE05 + { TcOutput::none, PwmOutput::pwm0l0_b,AdcInput::none, PinCapability::wpwm, "!bedheat" }, // PC00 Heater 0 + { TcOutput::none, PwmOutput::pwm0l1_b,AdcInput::none, PinCapability::wpwm, "!e0heat" }, // PC01 Heater 1 + { TcOutput::none, PwmOutput::pwm0l2_b,AdcInput::none, PinCapability::none, nullptr }, // PC02 Y step + { TcOutput::none, PwmOutput::none, AdcInput::none, PinCapability::none, nullptr }, // PC03 ENC_B + { TcOutput::none, PwmOutput::none, AdcInput::none, PinCapability::none, nullptr }, // PC04 E0 step + { TcOutput::none, PwmOutput::none, AdcInput::none, PinCapability::none, nullptr }, // PC05 E1 step + { TcOutput::none, PwmOutput::none, AdcInput::none, PinCapability::none, nullptr }, // PC06 E1 dir + { TcOutput::none, PwmOutput::none, AdcInput::none, PinCapability::read, "e1stop" }, // PC07 E1 stop + { TcOutput::none, PwmOutput::none, AdcInput::none, PinCapability::none, nullptr }, // PC08 SD card detect + { TcOutput::none, PwmOutput::none, AdcInput::none, PinCapability::none, nullptr }, // PC09 LCD CS + { TcOutput::none, PwmOutput::none, AdcInput::none, PinCapability::read, "zstop" }, // PC10 Z stop + { TcOutput::none, PwmOutput::none, AdcInput::none, PinCapability::none, nullptr }, // PC11 USB Vbus monitor + { TcOutput::none, PwmOutput::none, AdcInput::adc0_12, PinCapability::none, nullptr }, // PC12 VIN voltage monitor + { TcOutput::none, PwmOutput::none, AdcInput::none, PinCapability::none, nullptr }, // PC13 W5500 reset + { TcOutput::none, PwmOutput::none, AdcInput::none, PinCapability::none, nullptr }, // PC14 MUX0 + { TcOutput::none, PwmOutput::none, AdcInput::adc0_11, PinCapability::ainr, "zprobe.in" }, // PC15 Z probe input + { TcOutput::none, PwmOutput::none, AdcInput::none, PinCapability::none, nullptr }, // PC16 MUX1 + { TcOutput::none, PwmOutput::none, AdcInput::none, PinCapability::none, nullptr }, // PC17 MUX2 + { TcOutput::none, PwmOutput::none, AdcInput::none, PinCapability::none, nullptr }, // PC18 X dir + { TcOutput::none, PwmOutput::none, AdcInput::none, PinCapability::rw, "spi.cs2" }, // PC19 SPI0_CS2 + { TcOutput::none, PwmOutput::none, AdcInput::none, PinCapability::none, nullptr }, // PC20 X step + { TcOutput::none, PwmOutput::none, AdcInput::none, PinCapability::none, nullptr }, // PC21 E3 step + { TcOutput::none, PwmOutput::pwm0l3_b,AdcInput::none, PinCapability::wpwm, "fan1" }, // PC22 Fan 1 + { TcOutput::tioa3, PwmOutput::none, AdcInput::none, PinCapability::wpwm, "fan0" }, // PC23 Fan 0 + { TcOutput::none, PwmOutput::none, AdcInput::none, PinCapability::none, nullptr }, // PC24 E3 dir + { TcOutput::none, PwmOutput::none, AdcInput::none, PinCapability::none, nullptr }, // PC25 E3 en + { TcOutput::tioa4, PwmOutput::none, AdcInput::none, PinCapability::write, "zprobe.mod,servo" }, // PC26 Z probe mod/servo/diag LED + { TcOutput::none, PwmOutput::none, AdcInput::none, PinCapability::none, nullptr }, // PC27 E2 en + { TcOutput::none, PwmOutput::none, AdcInput::none, PinCapability::none, nullptr }, // PC28 Z step + { TcOutput::tioa5, PwmOutput::none, AdcInput::none, PinCapability::wpwm, "fan2" }, // PC29 Fan 2 + { TcOutput::none, PwmOutput::none, AdcInput::adc0_14, PinCapability::ainr, "e1temp" }, // PC30 Thermistor 2 + { TcOutput::none, PwmOutput::none, AdcInput::none, PinCapability::none, nullptr }, // PC31 E2 step }; -#endif constexpr unsigned int NumNamedPins = ARRAY_SIZE(PinTable); +static_assert(NumNamedPins == 3*32); // Function to look up a pin name and pass back the corresponding index into the pin table bool LookupPinName(const char *pn, LogicalPin& lpin, bool& hardwareInverted) noexcept; + +// Wire Interfaces +#define WIRE_INTERFACES_COUNT (1) // SAM4S supports two I2C interfaces but we only have the first one available + +#define WIRE_INTERFACE TWI0 +#define WIRE_INTERFACE_ID ID_TWI0 +#define WIRE_ISR_HANDLER TWI0_Handler +#define WIRE_ISR_ID TWI0_IRQn + +constexpr Pin TWI_Data = PortAPin(3); +constexpr Pin TWI_CK = PortAPin(4); +constexpr GpioPinFunction TWIPeriphMode = GpioPinFunction::A; + +// SD Card +constexpr Pin HsmciClockPin = PortAPin(29); +constexpr Pin HsmciOtherPins[] = { PortAPin(28), PortAPin(30), PortAPin(31), PortAPin(26), PortAPin(27) }; +constexpr auto HsmciPinsFunction = GpioPinFunction::C; + +// Main SPI interface +constexpr Pin APIN_SPI_MOSI = PortAPin(13); +constexpr Pin APIN_SPI_MISO = PortAPin(12); +constexpr Pin APIN_SPI_SCK = PortAPin(14); +constexpr Pin APIN_SPI_SS0 = PortAPin(11); +constexpr GpioPinFunction SPIPeriphMode = GpioPinFunction::A; + +// USARTs used for SPI +constexpr Pin APIN_USART_SSPI_MOSI = PortAPin(6); +constexpr GpioPinFunction USARTSPIMosiPeriphMode = GpioPinFunction::A; +constexpr Pin APIN_USART_SSPI_MISO = PortAPin(5); +constexpr GpioPinFunction USARTSPIMisoPeriphMode = GpioPinFunction::A; +constexpr Pin APIN_USART_SSPI_SCK = PortAPin(2); +constexpr GpioPinFunction USARTSPISckPeriphMode = GpioPinFunction::B; + // Duet pin numbers to control the W5500 interface #define W5500_SPI SPI #define W5500_SPI_INTERFACE_ID ID_SPI @@ -469,7 +391,7 @@ namespace StepPins static inline uint32_t CalcDriverBitmap(size_t driver) noexcept { return (driver < NumDirectDrivers) - ? g_APinDescription[STEP_PINS[driver]].ulPin + ? 1u << (STEP_PINS[driver] & 0x1Fu) : 0; } |