Skip to content

Commit 23309ea

Browse files
committed
Merge remote-tracking branch 'upstream/bugfix-2.0.x' into X5SA-2E-Bugfix-ColorUI
2 parents b8ce0ca + 1917ed8 commit 23309ea

File tree

174 files changed

+3830
-1771
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

174 files changed

+3830
-1771
lines changed

.github/workflows/test-builds.yml

+1
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,7 @@ jobs:
7070
- mks_robin_stm32
7171
- ARMED
7272
- FYSETC_S6
73+
- STM32F070CB_malyan
7374
- STM32F070RB_malyan
7475
- malyan_M300
7576
- mks_robin_lite

Marlin/Configuration_adv.h

+3-1
Original file line numberDiff line numberDiff line change
@@ -2487,7 +2487,7 @@
24872487
#define E7_HYBRID_THRESHOLD 30
24882488

24892489
/**
2490-
* Use StallGuard2 to home / probe X, Y, Z.
2490+
* Use StallGuard to home / probe X, Y, Z.
24912491
*
24922492
* TMC2130, TMC2160, TMC2209, TMC2660, TMC5130, and TMC5160 only
24932493
* Connect the stepper driver's DIAG1 pin to the X/Y endstop pin.
@@ -2508,6 +2508,8 @@
25082508
*
25092509
* IMPROVE_HOMING_RELIABILITY tunes acceleration and jerk when
25102510
* homing and adds a guard period for endstop triggering.
2511+
*
2512+
* Comment *_STALL_SENSITIVITY to disable sensorless homing for that axis.
25112513
*/
25122514
//#define SENSORLESS_HOMING // StallGuard capable drivers only
25132515

Marlin/Makefile

+56-52
Original file line numberDiff line numberDiff line change
@@ -170,110 +170,114 @@ else ifeq ($(HARDWARE_MOTHERBOARD),1100)
170170
else ifeq ($(HARDWARE_MOTHERBOARD),1101)
171171
# Velleman K8400 Controller (derived from 3Drag Controller)
172172
else ifeq ($(HARDWARE_MOTHERBOARD),1102)
173-
# Velleman K8600 Controller (derived from 3Drag Controller)
173+
# Velleman K8600 Controller (Vertex Nano)
174174
else ifeq ($(HARDWARE_MOTHERBOARD),1103)
175-
# 2PrintBeta BAM&DICE with STK drivers
175+
# Velleman K8800 Controller (Vertex Delta)
176176
else ifeq ($(HARDWARE_MOTHERBOARD),1104)
177-
# 2PrintBeta BAM&DICE Due with STK drivers
177+
# 2PrintBeta BAM&DICE with STK drivers
178178
else ifeq ($(HARDWARE_MOTHERBOARD),1105)
179-
# MKS BASE v1.0
179+
# 2PrintBeta BAM&DICE Due with STK drivers
180180
else ifeq ($(HARDWARE_MOTHERBOARD),1106)
181-
# MKS v1.4 with A4982 stepper drivers
181+
# MKS BASE v1.0
182182
else ifeq ($(HARDWARE_MOTHERBOARD),1107)
183-
# MKS v1.5 with Allegro A4982 stepper drivers
183+
# MKS v1.4 with A4982 stepper drivers
184184
else ifeq ($(HARDWARE_MOTHERBOARD),1108)
185-
# MKS v1.6 with Allegro A4982 stepper drivers
185+
# MKS v1.5 with Allegro A4982 stepper drivers
186186
else ifeq ($(HARDWARE_MOTHERBOARD),1109)
187-
# MKS BASE 1.0 with Heroic HR4982 stepper drivers
187+
# MKS v1.6 with Allegro A4982 stepper drivers
188188
else ifeq ($(HARDWARE_MOTHERBOARD),1110)
189-
# MKS GEN v1.3 or 1.4
189+
# MKS BASE 1.0 with Heroic HR4982 stepper drivers
190190
else ifeq ($(HARDWARE_MOTHERBOARD),1111)
191-
# MKS GEN L
191+
# MKS GEN v1.3 or 1.4
192192
else ifeq ($(HARDWARE_MOTHERBOARD),1112)
193-
# zrib V2.0 control board (Chinese knock off RAMPS replica)
193+
# MKS GEN L
194194
else ifeq ($(HARDWARE_MOTHERBOARD),1113)
195-
# BigTreeTech or BIQU KFB2.0
195+
# zrib V2.0 control board (Chinese knock off RAMPS replica)
196196
else ifeq ($(HARDWARE_MOTHERBOARD),1114)
197-
# Felix 2.0+ Electronics Board (RAMPS like)
197+
# BigTreeTech or BIQU KFB2.0
198198
else ifeq ($(HARDWARE_MOTHERBOARD),1115)
199-
# Invent-A-Part RigidBoard
199+
# Felix 2.0+ Electronics Board (RAMPS like)
200200
else ifeq ($(HARDWARE_MOTHERBOARD),1116)
201-
# Invent-A-Part RigidBoard V2
201+
# Invent-A-Part RigidBoard
202202
else ifeq ($(HARDWARE_MOTHERBOARD),1117)
203-
# Sainsmart 2-in-1 board
203+
# Invent-A-Part RigidBoard V2
204204
else ifeq ($(HARDWARE_MOTHERBOARD),1118)
205-
# Ultimaker
205+
# Sainsmart 2-in-1 board
206206
else ifeq ($(HARDWARE_MOTHERBOARD),1119)
207-
# Ultimaker (Older electronics. Pre 1.5.4. This is rare)
207+
# Ultimaker
208208
else ifeq ($(HARDWARE_MOTHERBOARD),1120)
209+
# Ultimaker (Older electronics. Pre 1.5.4. This is rare)
210+
else ifeq ($(HARDWARE_MOTHERBOARD),1121)
209211
MCU ?= atmega1280
210212

