From 57d420c53aa95519c368fc070971fcd61066b6db Mon Sep 17 00:00:00 2001 From: GMagician Date: Sun, 9 Feb 2020 00:29:29 +0100 Subject: [PATCH 1/6] AGCM4 fixes Some fixes and removed ADC_Filtered (some issues with DMA needs to be fixed) --- Marlin/src/HAL/HAL_SAMD51/HAL.cpp | 7 +++---- Marlin/src/HAL/HAL_SAMD51/HAL.h | 2 +- Marlin/src/HAL/HAL_SAMD51/HAL_SPI.cpp | 3 --- Marlin/src/HAL/HAL_SAMD51/fastio.h | 1 + Marlin/src/HAL/HAL_SAMD51/pinsDebug.h | 1 + Marlin/src/inc/Conditionals_post.h | 2 +- 6 files changed, 7 insertions(+), 9 deletions(-) diff --git a/Marlin/src/HAL/HAL_SAMD51/HAL.cpp b/Marlin/src/HAL/HAL_SAMD51/HAL.cpp index 2b8da883dcdb..5f254505dabf 100644 --- a/Marlin/src/HAL/HAL_SAMD51/HAL.cpp +++ b/Marlin/src/HAL/HAL_SAMD51/HAL.cpp @@ -427,7 +427,6 @@ void HAL_init() { dma_init(); #endif #if ENABLED(SDSUPPORT) - // SD_DETECT_PIN may be removed if NO_SD_HOST_DRIVE is not defined in Configuration_adv.h #if SD_CONNECTION_IS(ONBOARD) && PIN_EXISTS(SD_DETECT) SET_INPUT_PULLUP(SD_DETECT_PIN); #endif @@ -496,11 +495,11 @@ void HAL_adc_init() { // Preloaded data (fixed for all ADC instances hence not loaded by DMA) adc->REFCTRL.bit.REFSEL = ADC_REFCTRL_REFSEL_AREFA_Val; // VRefA pin SYNC(adc->SYNCBUSY.bit.REFCTRL); - adc->CTRLB.bit.RESSEL = ADC_CTRLB_RESSEL_12BIT_Val; + adc->CTRLB.bit.RESSEL = ADC_CTRLB_RESSEL_12BIT_Val/*ADC_CTRLB_RESSEL_16BIT_Val*/; SYNC(adc->SYNCBUSY.bit.CTRLB); adc->SAMPCTRL.bit.SAMPLEN = (6 - 1); // Sampling clocks - adc->AVGCTRL.reg = ADC_AVGCTRL_SAMPLENUM_16 | ADC_AVGCTRL_ADJRES(4); // 16 Accumulated conversions and shift 4 to get oversampled 12 bits result - SYNC(adc->SYNCBUSY.bit.AVGCTRL); + //adc->AVGCTRL.reg = ADC_AVGCTRL_SAMPLENUM_16 | ADC_AVGCTRL_ADJRES(4); // 16 Accumulated conversions and shift 4 to get oversampled 12 bits result + //SYNC(adc->SYNCBUSY.bit.AVGCTRL); // Registers loaded by DMA adc->DSEQCTRL.bit.INPUTCTRL = true; diff --git a/Marlin/src/HAL/HAL_SAMD51/HAL.h b/Marlin/src/HAL/HAL_SAMD51/HAL.h index 2eaa40f302b6..999398e8a2cb 100644 --- a/Marlin/src/HAL/HAL_SAMD51/HAL.h +++ b/Marlin/src/HAL/HAL_SAMD51/HAL.h @@ -128,7 +128,7 @@ extern uint16_t HAL_adc_result; // result of last ADC conversion void HAL_adc_init(); -#define HAL_ADC_FILTERED // Disable oversampling done in Marlin as ADC values already filtered in HAL +//#define HAL_ADC_FILTERED // Disable oversampling done in Marlin as ADC values already filtered in HAL #define HAL_ADC_RESOLUTION 12 #define HAL_START_ADC(pin) HAL_adc_start_conversion(pin) #define HAL_READ_ADC() HAL_adc_result diff --git a/Marlin/src/HAL/HAL_SAMD51/HAL_SPI.cpp b/Marlin/src/HAL/HAL_SAMD51/HAL_SPI.cpp index 4fe4c85b69de..83226daa481b 100644 --- a/Marlin/src/HAL/HAL_SAMD51/HAL_SPI.cpp +++ b/Marlin/src/HAL/HAL_SAMD51/HAL_SPI.cpp @@ -46,9 +46,6 @@ // ------------------------ #error "Software SPI not supported for SAMD51. Use Hardware SPI." - #if SD_CONNECTION_IS(ONBOARD) - #endif - #else // !SOFTWARE_SPI #ifdef ADAFRUIT_GRAND_CENTRAL_M4 diff --git a/Marlin/src/HAL/HAL_SAMD51/fastio.h b/Marlin/src/HAL/HAL_SAMD51/fastio.h index b5045e47bbca..c91965e19e0b 100644 --- a/Marlin/src/HAL/HAL_SAMD51/fastio.h +++ b/Marlin/src/HAL/HAL_SAMD51/fastio.h @@ -245,6 +245,7 @@ #define DIO17_PIN PIN_PC23 #define DIO88_PIN PIN_PC24 // NEOPIXEL // PORTD + #define DIO53_PIN PIN_PD10 #define DIO22_PIN PIN_PD12 #define DIO6_PIN PIN_PD20 #define DIO7_PIN PIN_PD21 diff --git a/Marlin/src/HAL/HAL_SAMD51/pinsDebug.h b/Marlin/src/HAL/HAL_SAMD51/pinsDebug.h index 07964fb1b3bb..15b647338261 100644 --- a/Marlin/src/HAL/HAL_SAMD51/pinsDebug.h +++ b/Marlin/src/HAL/HAL_SAMD51/pinsDebug.h @@ -149,5 +149,6 @@ void pwm_details(int32_t pin) { * 92 | PA9 | QSPI: IO1 * 93 | PA10 | QSPI: IO2 * 94 | PA11 | QSPI: IO3 + * 95 | PB31 | SD: DETECT * */ diff --git a/Marlin/src/inc/Conditionals_post.h b/Marlin/src/inc/Conditionals_post.h index ef7df41a1c68..79b8662aec35 100644 --- a/Marlin/src/inc/Conditionals_post.h +++ b/Marlin/src/inc/Conditionals_post.h @@ -2218,7 +2218,7 @@ #endif #if ENABLED(SDSUPPORT) - #if SD_CONNECTION_IS(ONBOARD) && DISABLED(NO_SD_HOST_DRIVE) + #if SD_CONNECTION_IS(ONBOARD) && DISABLED(NO_SD_HOST_DRIVE) && !defined(ARDUINO_GRAND_CENTRAL_M4) // // The external SD card is not used. Hardware SPI is used to access the card. // When sharing the SD card with a PC we want the menu options to From 834d63f6f1ff94fba7b65c25934bdc66ecb050aa Mon Sep 17 00:00:00 2001 From: GMagician Date: Sun, 9 Feb 2020 10:07:05 +0100 Subject: [PATCH 2/6] Limit adc to 10 bits --- Marlin/src/HAL/HAL_SAMD51/HAL.cpp | 2 +- Marlin/src/HAL/HAL_SAMD51/HAL.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Marlin/src/HAL/HAL_SAMD51/HAL.cpp b/Marlin/src/HAL/HAL_SAMD51/HAL.cpp index 5f254505dabf..94ef67a3a8f3 100644 --- a/Marlin/src/HAL/HAL_SAMD51/HAL.cpp +++ b/Marlin/src/HAL/HAL_SAMD51/HAL.cpp @@ -495,7 +495,7 @@ void HAL_adc_init() { // Preloaded data (fixed for all ADC instances hence not loaded by DMA) adc->REFCTRL.bit.REFSEL = ADC_REFCTRL_REFSEL_AREFA_Val; // VRefA pin SYNC(adc->SYNCBUSY.bit.REFCTRL); - adc->CTRLB.bit.RESSEL = ADC_CTRLB_RESSEL_12BIT_Val/*ADC_CTRLB_RESSEL_16BIT_Val*/; + adc->CTRLB.bit.RESSEL = ADC_CTRLB_RESSEL_10BIT_Val/*ADC_CTRLB_RESSEL_16BIT_Val*/; SYNC(adc->SYNCBUSY.bit.CTRLB); adc->SAMPCTRL.bit.SAMPLEN = (6 - 1); // Sampling clocks //adc->AVGCTRL.reg = ADC_AVGCTRL_SAMPLENUM_16 | ADC_AVGCTRL_ADJRES(4); // 16 Accumulated conversions and shift 4 to get oversampled 12 bits result diff --git a/Marlin/src/HAL/HAL_SAMD51/HAL.h b/Marlin/src/HAL/HAL_SAMD51/HAL.h index 999398e8a2cb..094f66a6fea8 100644 --- a/Marlin/src/HAL/HAL_SAMD51/HAL.h +++ b/Marlin/src/HAL/HAL_SAMD51/HAL.h @@ -129,7 +129,7 @@ extern uint16_t HAL_adc_result; // result of last ADC conversion void HAL_adc_init(); //#define HAL_ADC_FILTERED // Disable oversampling done in Marlin as ADC values already filtered in HAL -#define HAL_ADC_RESOLUTION 12 +#define HAL_ADC_RESOLUTION 10//12 #define HAL_START_ADC(pin) HAL_adc_start_conversion(pin) #define HAL_READ_ADC() HAL_adc_result #define HAL_ADC_READY() true From 08374586e8d9f2803d6ff9a0295ad21fa1bc6171 Mon Sep 17 00:00:00 2001 From: GMagician Date: Sun, 9 Feb 2020 13:24:00 +0100 Subject: [PATCH 3/6] Fix sd detect --- Marlin/src/inc/Conditionals_post.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Marlin/src/inc/Conditionals_post.h b/Marlin/src/inc/Conditionals_post.h index 79b8662aec35..5e31fe9b2b8a 100644 --- a/Marlin/src/inc/Conditionals_post.h +++ b/Marlin/src/inc/Conditionals_post.h @@ -300,7 +300,7 @@ /** * Override here because this is set in Configuration_adv.h */ -#if HAS_LCD_MENU && DISABLED(ELB_FULL_GRAPHIC_CONTROLLER) +#if HAS_LCD_MENU && DISABLED(ELB_FULL_GRAPHIC_CONTROLLER) && (!defined(ARDUINO_GRAND_CENTRAL_M4) || !SD_CONNECTION_IS(ONBOARD)) #undef SD_DETECT_INVERTED #endif From f2f895c7aead25c30bf34ef8ded9848a32e744ae Mon Sep 17 00:00:00 2001 From: Scott Lahteine Date: Sun, 9 Feb 2020 09:52:32 -0600 Subject: [PATCH 4/6] Update HAL.cpp --- Marlin/src/HAL/HAL_SAMD51/HAL.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Marlin/src/HAL/HAL_SAMD51/HAL.cpp b/Marlin/src/HAL/HAL_SAMD51/HAL.cpp index 94ef67a3a8f3..4828c40ff705 100644 --- a/Marlin/src/HAL/HAL_SAMD51/HAL.cpp +++ b/Marlin/src/HAL/HAL_SAMD51/HAL.cpp @@ -495,14 +495,14 @@ void HAL_adc_init() { // Preloaded data (fixed for all ADC instances hence not loaded by DMA) adc->REFCTRL.bit.REFSEL = ADC_REFCTRL_REFSEL_AREFA_Val; // VRefA pin SYNC(adc->SYNCBUSY.bit.REFCTRL); - adc->CTRLB.bit.RESSEL = ADC_CTRLB_RESSEL_10BIT_Val/*ADC_CTRLB_RESSEL_16BIT_Val*/; + adc->CTRLB.bit.RESSEL = ADC_CTRLB_RESSEL_10BIT_Val; // ... ADC_CTRLB_RESSEL_16BIT_Val SYNC(adc->SYNCBUSY.bit.CTRLB); adc->SAMPCTRL.bit.SAMPLEN = (6 - 1); // Sampling clocks //adc->AVGCTRL.reg = ADC_AVGCTRL_SAMPLENUM_16 | ADC_AVGCTRL_ADJRES(4); // 16 Accumulated conversions and shift 4 to get oversampled 12 bits result //SYNC(adc->SYNCBUSY.bit.AVGCTRL); + // Registers loaded by DMA adc->DSEQCTRL.bit.INPUTCTRL = true; - adc->DSEQCTRL.bit.AUTOSTART = true; // Start conversion after DMA sequence adc->CTRLA.bit.ENABLE = true; // Enable ADC From 2d294b7fc0c042db094b562dd6f0b21dc8a7aa8c Mon Sep 17 00:00:00 2001 From: Scott Lahteine Date: Sun, 9 Feb 2020 09:53:54 -0600 Subject: [PATCH 5/6] Update HAL.h --- Marlin/src/HAL/HAL_SAMD51/HAL.h | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Marlin/src/HAL/HAL_SAMD51/HAL.h b/Marlin/src/HAL/HAL_SAMD51/HAL.h index 094f66a6fea8..209514a70402 100644 --- a/Marlin/src/HAL/HAL_SAMD51/HAL.h +++ b/Marlin/src/HAL/HAL_SAMD51/HAL.h @@ -122,14 +122,14 @@ uint8_t eeprom_read_byte(uint8_t *pos); // // ADC // -extern uint16_t HAL_adc_result; // result of last ADC conversion +extern uint16_t HAL_adc_result; // Most recent ADC conversion #define HAL_ANALOG_SELECT(pin) void HAL_adc_init(); -//#define HAL_ADC_FILTERED // Disable oversampling done in Marlin as ADC values already filtered in HAL -#define HAL_ADC_RESOLUTION 10//12 +//#define HAL_ADC_FILTERED // Disable Marlin's oversampling. The HAL filters ADC values. +#define HAL_ADC_RESOLUTION 10 // ... 12 #define HAL_START_ADC(pin) HAL_adc_start_conversion(pin) #define HAL_READ_ADC() HAL_adc_result #define HAL_ADC_READY() true From ccc9f97d34e01553a8c6bed568e00c6feefbaf1c Mon Sep 17 00:00:00 2001 From: Scott Lahteine Date: Sun, 9 Feb 2020 09:55:55 -0600 Subject: [PATCH 6/6] Update Conditionals_post.h --- Marlin/src/inc/Conditionals_post.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Marlin/src/inc/Conditionals_post.h b/Marlin/src/inc/Conditionals_post.h index 5e31fe9b2b8a..624de26a0ba5 100644 --- a/Marlin/src/inc/Conditionals_post.h +++ b/Marlin/src/inc/Conditionals_post.h @@ -300,7 +300,7 @@ /** * Override here because this is set in Configuration_adv.h */ -#if HAS_LCD_MENU && DISABLED(ELB_FULL_GRAPHIC_CONTROLLER) && (!defined(ARDUINO_GRAND_CENTRAL_M4) || !SD_CONNECTION_IS(ONBOARD)) +#if HAS_LCD_MENU && DISABLED(ELB_FULL_GRAPHIC_CONTROLLER) && !(defined(ARDUINO_GRAND_CENTRAL_M4) && SD_CONNECTION_IS(ONBOARD)) #undef SD_DETECT_INVERTED #endif