From cbb9c339c72ed5e870809665baf10465f55647ab Mon Sep 17 00:00:00 2001 From: Tjeerd <33102280+Tjeerdie@users.noreply.github.com> Date: Tue, 19 May 2020 07:28:30 +0200 Subject: [PATCH] Bug fix: Pointers to Idle pins/port must always be initialized. (#375) * pointers to Idle pins must always be initialized. This is good practice. But this also gave problems with internal flash as EEPROM on STM32 otherwise. * cleanup --- speeduino/idle.ino | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/speeduino/idle.ino b/speeduino/idle.ino index 8cb34e6a..cd7caef8 100644 --- a/speeduino/idle.ino +++ b/speeduino/idle.ino @@ -23,6 +23,12 @@ void initialiseIdle() //By default, turn off the PWM interrupt (It gets turned on below if needed) IDLE_TIMER_DISABLE(); + //pins must always be initialized. + idle_pin_port = portOutputRegister(digitalPinToPort(pinIdle1)); + idle_pin_mask = digitalPinToBitMask(pinIdle1); + idle2_pin_port = portOutputRegister(digitalPinToPort(pinIdle2)); + idle2_pin_mask = digitalPinToBitMask(pinIdle2); + //Initialising comprises of setting the 2D tables with the relevant values from the config pages switch(configPage6.iacAlgorithm) { @@ -54,10 +60,6 @@ void initialiseIdle() iacCrankDutyTable.values = configPage6.iacCrankDuty; iacCrankDutyTable.axisX = configPage6.iacCrankBins; - idle_pin_port = portOutputRegister(digitalPinToPort(pinIdle1)); - idle_pin_mask = digitalPinToBitMask(pinIdle1); - idle2_pin_port = portOutputRegister(digitalPinToPort(pinIdle2)); - idle2_pin_mask = digitalPinToBitMask(pinIdle2); #if defined(CORE_AVR) idle_pwm_max_count = 1000000L / (16 * configPage6.idleFreq * 2); //Converts the frequency in Hz to the number of ticks (at 16uS) it takes to complete 1 cycle. Note that the frequency is divided by 2 coming from TS to allow for up to 512hz #elif defined(CORE_TEENSY) @@ -80,10 +82,6 @@ void initialiseIdle() iacCrankDutyTable.values = configPage6.iacCrankDuty; iacCrankDutyTable.axisX = configPage6.iacCrankBins; - idle_pin_port = portOutputRegister(digitalPinToPort(pinIdle1)); - idle_pin_mask = digitalPinToBitMask(pinIdle1); - idle2_pin_port = portOutputRegister(digitalPinToPort(pinIdle2)); - idle2_pin_mask = digitalPinToBitMask(pinIdle2); #if defined(CORE_AVR) idle_pwm_max_count = 1000000L / (16 * configPage6.idleFreq * 2); //Converts the frequency in Hz to the number of ticks (at 16uS) it takes to complete 1 cycle. Note that the frequency is divided by 2 coming from TS to allow for up to 512hz #elif defined(CORE_TEENSY)