211213
# Azteeg X3
212-
else ifeq ($(HARDWARE_MOTHERBOARD),1121)
213-
# Azteeg X3 Pro
214214
else ifeq ($(HARDWARE_MOTHERBOARD),1122)
215-
# Ultimainboard 2.x (Uses TEMP_SENSOR 20)
215+
# Azteeg X3 Pro
216216
else ifeq ($(HARDWARE_MOTHERBOARD),1123)
217-
# Rumba
217+
# Ultimainboard 2.x (Uses TEMP_SENSOR 20)
218218
else ifeq ($(HARDWARE_MOTHERBOARD),1124)
219-
# Raise3D Rumba
219+
# Rumba
220220
else ifeq ($(HARDWARE_MOTHERBOARD),1125)
221-
# Rapide Lite RL200 Rumba
221+
# Raise3D Rumba
222222
else ifeq ($(HARDWARE_MOTHERBOARD),1126)
223-
# Formbot T-Rex 2 Plus
223+
# Rapide Lite RL200 Rumba
224224
else ifeq ($(HARDWARE_MOTHERBOARD),1127)
225-
# Formbot T-Rex 3
225+
# Formbot T-Rex 2 Plus
226226
else ifeq ($(HARDWARE_MOTHERBOARD),1128)
227-
# Formbot Raptor
227+
# Formbot T-Rex 3
228228
else ifeq ($(HARDWARE_MOTHERBOARD),1129)
229-
# Formbot Raptor 2
229+
# Formbot Raptor
230230
else ifeq ($(HARDWARE_MOTHERBOARD),1130)
231-
# bq ZUM Mega 3D
231+
# Formbot Raptor 2
232232
else ifeq ($(HARDWARE_MOTHERBOARD),1131)
233-
# MakeBoard Mini v2.1.2 is a control board sold by MicroMake
233+
# bq ZUM Mega 3D
234234
else ifeq ($(HARDWARE_MOTHERBOARD),1132)
235-
# TriGorilla Anycubic version 1.3 based on RAMPS EFB
235+
# MakeBoard Mini v2.1.2 is a control board sold by MicroMake
236236
else ifeq ($(HARDWARE_MOTHERBOARD),1133)
237-
# TriGorilla Anycubic version 1.4 based on RAMPS EFB
237+
# TriGorilla Anycubic version 1.3 based on RAMPS EFB
238238
else ifeq ($(HARDWARE_MOTHERBOARD),1134)
239-
# TriGorilla Anycubic version 1.4 Rev 1.1
239+
# TriGorilla Anycubic version 1.4 based on RAMPS EFB
240240
else ifeq ($(HARDWARE_MOTHERBOARD),1135)
241-
# Creality: Ender-4, CR-8
241+
# TriGorilla Anycubic version 1.4 Rev 1.1
242242
else ifeq ($(HARDWARE_MOTHERBOARD),1136)
243-
# Creality: CR10S, CR20, CR-X
243+
# Creality: Ender-4, CR-8
244244
else ifeq ($(HARDWARE_MOTHERBOARD),1137)
245-
# Dagoma F5
245+
# Creality: CR10S, CR20, CR-X
246246
else ifeq ($(HARDWARE_MOTHERBOARD),1138)
247-
# FYSETC F6 1.3
247+
# Dagoma F5
248248
else ifeq ($(HARDWARE_MOTHERBOARD),1139)
249-
# FYSETC F6 1.5
249+
# FYSETC F6 1.3
250250
else ifeq ($(HARDWARE_MOTHERBOARD),1140)
251-
# Duplicator i3 Plus
251+
# FYSETC F6 1.5
252252
else ifeq ($(HARDWARE_MOTHERBOARD),1141)
253-
# VORON
253+
# Duplicator i3 Plus
254254
else ifeq ($(HARDWARE_MOTHERBOARD),1142)
255-
# TRONXY V3 1.0
255+
# VORON
256256
else ifeq ($(HARDWARE_MOTHERBOARD),1143)
257-
# Z-Bolt X Series
257+
# TRONXY V3 1.0
258258
else ifeq ($(HARDWARE_MOTHERBOARD),1144)
259-
# TT OSCAR
259+
# Z-Bolt X Series
260260
else ifeq ($(HARDWARE_MOTHERBOARD),1145)
261-
# Overlord/Overlord Pro
261+
# TT OSCAR
262262
else ifeq ($(HARDWARE_MOTHERBOARD),1146)
263-
# ADIMLab Gantry v1
263+
# Overlord/Overlord Pro
264264
else ifeq ($(HARDWARE_MOTHERBOARD),1147)
265-
# ADIMLab Gantry v2
265+
# ADIMLab Gantry v1
266266
else ifeq ($(HARDWARE_MOTHERBOARD),1148)
267-
# BIQU Tango V1
267+
# ADIMLab Gantry v2
268268
else ifeq ($(HARDWARE_MOTHERBOARD),1149)
269-
# MKS GEN L V2
269+
# BIQU Tango V1
270270
else ifeq ($(HARDWARE_MOTHERBOARD),1150)
271-
# Copymaster 3D
271+
# MKS GEN L V2
272272
else ifeq ($(HARDWARE_MOTHERBOARD),1151)
273-
# Ortur 4
273+
# MKS GEN L V2.1
274274
else ifeq ($(HARDWARE_MOTHERBOARD),1152)
275-
# Tenlog D3 Hero
275+
# Copymaster 3D
276276
else ifeq ($(HARDWARE_MOTHERBOARD),1153)
277+
# Ortur 4
278+
else ifeq ($(HARDWARE_MOTHERBOARD),1154)
279+
# Tenlog D3 Hero
280+
else ifeq ($(HARDWARE_MOTHERBOARD),1155)
277281

