diff --git a/.github/workflows/test-builds.yml b/.github/workflows/test-builds.yml index 301165fcd..59722e3ca 100644 --- a/.github/workflows/test-builds.yml +++ b/.github/workflows/test-builds.yml @@ -32,6 +32,7 @@ jobs: - megaatmega2560 - teensy31 - teensy35 + - SAMD51_grandcentral_m4 # Extended AVR Environments @@ -75,7 +76,6 @@ jobs: #- mks_robin_lite #- mks_robin_mini #- mks_robin_nano - #- SAMD51_grandcentral_m4 steps: diff --git a/Marlin/src/HAL/HAL_SAMD51/timers.h b/Marlin/src/HAL/HAL_SAMD51/timers.h index 9bd2e03d6..7ebd1b140 100644 --- a/Marlin/src/HAL/HAL_SAMD51/timers.h +++ b/Marlin/src/HAL/HAL_SAMD51/timers.h @@ -29,7 +29,7 @@ typedef uint32_t hal_timer_t; #define HAL_TIMER_TYPE_MAX 0xFFFFFFFF -#define HAL_TIMER_RATE SystemCoreClock // frequency of timers peripherals +#define HAL_TIMER_RATE F_CPU // frequency of timers peripherals #define STEP_TIMER_NUM 0 // index of timer to use for stepper (also +1 for 32bits counter) #define PULSE_TIMER_NUM STEP_TIMER_NUM diff --git a/Marlin/src/core/boards.h b/Marlin/src/core/boards.h index 904c25d86..4ba9840d8 100644 --- a/Marlin/src/core/boards.h +++ b/Marlin/src/core/boards.h @@ -295,7 +295,6 @@ #define BOARD_GTM32_MINI_A30 4022 // STM32F103VET6 controller #define BOARD_GTM32_REV_B 4023 // STM32F103VET6 controller - // // ARM Cortex-M4F // @@ -340,6 +339,11 @@ #define BOARD_MRR_ESPE 6002 #define BOARD_E4D_BOX 6003 // E4d@BOX +// +// SAMD51 ARM Cortex M4 +// +#define BOARD_AGCM4_RAMPS_144 6100 // RAMPS 1.4.4 + // // Simulations // diff --git a/Marlin/src/pins/pins.h b/Marlin/src/pins/pins.h index 941b21bbb..3ba15c132 100644 --- a/Marlin/src/pins/pins.h +++ b/Marlin/src/pins/pins.h @@ -578,6 +578,13 @@ #elif MB(E4D_BOX) #include "esp32/pins_E4D.h" // ESP32 env:esp32 +// +// Adafruit Grand Central M4 (SAMD51 ARM Cortex-M4) +// + +#elif MB(AGCM4_RAMPS_144) + #include "samd/pins_RAMPS_144.h" // SAMD51 env:SAMD51_grandcentral_m4 + // // Linux Native Debug board // diff --git a/Marlin/src/pins/samd/pins_RAMPS_144.h b/Marlin/src/pins/samd/pins_RAMPS_144.h new file mode 100644 index 000000000..107ef9f57 --- /dev/null +++ b/Marlin/src/pins/samd/pins_RAMPS_144.h @@ -0,0 +1,611 @@ +/** + * Marlin 3D Printer Firmware + * Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin] + * + * Based on Sprinter and grbl. + * Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + */ +#pragma once + +/** + * AGCM4 with RAMPS v1.4.4 pin assignments + */ + +#ifndef ARDUINO_GRAND_CENTRAL_M4 + #error "Oops! Select 'Adafruit Grand Central M4' in 'Tools > Board.'" +#endif + +#ifndef BOARD_INFO_NAME + #define BOARD_INFO_NAME "AGCM4 RAMPS 1.4.4" +#endif + +// +// Servos +// +#define SERVO0_PIN 11 +#define SERVO1_PIN 6 +#define SERVO2_PIN 5 +#define SERVO3_PIN 4 + +// +// EEPROM +// +#define E2END 0x7FFF // 32Kb (24lc256) +#define I2C_EEPROM // EEPROM on I2C-0 + +// +// Limit Switches +// +#define X_MIN_PIN 3 +#define X_MAX_PIN 2 +#define Y_MIN_PIN 14 +#define Y_MAX_PIN 15 +#define Z_MIN_PIN 18 +#define Z_MAX_PIN 19 + +// +// Z Probe (when not Z_MIN_PIN) +// +#ifndef Z_MIN_PROBE_PIN + #define Z_MIN_PROBE_PIN 18 +#endif + +// +// Steppers +// +#define X_STEP_PIN 67 // Mega/Due:54 - AGCM4:67 +#define X_DIR_PIN 68 // Mega/Due:55 - AGCM4:68 +#define X_ENABLE_PIN 38 +#ifndef X_CS_PIN + #define X_CS_PIN 47 +#endif + +#define Y_STEP_PIN 73 // Mega/Due:60 - AGCM4:73 +#define Y_DIR_PIN 74 // Mega/Due:61 - AGCM4:74 +#define Y_ENABLE_PIN 69 // Mega/Due:56 - AGCM4:69 +#ifndef Y_CS_PIN + #define Y_CS_PIN 45 +#endif + +#define Z_STEP_PIN 46 +#define Z_DIR_PIN 48 +#define Z_ENABLE_PIN 54 // Mega/Due:62 - AGCM4:54 +#ifndef Z_CS_PIN + #define Z_CS_PIN 32 +#endif + +#define Z2_STEP_PIN 36 +#define Z2_DIR_PIN 34 +#define Z2_ENABLE_PIN 30 +#ifndef Z2_CS_PIN + #define Z2_CS_PIN 22 +#endif + +#define E0_STEP_PIN 26 +#define E0_DIR_PIN 28 +#define E0_ENABLE_PIN 24 +#ifndef E0_CS_PIN + #define E0_CS_PIN 43 +#endif + +// +// Temperature Sensors +// +#define TEMP_0_PIN 13 +#define TEMP_BED_PIN 14 +#define TEMP_CHAMBER_PIN 15 + +// +// Heaters / Fans +// +#define HEATER_0_PIN 10 +#define HEATER_BED_PIN 8 +#define FAN_PIN 9 +#define FAN1_PIN 7 +#define FAN2_PIN 12 + +// +// Misc. Functions +// +#define SDSS 53 +#define LED_PIN 13 + +#ifndef FILWIDTH_PIN + #define FILWIDTH_PIN 5 // Analog Input on AUX2 +#endif + +// RAMPS 1.4 DIO 4 on the servos connector +#ifndef FIL_RUNOUT_PIN + #define FIL_RUNOUT_PIN 4 +#endif + +#ifndef PS_ON_PIN + #define PS_ON_PIN 39 +#endif + +#if ENABLED(CASE_LIGHT_ENABLE) && !defined(CASE_LIGHT_PIN) && !defined(SPINDLE_LASER_ENA_PIN) + #if NUM_SERVOS <= 1 // Prefer the servo connector + #define CASE_LIGHT_PIN 6 // Hardware PWM + #endif +#endif + +// +// M3/M4/M5 - Spindle/Laser Control +// +#if HAS_CUTTER && !defined(SPINDLE_LASER_ENA_PIN) + #if !NUM_SERVOS // Use servo connector if possible + #define SPINDLE_LASER_ENA_PIN 4 // Pullup or pulldown! + #define SPINDLE_LASER_PWM_PIN 6 // Hardware PWM + #define SPINDLE_DIR_PIN 5 + #else + #error "No auto-assignable Spindle/Laser pins available." + #endif +#endif + +// +// TMC software SPI +// +#if ENABLED(TMC_USE_SW_SPI) + #ifndef TMC_SW_MOSI + #define TMC_SW_MOSI 58 // Mega/Due:66 - AGCM4:58 + #endif + #ifndef TMC_SW_MISO + #define TMC_SW_MISO 44 + #endif + #ifndef TMC_SW_SCK + #define TMC_SW_SCK 56 // Mega/Due:64 - AGCM4:56 + #endif +#endif + +#if HAS_TMC220x + /** + * TMC2208/TMC2209 stepper drivers + * + * Hardware serial communication ports. + * If undefined software serial is used according to the pins below + */ + //#define X_HARDWARE_SERIAL Serial1 + //#define X2_HARDWARE_SERIAL Serial1 + //#define Y_HARDWARE_SERIAL Serial1 + //#define Y2_HARDWARE_SERIAL Serial1 + //#define Z_HARDWARE_SERIAL Serial1 + //#define Z2_HARDWARE_SERIAL Serial1 + //#define E0_HARDWARE_SERIAL Serial1 + //#define E1_HARDWARE_SERIAL Serial1 + //#define E2_HARDWARE_SERIAL Serial1 + //#define E3_HARDWARE_SERIAL Serial1 + //#define E4_HARDWARE_SERIAL Serial1 + + // + // Software serial + // + + #ifndef X_SERIAL_TX_PIN + #define X_SERIAL_TX_PIN 47 + #endif + #ifndef X_SERIAL_RX_PIN + #define X_SERIAL_RX_PIN 47 + #endif + #ifndef X2_SERIAL_TX_PIN + #define X2_SERIAL_TX_PIN -1 + #endif + #ifndef X2_SERIAL_RX_PIN + #define X2_SERIAL_RX_PIN -1 + #endif + + #ifndef Y_SERIAL_TX_PIN + #define Y_SERIAL_TX_PIN 45 + #endif + #ifndef Y_SERIAL_RX_PIN + #define Y_SERIAL_RX_PIN 45 + #endif + #ifndef Y2_SERIAL_TX_PIN + #define Y2_SERIAL_TX_PIN -1 + #endif + #ifndef Y2_SERIAL_RX_PIN + #define Y2_SERIAL_RX_PIN -1 + #endif + + #ifndef Z_SERIAL_TX_PIN + #define Z_SERIAL_TX_PIN 32 + #endif + #ifndef Z_SERIAL_RX_PIN + #define Z_SERIAL_RX_PIN 32 + #endif + #ifndef Z2_SERIAL_TX_PIN + #define Z2_SERIAL_TX_PIN 22 + #endif + #ifndef Z2_SERIAL_RX_PIN + #define Z2_SERIAL_RX_PIN 22 + #endif + + #ifndef E0_SERIAL_TX_PIN + #define E0_SERIAL_TX_PIN 43 + #endif + #ifndef E0_SERIAL_RX_PIN + #define E0_SERIAL_RX_PIN 43 + #endif + #ifndef E1_SERIAL_TX_PIN + #define E1_SERIAL_TX_PIN -1 + #endif + #ifndef E1_SERIAL_RX_PIN + #define E1_SERIAL_RX_PIN -1 + #endif + #ifndef E2_SERIAL_TX_PIN + #define E2_SERIAL_TX_PIN -1 + #endif + #ifndef E2_SERIAL_RX_PIN + #define E2_SERIAL_RX_PIN -1 + #endif + #ifndef E3_SERIAL_TX_PIN + #define E3_SERIAL_TX_PIN -1 + #endif + #ifndef E3_SERIAL_RX_PIN + #define E3_SERIAL_RX_PIN -1 + #endif + #ifndef E4_SERIAL_TX_PIN + #define E4_SERIAL_TX_PIN -1 + #endif + #ifndef E4_SERIAL_RX_PIN + #define E4_SERIAL_RX_PIN -1 + #endif + #ifndef E5_SERIAL_TX_PIN + #define E5_SERIAL_TX_PIN -1 + #endif + #ifndef E5_SERIAL_RX_PIN + #define E5_SERIAL_RX_PIN -1 + #endif + #ifndef E6_SERIAL_TX_PIN + #define E6_SERIAL_TX_PIN -1 + #endif + #ifndef E6_SERIAL_RX_PIN + #define E6_SERIAL_RX_PIN -1 + #endif + #ifndef E7_SERIAL_TX_PIN + #define E7_SERIAL_TX_PIN -1 + #endif + #ifndef E7_SERIAL_RX_PIN + #define E7_SERIAL_RX_PIN -1 + #endif +#endif + +////////////////////////// +// LCDs and Controllers // +////////////////////////// + +#if HAS_SPI_LCD + + // + // LCD Display output pins + // + #if ENABLED(REPRAPWORLD_GRAPHICAL_LCD) + + // TO TEST + // #define LCD_PINS_RS 49 // CS chip select /SS chip slave select + // #define LCD_PINS_ENABLE 51 // SID (MOSI) + // #define LCD_PINS_D4 52 // SCK (CLK) clock + + #elif BOTH(NEWPANEL, PANEL_ONE) + + // TO TEST + // #define LCD_PINS_RS 40 + // #define LCD_PINS_ENABLE 42 + // #define LCD_PINS_D4 57 // Mega/Due:65 - AGCM4:57 + // #define LCD_PINS_D5 58 // Mega/Due:66 - AGCM4:58 + // #define LCD_PINS_D6 44 + // #define LCD_PINS_D7 56 // Mega/Due:64 - AGCM4:56 + + #else + + #if ENABLED(CR10_STOCKDISPLAY) + + // TO TEST + // #define LCD_PINS_RS 27 + // #define LCD_PINS_ENABLE 29 + // #define LCD_PINS_D4 25 + + #if DISABLED(NEWPANEL) + // TO TEST + // #define BEEPER_PIN 37 + #endif + + #elif ENABLED(ZONESTAR_LCD) + + // TO TEST + // #define LCD_PINS_RS 56 // Mega/Due:64 - AGCM4:56 + // #define LCD_PINS_ENABLE 44 + // #define LCD_PINS_D4 55 // Mega/Due:63 - AGCM4:55 + // #define LCD_PINS_D5 40 + // #define LCD_PINS_D6 42 + // #define LCD_PINS_D7 57 // Mega/Due:65 - AGCM4:57 + + #else + + #if EITHER(MKS_12864OLED, MKS_12864OLED_SSD1306) + // TO TEST + // #define LCD_PINS_DC 25 // Set as output on init + // #define LCD_PINS_RS 27 // Pull low for 1s to init + // DOGM SPI LCD Support + // #define DOGLCD_CS 16 + // #define DOGLCD_MOSI 17 + // #define DOGLCD_SCK 23 + // #define DOGLCD_A0 LCD_PINS_DC + #else + #define LCD_PINS_RS 16 + #define LCD_PINS_ENABLE 17 + #define LCD_PINS_D4 23 + #define LCD_PINS_D5 25 + #define LCD_PINS_D6 27 + #endif + + #define LCD_PINS_D7 29 + + #if DISABLED(NEWPANEL) + #define BEEPER_PIN 33 + #endif + + #endif + + #if DISABLED(NEWPANEL) + // Buttons attached to a shift register + // Not wired yet + //#define SHIFT_CLK 38 + //#define SHIFT_LD 42 + //#define SHIFT_OUT 40 + //#define SHIFT_EN 17 + #endif + + #endif + + // + // LCD Display input pins + // + #if ENABLED(NEWPANEL) + + #if ENABLED(REPRAP_DISCOUNT_SMART_CONTROLLER) + + #define BEEPER_PIN 37 + + #if ENABLED(CR10_STOCKDISPLAY) + // TO TEST + // #define BTN_EN1 17 + // #define BTN_EN2 23 + #else + #define BTN_EN1 31 + #define BTN_EN2 33 + #endif + + #define BTN_ENC 35 + #ifndef SD_DETECT_PIN + #define SD_DETECT_PIN 49 + #endif + #define KILL_PIN 41 + + #if ENABLED(BQ_LCD_SMART_CONTROLLER) + // TO TEST + // #define LCD_BACKLIGHT_PIN 39 + #endif + + #elif ENABLED(REPRAPWORLD_GRAPHICAL_LCD) + + // TO TEST + // #define BTN_EN1 56 // Mega/Due:64 - AGCM4:56 + // #define BTN_EN2 72 // Mega/Due:59 - AGCM4:72 + // #define BTN_ENC 55 + // #define SD_DETECT_PIN 42 + + #elif ENABLED(LCD_I2C_PANELOLU2) + + // TO TEST + // #define BTN_EN1 47 + // #define BTN_EN2 43 + // #define BTN_ENC 32 + // #define LCD_SDSS SDSS + // #define KILL_PIN 41 + + #elif ENABLED(LCD_I2C_VIKI) + + // TO TEST + // #define BTN_EN1 40 // http://files.panucatt.com/datasheets/viki_wiring_diagram.pdf explains 40/42. + // #define BTN_EN2 42 + // #define BTN_ENC -1 + + // #define LCD_SDSS SDSS + // #define SD_DETECT_PIN 49 + + #elif ANY(VIKI2, miniVIKI) + + // TO TEST + // #define DOGLCD_CS 45 + // #define DOGLCD_A0 44 + // #define LCD_SCREEN_ROT_180 + + // #define BEEPER_PIN 33 + // #define STAT_LED_RED_PIN 32 + // #define STAT_LED_BLUE_PIN 35 + + // #define BTN_EN1 22 + // #define BTN_EN2 7 + // #define BTN_ENC 39 + + // #define SD_DETECT_PIN -1 // Pin 49 for display SD interface, 72 for easy adapter board + // #define KILL_PIN 31 + + #elif ENABLED(ELB_FULL_GRAPHIC_CONTROLLER) + + // TO TEST + // #define DOGLCD_CS 29 + // #define DOGLCD_A0 27 + + // #define BEEPER_PIN 23 + // #define LCD_BACKLIGHT_PIN 33 + + // #define BTN_EN1 35 + // #define BTN_EN2 37 + // #define BTN_ENC 31 + + // #define LCD_SDSS SDSS + // #define SD_DETECT_PIN 49 + // #define KILL_PIN 41 + + #elif EITHER(MKS_MINI_12864, FYSETC_MINI_12864) + + // TO TEST + //#define BEEPER_PIN 37 + //#define BTN_ENC 35 + //#define SD_DETECT_PIN 49 + + //#ifndef KILL_PIN + // #define KILL_PIN 41 + //#endif + + #if ENABLED(MKS_MINI_12864) // Added in Marlin 1.1.6 + + // TO TEST + // #define DOGLCD_A0 27 + // #define DOGLCD_CS 25 + + // GLCD features + // Uncomment screen orientation + // #define LCD_SCREEN_ROT_90 + // #define LCD_SCREEN_ROT_180 + // #define LCD_SCREEN_ROT_270 + + // not connected to a pin + // #define LCD_BACKLIGHT_PIN 57 // backlight LED on A11/D? (Mega/Due:65 - AGCM4:57) + + // #define BTN_EN1 31 + // #define BTN_EN2 33 + + #elif ENABLED(FYSETC_MINI_12864) + + // From https://wiki.fysetc.com/Mini12864_Panel/?fbclid=IwAR1FyjuNdVOOy9_xzky3qqo_WeM5h-4gpRnnWhQr_O1Ef3h0AFnFXmCehK8 + + // TO TEST + // #define DOGLCD_A0 16 + // #define DOGLCD_CS 17 + + // #define BTN_EN1 33 + // #define BTN_EN2 31 + + //#define FORCE_SOFT_SPI // Use this if default of hardware SPI causes display problems + // results in LCD soft SPI mode 3, SD soft SPI mode 0 + + // #define LCD_RESET_PIN 23 // Must be high or open for LCD to operate normally. + + #if EITHER(FYSETC_MINI_12864_1_2, FYSETC_MINI_12864_2_0) + #ifndef RGB_LED_R_PIN + // TO TEST + // #define RGB_LED_R_PIN 25 + #endif + #ifndef RGB_LED_G_PIN + // TO TEST + // #define RGB_LED_G_PIN 27 + #endif + #ifndef RGB_LED_B_PIN + // TO TEST + // #define RGB_LED_B_PIN 29 + #endif + #elif ENABLED(FYSETC_MINI_12864_2_1) + // TO TEST + // #define NEOPIXEL_PIN 25 + #endif + + #endif + + #elif ENABLED(MINIPANEL) + + // TO TEST + // #define BEEPER_PIN 42 + // not connected to a pin + // #define LCD_BACKLIGHT_PIN 57 // backlight LED on A11/D? (Mega/Due:65 - AGCM4:57) + + // #define DOGLCD_A0 44 + // #define DOGLCD_CS 58 // Mega/Due:66 - AGCM4:58 + + // GLCD features + // Uncomment screen orientation + // #define LCD_SCREEN_ROT_90 + // #define LCD_SCREEN_ROT_180 + // #define LCD_SCREEN_ROT_270 + + // #define BTN_EN1 40 + // #define BTN_EN2 55 // Mega/Due:63 - AGCM4:55 + // #define BTN_ENC 72 // Mega/Due:59 - AGCM4:72 + + // #define SD_DETECT_PIN 49 + // #define KILL_PIN 56 // Mega/Due:64 - AGCM4:56 + + #elif ENABLED(ZONESTAR_LCD) + + // TO TEST + // #define ADC_KEYPAD_PIN 12 + + #elif ENABLED(AZSMZ_12864) + + // TO TEST + + #else + + // Beeper on AUX-4 + // #define BEEPER_PIN 33 + + // Buttons are directly attached to AUX-2 + #if ENABLED(REPRAPWORLD_KEYPAD) + // TO TEST + // #define SHIFT_OUT 40 + // #define SHIFT_CLK 44 + // #define SHIFT_LD 42 + // #define BTN_EN1 56 // Mega/Due:64 - AGCM4:56 + // #define BTN_EN2 72 // Mega/Due:59 - AGCM4:72 + // #define BTN_ENC 55 // Mega/Due:63 - AGCM4:55 + #elif ENABLED(PANEL_ONE) + // TO TEST + // #define BTN_EN1 72 // AUX2 PIN 3 (Mega/Due:59 - AGCM4:72) + // #define BTN_EN2 55 // AUX2 PIN 4 (Mega/Due:63 - AGCM4:55) + // #define BTN_ENC 49 // AUX3 PIN 7 + #else + // TO TEST + // #define BTN_EN1 37 + // #define BTN_EN2 35 + // #define BTN_ENC 31 + #endif + + #if ENABLED(G3D_PANEL) + // TO TEST + // #define SD_DETECT_PIN 49 + // #define KILL_PIN 41 + #endif + + #endif + #endif // NEWPANEL + +#endif // HAS_SPI_LCD + +// +// SD Support +// +#ifndef SDCARD_CONNECTION + #define SDCARD_CONNECTION ONBOARD +#endif + +#if SD_CONNECTION_IS(ONBOARD) + #undef SDSS + #define SDSS 83 + #undef SD_DETECT_PIN + #define SD_DETECT_PIN 95 +#endif diff --git a/buildroot/share/tests/SAMD51_grandcentral_m4-tests b/buildroot/share/tests/SAMD51_grandcentral_m4-tests index 898a58560..f7157b1ed 100644 --- a/buildroot/share/tests/SAMD51_grandcentral_m4-tests +++ b/buildroot/share/tests/SAMD51_grandcentral_m4-tests @@ -6,5 +6,12 @@ # exit on first failure set -e +# +# Build with the default configurations +# +restore_configs +opt_set MOTHERBOARD BOARD_AGCM4_RAMPS_144 +exec_test $1 $2 "Build Grand Central M4 Default Configuration" + # clean up restore_configs