From 9b578ca343077db5410221bd59c520db8140314a Mon Sep 17 00:00:00 2001 From: Bob Kuhn Date: Mon, 15 Apr 2019 22:54:11 -0500 Subject: [PATCH] Support FYSETC_MINI_12864 on Re-ARM, RAMPS_FD, MKS SBASE (#13717) --- .../u8g/u8g_com_HAL_LPC1768_sw_spi.cpp | 68 ++++++++++++++++++- Marlin/src/inc/Conditionals_LCD.h | 2 + Marlin/src/lcd/dogm/ultralcd_DOGM.h | 6 +- Marlin/src/pins/pins_MKS_SBASE.h | 35 ++++++++++ Marlin/src/pins/pins_RAMPS_FD_V1.h | 5 +- Marlin/src/pins/pins_RAMPS_RE_ARM.h | 47 +++++++------ 6 files changed, 140 insertions(+), 23 deletions(-) diff --git a/Marlin/src/HAL/HAL_LPC1768/u8g/u8g_com_HAL_LPC1768_sw_spi.cpp b/Marlin/src/HAL/HAL_LPC1768/u8g/u8g_com_HAL_LPC1768_sw_spi.cpp index 1419a74f4..e851284ad 100644 --- a/Marlin/src/HAL/HAL_LPC1768/u8g/u8g_com_HAL_LPC1768_sw_spi.cpp +++ b/Marlin/src/HAL/HAL_LPC1768/u8g/u8g_com_HAL_LPC1768_sw_spi.cpp @@ -65,10 +65,76 @@ #undef SPI_SPEED #define SPI_SPEED 2 // About 2 MHz +#include +#include +#include + +#include + +uint8_t swSpiTransfer_mode_0(uint8_t b, const uint8_t spi_speed, const pin_t sck_pin, const pin_t miso_pin, const pin_t mosi_pin ) { + + for (uint8_t i = 0; i < 8; i++) { + if (spi_speed == 0) { + gpio_set(mosi_pin, !!(b & 0x80)); + gpio_set(sck_pin, HIGH); + b <<= 1; + if (miso_pin >= 0 && gpio_get(miso_pin)) b |= 1; + gpio_set(sck_pin, LOW); + } + else { + const uint8_t state = (b & 0x80) ? HIGH : LOW; + for (uint8_t j = 0; j < spi_speed; j++) + gpio_set(mosi_pin, state); + + for (uint8_t j = 0; j < spi_speed + (miso_pin >= 0 ? 0 : 1); j++) + gpio_set(sck_pin, HIGH); + + b <<= 1; + if (miso_pin >= 0 && gpio_get(miso_pin)) b |= 1; + + for (uint8_t j = 0; j < spi_speed; j++) + gpio_set(sck_pin, LOW); + } + } + + return b; +} + +uint8_t swSpiTransfer_mode_3(uint8_t b, const uint8_t spi_speed, const pin_t sck_pin, const pin_t miso_pin, const pin_t mosi_pin ) { + + for (uint8_t i = 0; i < 8; i++) { + const uint8_t state = (b & 0x80) ? HIGH : LOW; + if (spi_speed == 0) { + gpio_set(sck_pin, LOW); + gpio_set(mosi_pin, state); + gpio_set(mosi_pin, state); // need some setup time + gpio_set(sck_pin, HIGH); + } + else { + for (uint8_t j = 0; j < spi_speed + (miso_pin >= 0 ? 0 : 1); j++) + gpio_set(sck_pin, LOW); + + for (uint8_t j = 0; j < spi_speed; j++) + gpio_set(mosi_pin, state); + + for (uint8_t j = 0; j < spi_speed; j++) + gpio_set(sck_pin, HIGH); + } + b <<= 1; + if (miso_pin >= 0 && gpio_get(miso_pin)) b |= 1; + } + + return b; +} + static uint8_t SPI_speed = 0; static void u8g_sw_spi_HAL_LPC1768_shift_out(uint8_t dataPin, uint8_t clockPin, uint8_t val) { - swSpiTransfer(val, SPI_speed, clockPin, -1, dataPin); + #if ENABLED(FYSETC_MINI_12864) + swSpiTransfer_mode_3(val, SPI_speed, clockPin, -1, dataPin); + #else + swSpiTransfer_mode_0(val, SPI_speed, clockPin, -1, dataPin); + #endif } uint8_t u8g_com_HAL_LPC1768_sw_spi_fn(u8g_t *u8g, uint8_t msg, uint8_t arg_val, void *arg_ptr) { diff --git a/Marlin/src/inc/Conditionals_LCD.h b/Marlin/src/inc/Conditionals_LCD.h index 8581f2dd1..320dc00ec 100644 --- a/Marlin/src/inc/Conditionals_LCD.h +++ b/Marlin/src/inc/Conditionals_LCD.h @@ -143,6 +143,8 @@ #define DOGLCD #define ULTIPANEL + #define LCD_CONTRAST_MIN 0 + #define LCD_CONTRAST_MAX 255 #define DEFAULT_LCD_CONTRAST 255 #define LED_COLORS_REDUCE_GREEN diff --git a/Marlin/src/lcd/dogm/ultralcd_DOGM.h b/Marlin/src/lcd/dogm/ultralcd_DOGM.h index fe799473f..1f2c90b9d 100644 --- a/Marlin/src/lcd/dogm/ultralcd_DOGM.h +++ b/Marlin/src/lcd/dogm/ultralcd_DOGM.h @@ -112,7 +112,11 @@ //#define U8G_CLASS U8GLIB_MINI12864 //#define U8G_PARAM DOGLCD_CS, DOGLCD_A0 // 8 stripes #define U8G_CLASS U8GLIB_MINI12864_2X - #define U8G_PARAM DOGLCD_CS, DOGLCD_A0 // 4 stripes + #if EITHER(FYSETC_MINI_12864, TARGET_LPC1768) + #define U8G_PARAM DOGLCD_SCK, DOGLCD_MOSI, DOGLCD_CS, DOGLCD_A0 // 4 stripes SW-SPI + #else + #define U8G_PARAM DOGLCD_CS, DOGLCD_A0 // 4 stripes HW-SPI + #endif #elif ENABLED(U8GLIB_SH1106_EINSTART) // Connected via motherboard header #define U8G_CLASS U8GLIB_SH1106_128X64 diff --git a/Marlin/src/pins/pins_MKS_SBASE.h b/Marlin/src/pins/pins_MKS_SBASE.h index 39667507d..b99de4886 100644 --- a/Marlin/src/pins/pins_MKS_SBASE.h +++ b/Marlin/src/pins/pins_MKS_SBASE.h @@ -253,6 +253,41 @@ #define DOGLCD_SCK SCK_PIN #define DOGLCD_MOSI MOSI_PIN #endif + + #if ENABLED(FYSETC_MINI_12864) + /** + * The Fysetc display can NOT use the SCK and MOSI pins on EXP2, so a + * special cable is needed to go between EXP2 on the FYSETC and the + * controller board's EXP2 and J8. It also means that a software SPI + * is needed to drive those pins. + * + * The Fysetc requires mode 3 SPI interface. + * + * Pins 6, 7 & 8 on EXP2 are no connects. That means a second special + * cable will be needed if the RGB LEDs are to be active. + */ + #define DOGLCD_CS LCD_PINS_ENABLE // EXP1.3 (LCD_EN on Fysetc schematic) + #define DOGLCD_A0 LCD_PINS_RS // EXP1.4 (LCD_A0 on Fysetc schematic) + #define DOGLCD_SCK P2_11 // J8-5 (SCK on Fysetc schematic) + #define DOGLCD_MOSI P4_28 // J8-6 (MOSI on Fysetc schematic) + + #define RGB_LED + //#define RGBW_LED + #if EITHER(RGB_LED, RGBW_LED) + #define RGB_LED_R_PIN P2_12 // J8-4 (LCD_D6 on Fysetc schematic) + #define RGB_LED_G_PIN P1_23 // J8-3 (LCD_D5 on Fysetc schematic) + #define RGB_LED_B_PIN P1_22 // J8-2 (LCD_D7 on Fysetc schematic) + //#define RGB_LED_W_PIN -1 + #endif + + #elif ENABLED(MINIPANEL) + // GLCD features + // Uncomment screen orientation + //#define LCD_SCREEN_ROT_90 + //#define LCD_SCREEN_ROT_180 + //#define LCD_SCREEN_ROT_270 + #endif + #endif /** diff --git a/Marlin/src/pins/pins_RAMPS_FD_V1.h b/Marlin/src/pins/pins_RAMPS_FD_V1.h index 8cee2e7f4..a8bec209e 100644 --- a/Marlin/src/pins/pins_RAMPS_FD_V1.h +++ b/Marlin/src/pins/pins_RAMPS_FD_V1.h @@ -156,7 +156,10 @@ #define LCD_PINS_D7 29 #endif - #if ENABLED(MINIPANEL) + #if ENABLED(FYSETC_MINI_12864) + #define DOGLCD_CS LCD_PINS_ENABLE + #define DOGLCD_A0 LCD_PINS_RS + #elif ENABLED(MINIPANEL) #define DOGLCD_CS 25 #define DOGLCD_A0 27 #endif diff --git a/Marlin/src/pins/pins_RAMPS_RE_ARM.h b/Marlin/src/pins/pins_RAMPS_RE_ARM.h index 25c85a360..92d91d5c6 100644 --- a/Marlin/src/pins/pins_RAMPS_RE_ARM.h +++ b/Marlin/src/pins/pins_RAMPS_RE_ARM.h @@ -269,11 +269,21 @@ #elif ENABLED(ULTRA_LCD) - #define BEEPER_PIN P1_30 // (37) not 5V tolerant + //#define SCK_PIN P0_15 // (52) system defined J3-9 & AUX-3 + //#define MISO_PIN P0_17 // (50) system defined J3-10 & AUX-3 + //#define MOSI_PIN P0_18 // (51) system defined J3-10 & AUX-3 + //#define SS_PIN P1_23 // (53) system defined J3-5 & AUX-3 (Sometimes called SDSS) + + #if ENABLED(FYSETC_MINI_12864) + #define BEEPER_PIN P1_01 + #define BTN_ENC P1_04 + #else + #define BEEPER_PIN P1_30 // (37) not 5V tolerant + #define BTN_ENC P2_11 // (35) J3-3 & AUX-4 + #endif #define BTN_EN1 P3_26 // (31) J3-2 & AUX-4 #define BTN_EN2 P3_25 // (33) J3-4 & AUX-4 - #define BTN_ENC P2_11 // (35) J3-3 & AUX-4 #define SD_DETECT_PIN P1_31 // (49) J3-1 & AUX-3 (NOT 5V tolerant) #define KILL_PIN P1_22 // (41) J5-4 & AUX-4 @@ -296,13 +306,6 @@ #if ANY(VIKI2, miniVIKI) // #define LCD_SCREEN_ROT_180 - #define BTN_EN1 P3_26 // (31) J3-2 & AUX-4 - #define BTN_EN2 P3_25 // (33) J3-4 & AUX-4 - #define BTN_ENC P2_11 // (35) J3-3 & AUX-4 - - #define SD_DETECT_PIN P1_31 // (49) J3-1 & AUX-3 (NOT 5V tolerant) - #define KILL_PIN P1_22 // (41) J5-4 & AUX-4 - #define DOGLCD_CS P0_16 // (16) #define DOGLCD_A0 P2_06 // (59) J3-8 & AUX-2 #define DOGLCD_SCK SCK_PIN @@ -311,8 +314,17 @@ #define STAT_LED_BLUE_PIN P0_26 //(63) may change if cable changes #define STAT_LED_RED_PIN P1_21 // ( 6) may change if cable changes #else - #define DOGLCD_CS P0_26 // (63) J5-3 & AUX-2 - #define DOGLCD_A0 P2_06 // (59) J3-8 & AUX-2 + + #if ENABLED(FYSETC_MINI_12864) + #define DOGLCD_SCK P0_15 + #define DOGLCD_MOSI P0_18 + #define DOGLCD_CS P1_09 // use Ethernet connector for EXP1 cable signals + #define DOGLCD_A0 P1_14 + #else + #define DOGLCD_CS P0_26 // (63) J5-3 & AUX-2 + #define DOGLCD_A0 P2_06 // (59) J3-8 & AUX-2 + #endif + #define LCD_BACKLIGHT_PIN P0_16 //(16) J3-7 & AUX-4 - only used on DOGLCD controllers #define LCD_PINS_ENABLE P0_18 // (51) (MOSI) J3-10 & AUX-3 #define LCD_PINS_D4 P0_15 // (52) (SCK) J3-9 & AUX-3 @@ -323,11 +335,6 @@ #endif #endif - //#define MISO_PIN P0_17 // (50) system defined J3-10 & AUX-3 - //#define MOSI_PIN P0_18 // (51) system defined J3-10 & AUX-3 - //#define SCK_PIN P0_15 // (52) system defined J3-9 & AUX-3 - //#define SS_PIN P1_23 // (53) system defined J3-5 & AUX-3 (Sometimes called SDSS) - #if ENABLED(MINIPANEL) // GLCD features // Uncomment screen orientation @@ -362,10 +369,10 @@ #if ENABLED(LPC_SD_LCD) - #define SCK_PIN P0_15 - #define MISO_PIN P0_17 - #define MOSI_PIN P0_18 - #define SS_PIN P1_23 // Chip select for SD card used by Marlin + #define SCK_PIN P0_15 // (52) system defined J3-9 & AUX-3 + #define MISO_PIN P0_17 // (50) system defined J3-10 & AUX-3 + #define MOSI_PIN P0_18 // (51) system defined J3-10 & AUX-3 + #define SS_PIN P1_23 // (53) system defined J3-5 & AUX-3 (Sometimes called SDSS) - CS used by Marlin #define ONBOARD_SD_CS P0_06 // Chip select for "System" SD card #elif ENABLED(LPC_SD_ONBOARD)