278282
#
279283
# RAMBo and derivatives
@@ -694,7 +698,7 @@ ifeq ($(HARDWARE_VARIANT), Teensy)
694698
LIB_CXXSRC += usb_api.cpp
695699

696700
else ifeq ($(HARDWARE_VARIANT), archim)
697-
CDEFS += -DARDUINO_SAM_ARCHIM -DARDUINO_ARCH_SAM -D__SAM3X8E__ -DUSB_VID=0x27b1 -DUSB_PID=0x0001 -DUSBCON '-DUSB_MANUFACTURER="UltiMachine"' '-DUSB_PRODUCT="Archim"'
701+
CDEFS += -DARDUINO_SAM_ARCHIM -DARDUINO_ARCH_SAM -D__SAM3X8E__ -DUSB_VID=0x27b1 -DUSB_PID=0x0001 -DUSBCON '-DUSB_MANUFACTURER="UltiMachine"' '-DUSB_PRODUCT_STRING="Archim"'
698702
LIB_CXXSRC += variant.cpp IPAddress.cpp Reset.cpp RingBuffer.cpp Stream.cpp UARTClass.cpp USARTClass.cpp abi.cpp new.cpp watchdog.cpp CDC.cpp PluggableUSB.cpp USBCore.cpp
699703
LIB_SRC += cortex_handlers.c iar_calls_sam3.c syscalls_sam3.c dtostrf.c itoa.c
700704

Marlin/src/HAL/DUE/dogm/u8g_com_HAL_DUE_shared_hw_spi.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -147,4 +147,4 @@ uint8_t u8g_com_HAL_DUE_shared_hw_spi_fn(u8g_t *u8g, uint8_t msg, uint8_t arg_va
147147

148148
#endif // HAS_GRAPHICAL_LCD
149149

150-
#endif //__SAM3X8E__
150+
#endif // __SAM3X8E__

Marlin/src/HAL/LPC1768/HAL_SPI.cpp

+37-80
Original file line numberDiff line numberDiff line change
@@ -100,72 +100,25 @@
100100

101101
#else
102102

103-
// decide which HW SPI device to use
104-
#ifndef LPC_HW_SPI_DEV
105-
#if (SCK_PIN == P0_07 && MISO_PIN == P0_08 && MOSI_PIN == P0_09)
106-
#define LPC_HW_SPI_DEV 1
107-
#else
108-
#if (SCK_PIN == P0_15 && MISO_PIN == P0_17 && MOSI_PIN == P0_18)
109-
#define LPC_HW_SPI_DEV 0
110-
#else
111-
#error "Invalid pins selected for hardware SPI"
112-
#endif
113-
#endif
114-
#endif
115-
#if LPC_HW_SPI_DEV == 0
116-
#define LPC_SSPn LPC_SSP0
117-
#else
118-
#define LPC_SSPn LPC_SSP1
119-
#endif
120-
121103
void spiBegin() { // setup SCK, MOSI & MISO pins for SSP0
122-
PINSEL_CFG_Type PinCfg; // data structure to hold init values
123-
PinCfg.Funcnum = 2;
124-
PinCfg.OpenDrain = 0;
125-
PinCfg.Pinmode = 0;
126-
PinCfg.Pinnum = LPC176x::pin_bit(SCK_PIN);
127-
PinCfg.Portnum = LPC176x::pin_port(SCK_PIN);
128-
PINSEL_ConfigPin(&PinCfg);
129-
SET_OUTPUT(SCK_PIN);
130-
131-
PinCfg.Pinnum = LPC176x::pin_bit(MISO_PIN);
132-
PinCfg.Portnum = LPC176x::pin_port(MISO_PIN);
133-
PINSEL_ConfigPin(&PinCfg);
134-
SET_INPUT(MISO_PIN);
135-
136-
PinCfg.Pinnum = LPC176x::pin_bit(MOSI_PIN);
137-
PinCfg.Portnum = LPC176x::pin_port(MOSI_PIN);
138-
PINSEL_ConfigPin(&PinCfg);
139-
SET_OUTPUT(MOSI_PIN);
140-
// divide PCLK by 2 for SSP0
141-
CLKPWR_SetPCLKDiv(LPC_HW_SPI_DEV == 0 ? CLKPWR_PCLKSEL_SSP0 : CLKPWR_PCLKSEL_SSP1, CLKPWR_PCLKSEL_CCLK_DIV_2);
142-
spiInit(0);
143-
SSP_Cmd(LPC_SSPn, ENABLE); // start SSP running
104+
spiInit(SPI_SPEED);
144105
}
145106

146107
void spiInit(uint8_t spiRate) {
147-
// table to convert Marlin spiRates (0-5 plus default) into bit rates
148-
uint32_t Marlin_speed[7]; // CPSR is always 2
149-
Marlin_speed[0] = 8333333; //(SCR: 2) desired: 8,000,000 actual: 8,333,333 +4.2% SPI_FULL_SPEED
150-
Marlin_speed[1] = 4166667; //(SCR: 5) desired: 4,000,000 actual: 4,166,667 +4.2% SPI_HALF_SPEED
151-
Marlin_speed[2] = 2083333; //(SCR: 11) desired: 2,000,000 actual: 2,083,333 +4.2% SPI_QUARTER_SPEED
152-
Marlin_speed[3] = 1000000; //(SCR: 24) desired: 1,000,000 actual: 1,000,000 SPI_EIGHTH_SPEED
153-
Marlin_speed[4] = 500000; //(SCR: 49) desired: 500,000 actual: 500,000 SPI_SPEED_5
154-
Marlin_speed[5] = 250000; //(SCR: 99) desired: 250,000 actual: 250,000 SPI_SPEED_6
155-
Marlin_speed[6] = 125000; //(SCR:199) desired: 125,000 actual: 125,000 Default from HAL.h
156-
// setup for SPI mode
157-
SSP_CFG_Type HW_SPI_init; // data structure to hold init values
158-
SSP_ConfigStructInit(&HW_SPI_init); // set values for SPI mode
159-
HW_SPI_init.ClockRate = Marlin_speed[_MIN(spiRate, 6)]; // put in the specified bit rate
160-
HW_SPI_init.Mode |= SSP_CR1_SSP_EN;
161-
SSP_Init(LPC_SSPn, &HW_SPI_init); // puts the values into the proper bits in the SSP0 registers
108+
#if MISO_PIN == BOARD_SPI1_MISO_PIN
109+
SPI.setModule(1);
110+
#elif MISO_PIN == BOARD_SPI2_MISO_PIN
111+
SPI.setModule(2);
112+
#endif
113+
SPI.setDataSize(DATA_SIZE_8BIT);
114+
SPI.setDataMode(SPI_MODE0);
115+
116+
SPI.setClock(SPISettings::spiRate2Clock(spiRate));
117+
SPI.begin();
162118
}
163119

164120
static uint8_t doio(uint8_t b) {
165-
/* send and receive a single byte */
166-
SSP_SendData(LPC_SSPn, b & 0x00FF);
167-
while (SSP_GetStatus(LPC_SSPn, SSP_STAT_BUSY)); // wait for it to finish
168-
return SSP_ReceiveData(LPC_SSPn) & 0x00FF;
121+
return SPI.transfer(b & 0x00FF) & 0x00FF;
169122
}
170123

171124
void spiSend(uint8_t b) { doio(b); }
@@ -224,6 +177,9 @@ SPIClass::SPIClass(uint8_t device) {
224177
PINSEL_CFG_Type PinCfg; // data structure to hold init values
225178
#if BOARD_NR_SPI >= 1
226179
_settings[0].spi_d = LPC_SSP0;
180+
_settings[0].dataMode = SPI_MODE0;
181+
_settings[0].dataSize = DATA_SIZE_8BIT;
182+
_settings[0].clock = SPI_CLOCK_MAX;
227183
// _settings[0].clockDivider = determine_baud_rate(_settings[0].spi_d, _settings[0].clock);
228184
PinCfg.Funcnum = 2;
229185
PinCfg.OpenDrain = 0;
@@ -246,6 +202,9 @@ SPIClass::SPIClass(uint8_t device) {
246202

247203
#if BOARD_NR_SPI >= 2
248204
_settings[1].spi_d = LPC_SSP1;
205+
_settings[1].dataMode = SPI_MODE0;
206+
_settings[1].dataSize = DATA_SIZE_8BIT;
207+
_settings[1].clock = SPI_CLOCK_MAX;
249208
// _settings[1].clockDivider = determine_baud_rate(_settings[1].spi_d, _settings[1].clock);
250209
PinCfg.Funcnum = 2;
251210
PinCfg.OpenDrain = 0;
@@ -320,7 +279,7 @@ void SPIClass::dmaSend(void *buf, uint16_t length, bool minc) {
320279
// Destination memory - Not used
321280
GPDMACfg.DstMemAddr = 0;
322281
// Transfer size
323-
GPDMACfg.TransferSize = (minc ? length : 1);
282+
GPDMACfg.TransferSize = length;
324283
// Transfer width
325284
GPDMACfg.TransferWidth = (_currentSetting->dataSize == DATA_SIZE_16BIT) ? GPDMA_WIDTH_HALFWORD : GPDMA_WIDTH_BYTE;
326285
// Transfer type
@@ -335,26 +294,24 @@ void SPIClass::dmaSend(void *buf, uint16_t length, bool minc) {
335294
// Enable dma on SPI
336295
SSP_DMACmd(_currentSetting->spi_d, SSP_DMA_TX, ENABLE);
337296

338-
// if minc=false, I'm repeating the same byte 'length' times, as I could not find yet how do GPDMA without memory increment
339-
do {
340-
// Setup channel with given parameter
341-
GPDMA_Setup(&GPDMACfg);
297+
// only increase memory if minc is true
298+
GPDMACfg.MemoryIncrease = (minc ? GPDMA_DMACCxControl_SI : 0);
342299

343-
// enabled dma
344-
GPDMA_ChannelCmd(0, ENABLE);
300+
// Setup channel with given parameter
301+
GPDMA_Setup(&GPDMACfg);
345302

346-
// wait data transfer
347-
while (!GPDMA_IntGetStatus(GPDMA_STAT_INTTC, 0) && !GPDMA_IntGetStatus(GPDMA_STAT_INTERR, 0)) { }
303+
// enabled dma
304+
GPDMA_ChannelCmd(0, ENABLE);
348305

349-
// clear err and int
350-
GPDMA_ClearIntPending (GPDMA_STATCLR_INTTC, 0);
351-
GPDMA_ClearIntPending (GPDMA_STATCLR_INTERR, 0);
306+
// wait data transfer
307+
while (!GPDMA_IntGetStatus(GPDMA_STAT_RAWINTTC, 0) && !GPDMA_IntGetStatus(GPDMA_STAT_RAWINTERR, 0)) { }
352308

353-
// dma disable
354-
GPDMA_ChannelCmd(0, DISABLE);
309+
// clear err and int
310+
GPDMA_ClearIntPending (GPDMA_STATCLR_INTTC, 0);
311+
GPDMA_ClearIntPending (GPDMA_STATCLR_INTERR, 0);
355312

356-
--length;
357-
} while (!minc && length > 0);
313+
// dma disable
314+
GPDMA_ChannelCmd(0, DISABLE);
358315

359316
waitSpiTxEnd(_currentSetting->spi_d);
360317

@@ -382,7 +339,7 @@ void SPIClass::setBitOrder(uint8_t bitOrder) {
382339
}
383340

384341
void SPIClass::setDataMode(uint8_t dataMode) {
385-
_currentSetting->dataSize = dataMode;
342+
_currentSetting->dataMode = dataMode;
386343
}
387344

388345
void SPIClass::setDataSize(uint32_t ds) {
@@ -413,19 +370,19 @@ void SPIClass::updateSettings() {
413370
switch (_currentSetting->dataMode) {
414371
case SPI_MODE0:
415372
HW_SPI_init.CPHA = SSP_CPHA_FIRST;
416-
HW_SPI_init.CPOL = SSP_CPOL_HI;
373+
HW_SPI_init.CPOL = SSP_CPOL_HI;
417374
break;
418375
case SPI_MODE1:
419376
HW_SPI_init.CPHA = SSP_CPHA_SECOND;
420-
HW_SPI_init.CPOL = SSP_CPOL_HI;
377+
HW_SPI_init.CPOL = SSP_CPOL_HI;
421378
break;
422379
case SPI_MODE2:
423380
HW_SPI_init.CPHA = SSP_CPHA_FIRST;
424-
HW_SPI_init.CPOL = SSP_CPOL_LO;
381+
HW_SPI_init.CPOL = SSP_CPOL_LO;
425382
break;
426383
case SPI_MODE3:
427384
HW_SPI_init.CPHA = SSP_CPHA_SECOND;
428-
HW_SPI_init.CPOL = SSP_CPOL_LO;
385+
HW_SPI_init.CPOL = SSP_CPOL_LO;
429386
break;
430387
default:
431388
break;

0 commit comments

Comments
 (0)