Multiple stm32 and general arch cleanup/fix from last merge
This commit is contained in:
parent
f3870cd350
commit
f96999dd2d
|
@ -46,14 +46,16 @@ board = genericSTM32F103RB
|
|||
lib_deps = EEPROM, HardwareTimer, Flash_STM32
|
||||
build_flags = -fpermissive -std=gnu++11 -UBOARD_NR_GPIO_PINS -DUSE_STM32GENERIC -DMENU_USB_SERIAL
|
||||
|
||||
;STM32 Official core
|
||||
[env:black_F407VE]
|
||||
;platform = ststm32@~4.5.0
|
||||
platform = ststm32
|
||||
framework = arduino
|
||||
; framework-arduinoststm32
|
||||
board = black_F407VE
|
||||
board = genericSTM32F407VET6
|
||||
lib_deps = EEPROM
|
||||
build_flags = -fpermissive -std=gnu++11 -UBOARD_NR_GPIO_PINS -DUSE_STM32GENERIC -DMENU_USB_SERIAL
|
||||
build_flags = -fpermissive -std=gnu++11 -UBOARD_NR_GPIO_PINS -DMENU_USB_SERIAL
|
||||
upload_protocol = dfu
|
||||
|
||||
[env:bluepill_f103c8]
|
||||
platform = ststm32
|
||||
|
|
|
@ -76,527 +76,6 @@ static inline unsigned long micros_safe()
|
|||
|
||||
return newMicros;
|
||||
}
|
||||
#endif
|
||||
void setPinMapping(byte boardID)
|
||||
{
|
||||
switch (boardID)
|
||||
{
|
||||
case 0:
|
||||
//Pin mappings as per the v0.1 shield
|
||||
pinInjector1 = 8; //Output pin injector 1 is on
|
||||
pinInjector2 = 9; //Output pin injector 2 is on
|
||||
pinInjector3 = 11; //Output pin injector 3 is on
|
||||
pinInjector4 = 10; //Output pin injector 4 is on
|
||||
pinInjector5 = 12; //Output pin injector 5 is on
|
||||
pinCoil1 = 6; //Pin for coil 1
|
||||
pinCoil2 = 7; //Pin for coil 2
|
||||
pinCoil3 = 12; //Pin for coil 3
|
||||
pinCoil4 = 13; //Pin for coil 4
|
||||
pinCoil5 = 14; //Pin for coil 5
|
||||
pinTrigger = 2; //The CAS pin
|
||||
pinTrigger2 = 3; //The CAS pin
|
||||
pinTPS = A0; //TPS input pin
|
||||
pinMAP = A1; //MAP sensor pin
|
||||
pinIAT = A2; //IAT sensor pin
|
||||
pinCLT = A3; //CLS sensor pin
|
||||
pinO2 = A4; //O2 Sensor pin
|
||||
pinIdle1 = 46; //Single wire idle control
|
||||
pinIdle2 = 47; //2 wire idle control
|
||||
pinStepperDir = 16; //Direction pin for DRV8825 driver
|
||||
pinStepperStep = 17; //Step pin for DRV8825 driver
|
||||
pinFan = 47; //Pin for the fan output
|
||||
pinFuelPump = 4; //Fuel pump output
|
||||
pinTachOut = 49; //Tacho output pin
|
||||
pinFlex = 19; // Flex sensor (Must be external interrupt enabled)
|
||||
pinResetControl = 43; //Reset control output
|
||||
break;
|
||||
case 1:
|
||||
//Pin mappings as per the v0.2 shield
|
||||
pinInjector1 = 8; //Output pin injector 1 is on
|
||||
pinInjector2 = 9; //Output pin injector 2 is on
|
||||
pinInjector3 = 10; //Output pin injector 3 is on
|
||||
pinInjector4 = 11; //Output pin injector 4 is on
|
||||
pinInjector5 = 12; //Output pin injector 5 is on
|
||||
pinCoil1 = 28; //Pin for coil 1
|
||||
pinCoil2 = 24; //Pin for coil 2
|
||||
pinCoil3 = 40; //Pin for coil 3
|
||||
pinCoil4 = 36; //Pin for coil 4
|
||||
pinCoil5 = 34; //Pin for coil 5 PLACEHOLDER value for now
|
||||
pinTrigger = 20; //The CAS pin
|
||||
pinTrigger2 = 21; //The Cam Sensor pin
|
||||
pinTPS = A2; //TPS input pin
|
||||
pinMAP = A3; //MAP sensor pin
|
||||
pinIAT = A0; //IAT sensor pin
|
||||
pinCLT = A1; //CLS sensor pin
|
||||
pinO2 = A8; //O2 Sensor pin
|
||||
pinBat = A4; //Battery reference voltage pin
|
||||
pinDisplayReset = 48; // OLED reset pin
|
||||
pinTachOut = 49; //Tacho output pin
|
||||
pinIdle1 = 30; //Single wire idle control
|
||||
pinIdle2 = 31; //2 wire idle control
|
||||
pinStepperDir = 16; //Direction pin for DRV8825 driver
|
||||
pinStepperStep = 17; //Step pin for DRV8825 driver
|
||||
pinFan = 47; //Pin for the fan output
|
||||
pinFuelPump = 4; //Fuel pump output
|
||||
pinFlex = 2; // Flex sensor (Must be external interrupt enabled)
|
||||
pinResetControl = 43; //Reset control output
|
||||
break;
|
||||
case 2:
|
||||
//Pin mappings as per the v0.3 shield
|
||||
pinInjector1 = 8; //Output pin injector 1 is on
|
||||
pinInjector2 = 9; //Output pin injector 2 is on
|
||||
pinInjector3 = 10; //Output pin injector 3 is on
|
||||
pinInjector4 = 11; //Output pin injector 4 is on
|
||||
pinInjector5 = 12; //Output pin injector 5 is on
|
||||
pinCoil1 = 28; //Pin for coil 1
|
||||
pinCoil2 = 24; //Pin for coil 2
|
||||
pinCoil3 = 40; //Pin for coil 3
|
||||
pinCoil4 = 36; //Pin for coil 4
|
||||
pinCoil5 = 34; //Pin for coil 5 PLACEHOLDER value for now
|
||||
pinTrigger = 19; //The CAS pin
|
||||
pinTrigger2 = 18; //The Cam Sensor pin
|
||||
pinTPS = A2;//TPS input pin
|
||||
pinMAP = A3; //MAP sensor pin
|
||||
pinIAT = A0; //IAT sensor pin
|
||||
pinCLT = A1; //CLS sensor pin
|
||||
pinO2 = A8; //O2 Sensor pin
|
||||
pinBat = A4; //Battery reference voltage pin
|
||||
pinDisplayReset = 48; // OLED reset pin
|
||||
pinTachOut = 49; //Tacho output pin
|
||||
pinIdle1 = 5; //Single wire idle control
|
||||
pinIdle2 = 53; //2 wire idle control
|
||||
pinBoost = 7; //Boost control
|
||||
pinVVT_1 = 6; //Default VVT output
|
||||
pinFuelPump = 4; //Fuel pump output
|
||||
pinStepperDir = 16; //Direction pin for DRV8825 driver
|
||||
pinStepperStep = 17; //Step pin for DRV8825 driver
|
||||
pinStepperEnable = 26; //Enable pin for DRV8825
|
||||
pinFan = A13; //Pin for the fan output
|
||||
pinLaunch = 51; //Can be overwritten below
|
||||
pinFlex = 2; // Flex sensor (Must be external interrupt enabled)
|
||||
pinResetControl = 50; //Reset control output
|
||||
break;
|
||||
#endif //TIMER5_MICROS
|
||||
|
||||
case 3:
|
||||
//Pin mappings as per the v0.4 shield
|
||||
pinInjector1 = 8; //Output pin injector 1 is on
|
||||
pinInjector2 = 9; //Output pin injector 2 is on
|
||||
pinInjector3 = 10; //Output pin injector 3 is on
|
||||
pinInjector4 = 11; //Output pin injector 4 is on
|
||||
pinInjector5 = 12; //Output pin injector 5 is on
|
||||
pinInjector6 = 50; //CAUTION: Uses the same as Coil 4 below.
|
||||
pinCoil1 = 40; //Pin for coil 1
|
||||
pinCoil2 = 38; //Pin for coil 2
|
||||
pinCoil3 = 52; //Pin for coil 3
|
||||
pinCoil4 = 50; //Pin for coil 4
|
||||
pinCoil5 = 34; //Pin for coil 5 PLACEHOLDER value for now
|
||||
pinTrigger = 19; //The CAS pin
|
||||
pinTrigger2 = 18; //The Cam Sensor pin
|
||||
pinTPS = A2;//TPS input pin
|
||||
pinMAP = A3; //MAP sensor pin
|
||||
pinIAT = A0; //IAT sensor pin
|
||||
pinCLT = A1; //CLS sensor pin
|
||||
pinO2 = A8; //O2 Sensor pin
|
||||
pinBat = A4; //Battery reference voltage pin
|
||||
pinDisplayReset = 48; // OLED reset pin
|
||||
pinTachOut = 49; //Tacho output pin (Goes to ULN2803)
|
||||
pinIdle1 = 5; //Single wire idle control
|
||||
pinIdle2 = 6; //2 wire idle control
|
||||
pinBoost = 7; //Boost control
|
||||
pinVVT_1 = 4; //Default VVT output
|
||||
pinFuelPump = 45; //Fuel pump output (Goes to ULN2803)
|
||||
pinStepperDir = 16; //Direction pin for DRV8825 driver
|
||||
pinStepperStep = 17; //Step pin for DRV8825 driver
|
||||
pinStepperEnable = 24; //Enable pin for DRV8825
|
||||
pinFan = 47; //Pin for the fan output (Goes to ULN2803)
|
||||
pinLaunch = 51; //Can be overwritten below
|
||||
pinFlex = 2; // Flex sensor (Must be external interrupt enabled)
|
||||
pinResetControl = 43; //Reset control output
|
||||
|
||||
break;
|
||||
|
||||
case 9:
|
||||
//Pin mappings as per the MX5 PNP shield
|
||||
pinInjector1 = 11; //Output pin injector 1 is on
|
||||
pinInjector2 = 10; //Output pin injector 2 is on
|
||||
pinInjector3 = 9; //Output pin injector 3 is on
|
||||
pinInjector4 = 8; //Output pin injector 4 is on
|
||||
pinInjector5 = 14; //Output pin injector 5 is on
|
||||
pinCoil1 = 39; //Pin for coil 1
|
||||
pinCoil2 = 41; //Pin for coil 2
|
||||
pinCoil3 = 32; //Pin for coil 3
|
||||
pinCoil4 = 33; //Pin for coil 4
|
||||
pinCoil5 = 34; //Pin for coil 5 PLACEHOLDER value for now
|
||||
pinTrigger = 19; //The CAS pin
|
||||
pinTrigger2 = 18; //The Cam Sensor pin
|
||||
pinTPS = A2;//TPS input pin
|
||||
pinMAP = A5; //MAP sensor pin
|
||||
pinIAT = A0; //IAT sensor pin
|
||||
pinCLT = A1; //CLS sensor pin
|
||||
pinO2 = A3; //O2 Sensor pin
|
||||
pinBat = A4; //Battery reference voltage pin
|
||||
pinDisplayReset = 48; // OLED reset pin
|
||||
pinTachOut = 49; //Tacho output pin (Goes to ULN2803)
|
||||
pinIdle1 = 2; //Single wire idle control
|
||||
pinBoost = 4;
|
||||
pinIdle2 = 4; //2 wire idle control (Note this is shared with boost!!!)
|
||||
pinFuelPump = 37; //Fuel pump output
|
||||
pinStepperDir = 16; //Direction pin for DRV8825 driver
|
||||
pinStepperStep = 17; //Step pin for DRV8825 driver
|
||||
pinFan = 35; //Pin for the fan output
|
||||
pinLaunch = 12; //Can be overwritten below
|
||||
pinFlex = 3; // Flex sensor (Must be external interrupt enabled)
|
||||
pinResetControl = 44; //Reset control output
|
||||
|
||||
break;
|
||||
|
||||
case 10:
|
||||
|
||||
//Pin mappings for user turtanas PCB
|
||||
pinInjector1 = 4; //Output pin injector 1 is on
|
||||
pinInjector2 = 5; //Output pin injector 2 is on
|
||||
pinInjector3 = 6; //Output pin injector 3 is on
|
||||
pinInjector4 = 7; //Output pin injector 4 is on
|
||||
pinInjector5 = 8; //Placeholder only - NOT USED
|
||||
pinInjector6 = 9; //Placeholder only - NOT USED
|
||||
pinInjector7 = 10; //Placeholder only - NOT USED
|
||||
pinInjector8 = 11; //Placeholder only - NOT USED
|
||||
pinCoil1 = 24; //Pin for coil 1
|
||||
pinCoil2 = 28; //Pin for coil 2
|
||||
pinCoil3 = 36; //Pin for coil 3
|
||||
pinCoil4 = 40; //Pin for coil 4
|
||||
pinCoil5 = 34; //Pin for coil 5 PLACEHOLDER value for now
|
||||
pinTrigger = 18; //The CAS pin
|
||||
pinTrigger2 = 19; //The Cam Sensor pin
|
||||
pinTPS = A2;//TPS input pin
|
||||
pinMAP = A3; //MAP sensor pin
|
||||
pinMAP2 = A8; //MAP2 sensor pin
|
||||
pinIAT = A0; //IAT sensor pin
|
||||
pinCLT = A1; //CLS sensor pin
|
||||
pinO2 = A4; //O2 Sensor pin
|
||||
pinBat = A7; //Battery reference voltage pin
|
||||
pinDisplayReset = 48; // OLED reset pin
|
||||
pinSpareTemp1 = A6;
|
||||
pinSpareTemp2 = A5;
|
||||
pinTachOut = 41; //Tacho output pin transistori puuttuu 2n2222 tähän ja 1k 12v
|
||||
pinFuelPump = 42; //Fuel pump output 2n2222
|
||||
pinFan = 47; //Pin for the fan output
|
||||
pinTachOut = 49; //Tacho output pin
|
||||
pinFlex = 2; // Flex sensor (Must be external interrupt enabled)
|
||||
pinResetControl = 26; //Reset control output
|
||||
|
||||
|
||||
break;
|
||||
|
||||
case 20:
|
||||
//Pin mappings as per the Plazomat In/Out shields Rev 0.1
|
||||
pinInjector1 = 8; //Output pin injector 1 is on
|
||||
pinInjector2 = 9; //Output pin injector 2 is on
|
||||
pinInjector3 = 10; //Output pin injector 3 is on
|
||||
pinInjector4 = 11; //Output pin injector 4 is on
|
||||
pinInjector5 = 12; //Output pin injector 5 is on
|
||||
pinCoil1 = 28; //Pin for coil 1
|
||||
pinCoil2 = 24; //Pin for coil 2
|
||||
pinCoil3 = 40; //Pin for coil 3
|
||||
pinCoil4 = 36; //Pin for coil 4
|
||||
pinCoil5 = 34; //Pin for coil 5 PLACEHOLDER value for now
|
||||
pinSpareOut1 = 4; //Spare LSD Output 1(PWM)
|
||||
pinSpareOut2 = 5; //Spare LSD Output 2(PWM)
|
||||
pinSpareOut3 = 6; //Spare LSD Output 3(PWM)
|
||||
pinSpareOut4 = 7; //Spare LSD Output 4(PWM)
|
||||
pinSpareOut5 = 50; //Spare LSD Output 5(digital)
|
||||
pinSpareOut6 = 52; //Spare LSD Output 6(digital)
|
||||
pinTrigger = 20; //The CAS pin
|
||||
pinTrigger2 = 21; //The Cam Sensor pin
|
||||
pinSpareTemp2 = A15; //spare Analog input 2
|
||||
pinSpareTemp1 = A14; //spare Analog input 1
|
||||
pinO2 = A8; //O2 Sensor pin
|
||||
pinBat = A4; //Battery reference voltage pin
|
||||
pinMAP = A3; //MAP sensor pin
|
||||
pinTPS = A2;//TPS input pin
|
||||
pinCLT = A1; //CLS sensor pin
|
||||
pinIAT = A0; //IAT sensor pin
|
||||
pinFan = 47; //Pin for the fan output
|
||||
pinFuelPump = 4; //Fuel pump output
|
||||
pinTachOut = 49; //Tacho output pin
|
||||
pinResetControl = 26; //Reset control output
|
||||
break;
|
||||
|
||||
case 30:
|
||||
//Pin mappings as per the dazv6 shield
|
||||
pinInjector1 = 8; //Output pin injector 1 is on
|
||||
pinInjector2 = 9; //Output pin injector 2 is on
|
||||
pinInjector3 = 10; //Output pin injector 3 is on
|
||||
pinInjector4 = 11; //Output pin injector 4 is on
|
||||
pinInjector5 = 12; //Output pin injector 5 is on
|
||||
pinCoil1 = 40; //Pin for coil 1
|
||||
pinCoil2 = 38; //Pin for coil 2
|
||||
pinCoil3 = 50; //Pin for coil 3
|
||||
pinCoil4 = 52; //Pin for coil 4
|
||||
pinCoil5 = 34; //Pin for coil 5 PLACEHOLDER value for now
|
||||
pinTrigger = 19; //The CAS pin
|
||||
pinTrigger2 = 18; //The Cam Sensor pin
|
||||
pinTrigger3 = 17; // cam sensor 2 pin
|
||||
pinTPS = A2;//TPS input pin
|
||||
pinMAP = A3; //MAP sensor pin
|
||||
pinIAT = A0; //IAT sensor pin
|
||||
pinCLT = A1; //CLS sensor pin
|
||||
pinO2 = A8; //O2 Sensor pin
|
||||
pinO2_2 = A9; //O2 sensor pin (second sensor)
|
||||
pinBat = A4; //Battery reference voltage pin
|
||||
pinDisplayReset = 48; // OLED reset pin
|
||||
pinTachOut = 49; //Tacho output pin
|
||||
pinIdle1 = 5; //Single wire idle control
|
||||
pinFuelPump = 45; //Fuel pump output
|
||||
pinStepperDir = 20; //Direction pin for DRV8825 driver
|
||||
pinStepperStep = 21; //Step pin for DRV8825 driver
|
||||
pinSpareHOut1 = 4; // high current output spare1
|
||||
pinSpareHOut2 = 6; // high current output spare2
|
||||
pinBoost = 7;
|
||||
pinSpareLOut1 = 43; //low current output spare1
|
||||
pinSpareLOut2 = 47;
|
||||
pinSpareLOut3 = 49;
|
||||
pinSpareLOut4 = 51;
|
||||
pinSpareLOut5 = 53;
|
||||
pinFan = 47; //Pin for the fan output
|
||||
break;
|
||||
|
||||
case 40:
|
||||
//Pin mappings as per the NO2C shield
|
||||
pinInjector1 = 8; //Output pin injector 1 is on
|
||||
pinInjector2 = 9; //Output pin injector 2 is on
|
||||
pinInjector3 = 11; //Output pin injector 3 is on - NOT USED
|
||||
pinInjector4 = 12; //Output pin injector 4 is on - NOT USED
|
||||
pinInjector5 = 13; //Placeholder only - NOT USED
|
||||
pinCoil1 = 23; //Pin for coil 1
|
||||
pinCoil2 = 22; //Pin for coil 2
|
||||
pinCoil3 = 2; //Pin for coil 3 - ONLY WITH DB2
|
||||
pinCoil4 = 3; //Pin for coil 4 - ONLY WITH DB2
|
||||
pinCoil5 = 46; //Placeholder only - NOT USED
|
||||
pinTrigger = 19; //The CAS pin
|
||||
pinTrigger2 = 18; //The Cam Sensor pin
|
||||
pinTPS = A3; //TPS input pin
|
||||
pinMAP = A0; //MAP sensor pin
|
||||
pinIAT = A5; //IAT sensor pin
|
||||
pinCLT = A4; //CLT sensor pin
|
||||
pinO2 = A2; //O2 sensor pin
|
||||
pinBat = A1; //Battery reference voltage pin
|
||||
pinBaro = A6; //Baro sensor pin - ONLY WITH DB
|
||||
pinSpareTemp1 = A7; //spare Analog input 1 - ONLY WITH DB
|
||||
pinDisplayReset = 48; // OLED reset pin - NOT USED
|
||||
pinTachOut = 38; //Tacho output pin
|
||||
pinIdle1 = 5; //Single wire idle control
|
||||
pinIdle2 = 47; //2 wire idle control - NOT USED
|
||||
pinBoost = 7; //Boost control
|
||||
pinVVT_1 = 6; //Default VVT output
|
||||
pinFuelPump = 4; //Fuel pump output
|
||||
pinStepperDir = 25; //Direction pin for DRV8825 driver
|
||||
pinStepperStep = 24; //Step pin for DRV8825 driver
|
||||
pinStepperEnable = 27; //Enable pin for DRV8825 driver
|
||||
pinLaunch = 10; //Can be overwritten below
|
||||
pinFlex = 20; // Flex sensor (Must be external interrupt enabled) - ONLY WITH DB
|
||||
pinFan = 30; //Pin for the fan output - ONLY WITH DB
|
||||
pinSpareLOut1 = 32; //low current output spare1 - ONLY WITH DB
|
||||
pinSpareLOut2 = 34; //low current output spare2 - ONLY WITH DB
|
||||
pinSpareLOut3 = 36; //low current output spare3 - ONLY WITH DB
|
||||
pinResetControl = 26; //Reset control output
|
||||
break;
|
||||
|
||||
case 41:
|
||||
//Pin mappings as per the UA4C shield
|
||||
pinInjector1 = 8; //Output pin injector 1 is on
|
||||
pinInjector2 = 7; //Output pin injector 2 is on
|
||||
pinInjector3 = 6; //Output pin injector 3 is on
|
||||
pinInjector4 = 5; //Output pin injector 4 is on
|
||||
pinInjector5 = 45; //Output pin injector 5 is on PLACEHOLDER value for now
|
||||
pinCoil1 = 35; //Pin for coil 1
|
||||
pinCoil2 = 36; //Pin for coil 2
|
||||
pinCoil3 = 33; //Pin for coil 3
|
||||
pinCoil4 = 34; //Pin for coil 4
|
||||
pinCoil5 = 44; //Pin for coil 5 PLACEHOLDER value for now
|
||||
pinTrigger = 19; //The CAS pin
|
||||
pinTrigger2 = 18; //The Cam Sensor pin
|
||||
pinFlex = 20; // Flex sensor
|
||||
pinTPS = A3; //TPS input pin
|
||||
pinMAP = A0; //MAP sensor pin
|
||||
pinBaro = A7; //Baro sensor pin
|
||||
pinIAT = A5; //IAT sensor pin
|
||||
pinCLT = A4; //CLS sensor pin
|
||||
pinO2 = A1; //O2 Sensor pin
|
||||
pinO2_2 = A9; //O2 sensor pin (second sensor)
|
||||
pinBat = A2; //Battery reference voltage pin
|
||||
pinSpareTemp1 = A8; //spare Analog input 1
|
||||
pinLaunch = 37; //Can be overwritten below
|
||||
pinDisplayReset = 48; // OLED reset pin PLACEHOLDER value for now
|
||||
pinTachOut = 22; //Tacho output pin
|
||||
pinIdle1 = 9; //Single wire idle control
|
||||
pinIdle2 = 10; //2 wire idle control
|
||||
pinFuelPump = 23; //Fuel pump output
|
||||
pinVVT_1 = 11; //Default VVT output
|
||||
pinStepperDir = 32; //Direction pin for DRV8825 driver
|
||||
pinStepperStep = 31; //Step pin for DRV8825 driver
|
||||
pinStepperEnable = 30; //Enable pin for DRV8825 driver
|
||||
pinBoost = 12; //Boost control
|
||||
pinSpareLOut1 = 26; //low current output spare1
|
||||
pinSpareLOut2 = 27; //low current output spare2
|
||||
pinSpareLOut3 = 28; //low current output spare3
|
||||
pinSpareLOut4 = 29; //low current output spare4
|
||||
pinFan = 24; //Pin for the fan output
|
||||
pinResetControl = 46; //Reset control output PLACEHOLDER value for now
|
||||
break;
|
||||
|
||||
default:
|
||||
//Pin mappings as per the v0.2 shield
|
||||
pinInjector1 = 8; //Output pin injector 1 is on
|
||||
pinInjector2 = 9; //Output pin injector 2 is on
|
||||
pinInjector3 = 10; //Output pin injector 3 is on
|
||||
pinInjector4 = 11; //Output pin injector 4 is on
|
||||
pinInjector5 = 12; //Output pin injector 5 is on
|
||||
pinCoil1 = 28; //Pin for coil 1
|
||||
pinCoil2 = 24; //Pin for coil 2
|
||||
pinCoil3 = 40; //Pin for coil 3
|
||||
pinCoil4 = 36; //Pin for coil 4
|
||||
pinCoil5 = 34; //Pin for coil 5 PLACEHOLDER value for now
|
||||
pinTrigger = 20; //The CAS pin
|
||||
pinTrigger2 = 21; //The Cam Sensor pin
|
||||
pinTPS = A2; //TPS input pin
|
||||
pinMAP = A3; //MAP sensor pin
|
||||
pinIAT = A0; //IAT sensor pin
|
||||
pinCLT = A1; //CLS sensor pin
|
||||
pinO2 = A8; //O2 Sensor pin
|
||||
pinBat = A4; //Battery reference voltage pin
|
||||
pinStepperDir = 16; //Direction pin for DRV8825 driver
|
||||
pinStepperStep = 17; //Step pin for DRV8825 driver
|
||||
pinDisplayReset = 48; // OLED reset pin
|
||||
pinFan = 47; //Pin for the fan output
|
||||
pinFuelPump = 4; //Fuel pump output
|
||||
pinTachOut = 49; //Tacho output pin
|
||||
pinFlex = 3; // Flex sensor (Must be external interrupt enabled)
|
||||
pinBoost = 5;
|
||||
pinIdle1 = 6;
|
||||
pinResetControl = 43; //Reset control output
|
||||
break;
|
||||
}
|
||||
|
||||
//Setup any devices that are using selectable pins
|
||||
|
||||
if ( (configPage6.launchPin != 0) && (configPage6.launchPin < BOARD_NR_GPIO_PINS) ) { pinLaunch = pinTranslate(configPage6.launchPin); }
|
||||
if ( (configPage4.ignBypassPin != 0) && (configPage4.ignBypassPin < BOARD_NR_GPIO_PINS) ) { pinIgnBypass = pinTranslate(configPage4.ignBypassPin); }
|
||||
if ( (configPage2.tachoPin != 0) && (configPage2.tachoPin < BOARD_NR_GPIO_PINS) ) { pinTachOut = pinTranslate(configPage2.tachoPin); }
|
||||
if ( (configPage4.fuelPumpPin != 0) && (configPage4.fuelPumpPin < BOARD_NR_GPIO_PINS) ) { pinFuelPump = pinTranslate(configPage4.fuelPumpPin); }
|
||||
if ( (configPage6.fanPin != 0) && (configPage6.fanPin < BOARD_NR_GPIO_PINS) ) { pinFan = pinTranslate(configPage6.fanPin); }
|
||||
if ( (configPage6.boostPin != 0) && (configPage6.boostPin < BOARD_NR_GPIO_PINS) ) { pinBoost = pinTranslate(configPage6.boostPin); }
|
||||
if ( (configPage6.vvtPin != 0) && (configPage6.vvtPin < BOARD_NR_GPIO_PINS) ) { pinVVT_1 = pinTranslate(configPage6.vvtPin); }
|
||||
if ( (configPage6.useExtBaro != 0) && (configPage6.baroPin < BOARD_NR_GPIO_PINS) ) { pinBaro = configPage6.baroPin + A0; }
|
||||
if ( (configPage6.useEMAP != 0) && (configPage10.EMAPPin < BOARD_NR_GPIO_PINS) ) { pinEMAP = configPage10.EMAPPin + A0; }
|
||||
|
||||
//Currently there's no default pin for Idle Up
|
||||
pinIdleUp = pinTranslate(configPage2.idleUpPin);
|
||||
|
||||
/* Reset control is a special case. If reset control is enabled, it needs its initial state set BEFORE its pinMode.
|
||||
If that doesn't happen and reset control is in "Serial Command" mode, the Arduino will end up in a reset loop
|
||||
because the control pin will go low as soon as the pinMode is set to OUTPUT. */
|
||||
if ( (configPage4.resetControl != 0) && (configPage4.resetControlPin < BOARD_NR_GPIO_PINS) )
|
||||
{
|
||||
resetControl = configPage4.resetControl;
|
||||
pinResetControl = pinTranslate(configPage4.resetControlPin);
|
||||
setResetControlPinState();
|
||||
pinMode(pinResetControl, OUTPUT);
|
||||
}
|
||||
|
||||
//Finally, set the relevant pin modes for outputs
|
||||
pinMode(pinCoil1, OUTPUT);
|
||||
pinMode(pinCoil2, OUTPUT);
|
||||
pinMode(pinCoil3, OUTPUT);
|
||||
pinMode(pinCoil4, OUTPUT);
|
||||
pinMode(pinCoil5, OUTPUT);
|
||||
pinMode(pinInjector1, OUTPUT);
|
||||
pinMode(pinInjector2, OUTPUT);
|
||||
pinMode(pinInjector3, OUTPUT);
|
||||
pinMode(pinInjector4, OUTPUT);
|
||||
pinMode(pinInjector5, OUTPUT);
|
||||
pinMode(pinTachOut, OUTPUT);
|
||||
pinMode(pinIdle1, OUTPUT);
|
||||
pinMode(pinIdle2, OUTPUT);
|
||||
pinMode(pinFuelPump, OUTPUT);
|
||||
pinMode(pinIgnBypass, OUTPUT);
|
||||
pinMode(pinFan, OUTPUT);
|
||||
pinMode(pinStepperDir, OUTPUT);
|
||||
pinMode(pinStepperStep, OUTPUT);
|
||||
pinMode(pinStepperEnable, OUTPUT);
|
||||
pinMode(pinBoost, OUTPUT);
|
||||
pinMode(pinVVT_1, OUTPUT);
|
||||
|
||||
inj1_pin_port = portOutputRegister(digitalPinToPort(pinInjector1));
|
||||
inj1_pin_mask = digitalPinToBitMask(pinInjector1);
|
||||
inj2_pin_port = portOutputRegister(digitalPinToPort(pinInjector2));
|
||||
inj2_pin_mask = digitalPinToBitMask(pinInjector2);
|
||||
inj3_pin_port = portOutputRegister(digitalPinToPort(pinInjector3));
|
||||
inj3_pin_mask = digitalPinToBitMask(pinInjector3);
|
||||
inj4_pin_port = portOutputRegister(digitalPinToPort(pinInjector4));
|
||||
inj4_pin_mask = digitalPinToBitMask(pinInjector4);
|
||||
inj5_pin_port = portOutputRegister(digitalPinToPort(pinInjector5));
|
||||
inj5_pin_mask = digitalPinToBitMask(pinInjector5);
|
||||
inj6_pin_port = portOutputRegister(digitalPinToPort(pinInjector6));
|
||||
inj6_pin_mask = digitalPinToBitMask(pinInjector6);
|
||||
inj7_pin_port = portOutputRegister(digitalPinToPort(pinInjector7));
|
||||
inj7_pin_mask = digitalPinToBitMask(pinInjector7);
|
||||
inj8_pin_port = portOutputRegister(digitalPinToPort(pinInjector8));
|
||||
inj8_pin_mask = digitalPinToBitMask(pinInjector8);
|
||||
|
||||
ign1_pin_port = portOutputRegister(digitalPinToPort(pinCoil1));
|
||||
ign1_pin_mask = digitalPinToBitMask(pinCoil1);
|
||||
ign2_pin_port = portOutputRegister(digitalPinToPort(pinCoil2));
|
||||
ign2_pin_mask = digitalPinToBitMask(pinCoil2);
|
||||
ign3_pin_port = portOutputRegister(digitalPinToPort(pinCoil3));
|
||||
ign3_pin_mask = digitalPinToBitMask(pinCoil3);
|
||||
ign4_pin_port = portOutputRegister(digitalPinToPort(pinCoil4));
|
||||
ign4_pin_mask = digitalPinToBitMask(pinCoil4);
|
||||
ign5_pin_port = portOutputRegister(digitalPinToPort(pinCoil5));
|
||||
ign5_pin_mask = digitalPinToBitMask(pinCoil5);
|
||||
ign6_pin_port = portOutputRegister(digitalPinToPort(pinCoil6));
|
||||
ign6_pin_mask = digitalPinToBitMask(pinCoil6);
|
||||
ign7_pin_port = portOutputRegister(digitalPinToPort(pinCoil7));
|
||||
ign7_pin_mask = digitalPinToBitMask(pinCoil7);
|
||||
ign8_pin_port = portOutputRegister(digitalPinToPort(pinCoil8));
|
||||
ign8_pin_mask = digitalPinToBitMask(pinCoil8);
|
||||
|
||||
tach_pin_port = portOutputRegister(digitalPinToPort(pinTachOut));
|
||||
tach_pin_mask = digitalPinToBitMask(pinTachOut);
|
||||
pump_pin_port = portOutputRegister(digitalPinToPort(pinFuelPump));
|
||||
pump_pin_mask = digitalPinToBitMask(pinFuelPump);
|
||||
|
||||
pinMode(pinTrigger, INPUT);
|
||||
pinMode(pinTrigger2, INPUT);
|
||||
pinMode(pinTrigger3, INPUT);
|
||||
|
||||
//Each of the below are only set when their relevant function is enabled. This can help prevent pin conflicts that users aren't aware of with unused functions
|
||||
if(configPage2.flexEnabled > 0)
|
||||
{
|
||||
pinMode(pinFlex, INPUT); //Standard GM / Continental flex sensor requires pullup, but this should be onboard. The internal pullup will not work (Requires ~3.3k)!
|
||||
}
|
||||
if(configPage6.launchEnabled > 0)
|
||||
{
|
||||
if (configPage6.lnchPullRes == true) { pinMode(pinLaunch, INPUT_PULLUP); }
|
||||
else { pinMode(pinLaunch, INPUT); } //If Launch Pull Resistor is not set make input float.
|
||||
}
|
||||
if(configPage2.idleUpEnabled > 0)
|
||||
{
|
||||
if (configPage2.idleUpPolarity == 0) { pinMode(pinIdleUp, INPUT_PULLUP); } //Normal setting
|
||||
else { pinMode(pinIdleUp, INPUT); } //inverted setting
|
||||
}
|
||||
|
||||
|
||||
//These must come after the above pinMode statements
|
||||
triggerPri_pin_port = portInputRegister(digitalPinToPort(pinTrigger));
|
||||
triggerPri_pin_mask = digitalPinToBitMask(pinTrigger);
|
||||
triggerSec_pin_port = portInputRegister(digitalPinToPort(pinTrigger2));
|
||||
triggerSec_pin_mask = digitalPinToBitMask(pinTrigger2);
|
||||
|
||||
//Set default values
|
||||
digitalWrite(pinMAP, HIGH);
|
||||
//digitalWrite(pinO2, LOW);
|
||||
digitalWrite(pinTPS, LOW);
|
||||
|
||||
}
|
||||
#endif
|
||||
#endif //CORE_AVR
|
||||
|
|
|
@ -1,901 +0,0 @@
|
|||
#if defined(ARDUINO_BLACK_F407VE)
|
||||
#include "board_stm32F407VE.h"
|
||||
#include "globals.h"
|
||||
#include "auxiliaries.h"
|
||||
#include "idle.h"
|
||||
#include "scheduler.h"
|
||||
#if defined(STM32F4)
|
||||
#define NR_OFF_TIMERS 9
|
||||
//stimer_t HardwareTimers[NR_OFF_TIMERS + 1];
|
||||
stimer_t HardwareTimers_1;
|
||||
stimer_t HardwareTimers_2;
|
||||
stimer_t HardwareTimers_3;
|
||||
stimer_t HardwareTimers_4;
|
||||
stimer_t HardwareTimers_5;
|
||||
stimer_t HardwareTimers_8;
|
||||
#define LED_BUILTIN PA7
|
||||
//These should really be in the stm32GENERIC libs, but for somereason they only have timers 1-4
|
||||
// #include <stm32_TIM_variant_11.h>
|
||||
// #include "src/HardwareTimers/HardwareTimer.h"
|
||||
// HardwareTimer Timer5(TIM5, chip_tim5, sizeof(chip_tim5) / sizeof(chip_tim5[0]));
|
||||
// HardwareTimer Timer8(TIM8, chip_tim8, sizeof(chip_tim8) / sizeof(chip_tim8[0]));
|
||||
#else
|
||||
#include "HardwareTimer.h"
|
||||
#endif
|
||||
extern void oneMSIntervalIRQ(stimer_t *Timer){oneMSInterval();}
|
||||
|
||||
extern void EmptyIRQCallback(stimer_t *Timer, uint32_t channel){}
|
||||
|
||||
|
||||
|
||||
|
||||
void initBoard()
|
||||
{
|
||||
/*
|
||||
* Initialize timers
|
||||
*/
|
||||
|
||||
HardwareTimers_1.timer = TIM1;
|
||||
HardwareTimers_2.timer = TIM2;
|
||||
HardwareTimers_3.timer = TIM3;
|
||||
HardwareTimers_4.timer = TIM4;
|
||||
|
||||
HardwareTimers_5.timer = TIM5;
|
||||
HardwareTimers_8.timer = TIM8;
|
||||
|
||||
|
||||
/*
|
||||
***********************************************************************************************************
|
||||
* General
|
||||
*/
|
||||
#define FLASH_LENGTH 8192
|
||||
|
||||
/*
|
||||
***********************************************************************************************************
|
||||
* Idle
|
||||
*/
|
||||
if( (configPage6.iacAlgorithm == IAC_ALGORITHM_PWM_OL) || (configPage6.iacAlgorithm == IAC_ALGORITHM_PWM_CL) )
|
||||
{
|
||||
idle_pwm_max_count = 1000000L / (configPage6.idleFreq * 2); //Converts the frequency in Hz to the number of ticks (at 2uS) it takes to complete 1 cycle. Note that the frequency is divided by 2 coming from TS to allow for up to 5KHz
|
||||
}
|
||||
|
||||
//This must happen at the end of the idle init
|
||||
TimerPulseInit(&HardwareTimers_1, 0xFFFF, 0, EmptyIRQCallback);
|
||||
//setTimerPrescalerRegister(&HardwareTimers_1, (uint32_t)(getTimerClkFreq(HardwareTimers_1.timer) / (500000)) - 1);
|
||||
if(idle_pwm_max_count > 0) { attachIntHandleOC(&HardwareTimers_1, idleInterrupt, 4, 0);} //on first flash the configPage4.iacAlgorithm is invalid
|
||||
//Timer1.setMode(4, TIMER_OUTPUT_COMPARE);
|
||||
//timer_set_mode(TIMER1, 4, TIMER_OUTPUT_COMPARE;
|
||||
//if(idle_pwm_max_count > 0) { Timer1.attachInterrupt(4, idleInterrupt);} //on first flash the configPage4.iacAlgorithm is invalid
|
||||
//Timer1.resume();
|
||||
|
||||
|
||||
/*
|
||||
***********************************************************************************************************
|
||||
* Timers
|
||||
*/
|
||||
#if defined(ARDUINO_BLACK_F407VE) || defined(STM32F4) || defined(_STM32F4_)
|
||||
TimerHandleInit(&HardwareTimers_8, 1000, 168);
|
||||
attachIntHandle(&HardwareTimers_8, oneMSIntervalIRQ);
|
||||
#else
|
||||
Timer4.setPeriod(1000); // Set up period
|
||||
Timer4.setMode(1, TIMER_OUTPUT_COMPARE);
|
||||
Timer4.attachInterrupt(1, oneMSInterval);
|
||||
Timer4.resume(); //Start Timer
|
||||
#endif
|
||||
pinMode(LED_BUILTIN, OUTPUT); //Visual WDT
|
||||
|
||||
/*
|
||||
***********************************************************************************************************
|
||||
* Auxilliaries
|
||||
*/
|
||||
//2uS resolution Min 8Hz, Max 5KHz
|
||||
boost_pwm_max_count = 1000000L / (2 * configPage6.boostFreq * 2); //Converts the frequency in Hz to the number of ticks (at 2uS) it takes to complete 1 cycle. The x2 is there because the frequency is stored at half value (in a byte) to allow freqneucies up to 511Hz
|
||||
vvt_pwm_max_count = 1000000L / (2 * configPage6.vvtFreq * 2); //Converts the frequency in Hz to the number of ticks (at 2uS) it takes to complete 1 cycle
|
||||
|
||||
//Need to be initialised last due to instant interrupt
|
||||
// Timer1.setMode(2, TIMER_OUTPUT_COMPARE);
|
||||
// Timer1.setMode(3, TIMER_OUTPUT_COMPARE);
|
||||
// if(boost_pwm_max_count > 0) { Timer1.attachInterrupt(2, boostInterrupt);}
|
||||
// if(vvt_pwm_max_count > 0) { Timer1.attachInterrupt(3, vvtInterrupt);}
|
||||
if(idle_pwm_max_count > 0) { attachIntHandleOC(&HardwareTimers_1, boostInterrupt, 2, 0);}
|
||||
if(vvt_pwm_max_count > 0) { attachIntHandleOC(&HardwareTimers_1, vvtInterrupt, 3, 0);}
|
||||
// Timer1.resume();
|
||||
|
||||
TimerPulseInit(&HardwareTimers_3, 0xFFFF, 0, EmptyIRQCallback);
|
||||
attachIntHandleOC(&HardwareTimers_3, fuelSchedule1Interrupt, 1, 0);
|
||||
attachIntHandleOC(&HardwareTimers_3, fuelSchedule2Interrupt, 2, 0);
|
||||
attachIntHandleOC(&HardwareTimers_3, fuelSchedule3Interrupt, 3, 0);
|
||||
attachIntHandleOC(&HardwareTimers_3, fuelSchedule4Interrupt, 4, 0);
|
||||
|
||||
|
||||
TimerPulseInit(&HardwareTimers_2, 0xFFFF, 0, EmptyIRQCallback);
|
||||
attachIntHandleOC(&HardwareTimers_2, ignitionSchedule1Interrupt, 1, 0);
|
||||
attachIntHandleOC(&HardwareTimers_2, ignitionSchedule2Interrupt, 2, 0);
|
||||
attachIntHandleOC(&HardwareTimers_2, ignitionSchedule3Interrupt, 3, 0);
|
||||
attachIntHandleOC(&HardwareTimers_2, ignitionSchedule4Interrupt, 4, 0);
|
||||
|
||||
//Attach interupt functions
|
||||
//Injection
|
||||
|
||||
TimerPulseInit(&HardwareTimers_5, 0xFFFF, 0, EmptyIRQCallback);
|
||||
//setTimerPrescalerRegister(&HardwareTimers_5, (uint32_t)(getTimerClkFreq(HardwareTimers_5.timer) / (1000000)) - 1);
|
||||
#if (INJ_CHANNELS >= 5)
|
||||
attachIntHandleOC(&HardwareTimers_5, fuelSchedule5Interrupt, 1, 0);
|
||||
//Timer5.attachInterrupt(1, fuelSchedule5Interrupt);
|
||||
#endif
|
||||
#if (INJ_CHANNELS >= 6)
|
||||
attachIntHandleOC(&HardwareTimers_5, fuelSchedule6Interrupt, 2, 0);
|
||||
//Timer5.attachInterrupt(2, fuelSchedule6Interrupt);
|
||||
#endif
|
||||
#if (INJ_CHANNELS >= 7)
|
||||
attachIntHandleOC(&HardwareTimers_5, fuelSchedule7Interrupt, 3, 0);
|
||||
//Timer5.attachInterrupt(3, fuelSchedule7Interrupt);
|
||||
#endif
|
||||
#if (INJ_CHANNELS >= 8)
|
||||
attachIntHandleOC(&HardwareTimers_5, fuelSchedule8Interrupt, 4, 0);
|
||||
//Timer5.attachInterrupt(4, fuelSchedule8Interrupt);
|
||||
#endif
|
||||
|
||||
TimerPulseInit(&HardwareTimers_4, 0xFFFF, 0, EmptyIRQCallback);
|
||||
//setTimerPrescalerRegister(&HardwareTimers_4, (uint32_t)(getTimerClkFreq(HardwareTimers_4.timer) / (1000000)) - 1);
|
||||
#if (IGN_CHANNELS >= 5)
|
||||
attachIntHandleOC(&HardwareTimers_4, ignitionSchedule5Interrupt, 1, 0);
|
||||
//Timer4.attachInterrupt(1, ignitionSchedule5Interrupt);
|
||||
#endif
|
||||
#if (IGN_CHANNELS >= 6)
|
||||
attachIntHandleOC(&HardwareTimers_4, ignitionSchedule6Interrupt, 2, 0);
|
||||
//Timer4.attachInterrupt(2, ignitionSchedule6Interrupt);
|
||||
#endif
|
||||
#if (IGN_CHANNELS >= 7)
|
||||
attachIntHandleOC(&HardwareTimers_4, ignitionSchedule7Interrupt, 3, 0);
|
||||
//Timer4.attachInterrupt(3, ignitionSchedule7Interrupt);
|
||||
#endif
|
||||
#if (IGN_CHANNELS >= 8)
|
||||
attachIntHandleOC(&HardwareTimers_4, ignitionSchedule8Interrupt, 4, 0);
|
||||
//Timer4.attachInterrupt(4, ignitionSchedule8Interrupt);
|
||||
#endif
|
||||
|
||||
setTimerPrescalerRegister(&HardwareTimers_2, (uint32_t)(getTimerClkFreq(HardwareTimers_2.timer) / (250000)) - 1);
|
||||
setTimerPrescalerRegister(&HardwareTimers_3, (uint32_t)(getTimerClkFreq(HardwareTimers_3.timer) / (250000)) - 1);
|
||||
setTimerPrescalerRegister(&HardwareTimers_4, (uint32_t)(getTimerClkFreq(HardwareTimers_4.timer) / (250000)) - 1);
|
||||
setTimerPrescalerRegister(&HardwareTimers_5, (uint32_t)(getTimerClkFreq(HardwareTimers_5.timer) / (250000)) - 1);
|
||||
}
|
||||
|
||||
uint16_t freeRam()
|
||||
{
|
||||
char top = 't';
|
||||
return &top - reinterpret_cast<char*>(sbrk(0));
|
||||
}
|
||||
|
||||
//pinmapping the STM32F407 for different boards, at this moment no board is desgined.
|
||||
//All boards are set to the default just to be sure.
|
||||
void setPinMapping(byte boardID)
|
||||
{
|
||||
switch (boardID)
|
||||
{
|
||||
case 0:
|
||||
//Pin mappings as per the v0.4 shield
|
||||
|
||||
//Black F407VE http://wiki.stm32duino.com/index.php?title=STM32F407
|
||||
//PC8~PC12 SDio
|
||||
|
||||
//PA9..PA10 Serial1
|
||||
//PA11..PA12 USB
|
||||
//PA13..PA15 & PB4 SWD(debug) pins
|
||||
//PB0 EEPROM CS pin
|
||||
//PB1 LCD
|
||||
//PB2 BOOT1
|
||||
//PB3..PB5 SPI interface
|
||||
//PB6..PB8 NRF interface
|
||||
|
||||
//PD5 & PD6 Serial2
|
||||
pinInjector1 = PA1; //Output pin injector 1 is on
|
||||
pinInjector2 = PA2; //Output pin injector 2 is on
|
||||
pinInjector3 = PA3; //Output pin injector 3 is on
|
||||
pinInjector4 = PA4; //Output pin injector 4 is on
|
||||
pinInjector5 = PA5; //Output pin injector 5 is on
|
||||
pinInjector6 = PD4; //Output pin injector 6 is on
|
||||
pinCoil1 = PD7; //Pin for coil 1
|
||||
pinCoil2 = PB9; //Pin for coil 2
|
||||
pinCoil3 = PA8; //Pin for coil 3
|
||||
pinCoil4 = PB10; //Pin for coil 4
|
||||
pinCoil5 = PB11; //Pin for coil 5
|
||||
pinMAP = PC0; //MAP sensor pin
|
||||
pinTPS = PC1;//TPS input pin
|
||||
pinIAT = PC2; //IAT sensor pin
|
||||
pinCLT = PC3; //CLS sensor pin
|
||||
pinO2 = PC5; //O2 Sensor pin
|
||||
pinBat = PB1; //Battery reference voltage pin
|
||||
pinBaro = PC4;
|
||||
pinIdle1 = PB12; //Single wire idle control
|
||||
pinIdle2 = PB11; //2 wire idle control
|
||||
pinBoost = PC7; //Boost control
|
||||
pinVVT_1 = PD3; //Default VVT output
|
||||
pinStepperDir = PE0; //Direction pin for DRV8825 driver
|
||||
pinStepperStep = PE1; //Step pin for DRV8825 driver
|
||||
pinStepperEnable = PE2; //Enable pin for DRV8825
|
||||
pinDisplayReset = PE5; // OLED reset pin
|
||||
pinFan = PE6; //Pin for the fan output
|
||||
|
||||
pinFuelPump = PA6; //Fuel pump output
|
||||
pinTachOut = PD15; //Tacho output pin
|
||||
// pinLaunch = 51; //Can be overwritten below
|
||||
// pinResetControl = 43; //Reset control output
|
||||
|
||||
//external interrupt enabled pins
|
||||
//external interrupts could be enalbed in any pin, except same port numbers (PA4,PE4)
|
||||
pinFlex = PD4; // Flex sensor (Must be external interrupt enabled)
|
||||
pinTrigger = PD13; //The CAS pin
|
||||
pinTrigger2 = PD14; //The Cam Sensor pin
|
||||
break;
|
||||
case 1:
|
||||
//Pin mappings as per the v0.4 shield
|
||||
|
||||
//Black F407VE http://wiki.stm32duino.com/index.php?title=STM32F407
|
||||
//PC8~PC12 SDio
|
||||
|
||||
//PA9..PA10 Serial1
|
||||
//PA11..PA12 USB
|
||||
//PA13..PA15 & PB4 SWD(debug) pins
|
||||
//PB0 EEPROM CS pin
|
||||
//PB1 LCD
|
||||
//PB2 BOOT1
|
||||
//PB3..PB5 SPI interface
|
||||
//PB6..PB8 NRF interface
|
||||
|
||||
//PD5 & PD6 Serial2
|
||||
pinInjector1 = PA1; //Output pin injector 1 is on
|
||||
pinInjector2 = PA2; //Output pin injector 2 is on
|
||||
pinInjector3 = PA3; //Output pin injector 3 is on
|
||||
pinInjector4 = PA4; //Output pin injector 4 is on
|
||||
pinInjector5 = PA5; //Output pin injector 5 is on
|
||||
pinInjector6 = PD4; //Output pin injector 6 is on
|
||||
pinCoil1 = PD7; //Pin for coil 1
|
||||
pinCoil2 = PB9; //Pin for coil 2
|
||||
pinCoil3 = PA8; //Pin for coil 3
|
||||
pinCoil4 = PB10; //Pin for coil 4
|
||||
pinCoil5 = PB11; //Pin for coil 5
|
||||
pinMAP = PC0; //MAP sensor pin
|
||||
pinTPS = PC1;//TPS input pin
|
||||
pinIAT = PC2; //IAT sensor pin
|
||||
pinCLT = PC3; //CLS sensor pin
|
||||
pinO2 = PC5; //O2 Sensor pin
|
||||
pinBat = PB1; //Battery reference voltage pin
|
||||
pinBaro = PC4;
|
||||
pinIdle1 = PB12; //Single wire idle control
|
||||
pinIdle2 = PB11; //2 wire idle control
|
||||
pinBoost = PC7; //Boost control
|
||||
pinVVT_1 = PD3; //Default VVT output
|
||||
pinStepperDir = PE0; //Direction pin for DRV8825 driver
|
||||
pinStepperStep = PE1; //Step pin for DRV8825 driver
|
||||
pinStepperEnable = PE2; //Enable pin for DRV8825
|
||||
pinDisplayReset = PE5; // OLED reset pin
|
||||
pinFan = PE6; //Pin for the fan output
|
||||
|
||||
pinFuelPump = PA6; //Fuel pump output
|
||||
pinTachOut = PD15; //Tacho output pin
|
||||
// pinLaunch = 51; //Can be overwritten below
|
||||
// pinResetControl = 43; //Reset control output
|
||||
|
||||
//external interrupt enabled pins
|
||||
//external interrupts could be enalbed in any pin, except same port numbers (PA4,PE4)
|
||||
pinFlex = PD4; // Flex sensor (Must be external interrupt enabled)
|
||||
pinTrigger = PD13; //The CAS pin
|
||||
pinTrigger2 = PD14; //The Cam Sensor pin
|
||||
break;
|
||||
|
||||
case 2:
|
||||
//Pin mappings as per the v0.4 shield
|
||||
|
||||
//Black F407VE http://wiki.stm32duino.com/index.php?title=STM32F407
|
||||
//PC8~PC12 SDio
|
||||
|
||||
//PA9..PA10 Serial1
|
||||
//PA11..PA12 USB
|
||||
//PA13..PA15 & PB4 SWD(debug) pins
|
||||
//PB0 EEPROM CS pin
|
||||
//PB1 LCD
|
||||
//PB2 BOOT1
|
||||
//PB3..PB5 SPI interface
|
||||
//PB6..PB8 NRF interface
|
||||
|
||||
//PD5 & PD6 Serial2
|
||||
pinInjector1 = PA1; //Output pin injector 1 is on
|
||||
pinInjector2 = PA2; //Output pin injector 2 is on
|
||||
pinInjector3 = PA3; //Output pin injector 3 is on
|
||||
pinInjector4 = PA4; //Output pin injector 4 is on
|
||||
pinInjector5 = PA5; //Output pin injector 5 is on
|
||||
pinInjector6 = PD4; //Output pin injector 6 is on
|
||||
pinCoil1 = PD7; //Pin for coil 1
|
||||
pinCoil2 = PB9; //Pin for coil 2
|
||||
pinCoil3 = PA8; //Pin for coil 3
|
||||
pinCoil4 = PB10; //Pin for coil 4
|
||||
pinCoil5 = PB11; //Pin for coil 5
|
||||
pinMAP = PC0; //MAP sensor pin
|
||||
pinTPS = PC1;//TPS input pin
|
||||
pinIAT = PC2; //IAT sensor pin
|
||||
pinCLT = PC3; //CLS sensor pin
|
||||
pinO2 = PC5; //O2 Sensor pin
|
||||
pinBat = PB1; //Battery reference voltage pin
|
||||
pinBaro = PC4;
|
||||
pinIdle1 = PB12; //Single wire idle control
|
||||
pinIdle2 = PB11; //2 wire idle control
|
||||
pinBoost = PC7; //Boost control
|
||||
pinVVT_1 = PD3; //Default VVT output
|
||||
pinStepperDir = PE0; //Direction pin for DRV8825 driver
|
||||
pinStepperStep = PE1; //Step pin for DRV8825 driver
|
||||
pinStepperEnable = PE2; //Enable pin for DRV8825
|
||||
pinDisplayReset = PE5; // OLED reset pin
|
||||
pinFan = PE6; //Pin for the fan output
|
||||
|
||||
pinFuelPump = PA6; //Fuel pump output
|
||||
pinTachOut = PD15; //Tacho output pin
|
||||
// pinLaunch = 51; //Can be overwritten below
|
||||
// pinResetControl = 43; //Reset control output
|
||||
|
||||
//external interrupt enabled pins
|
||||
//external interrupts could be enalbed in any pin, except same port numbers (PA4,PE4)
|
||||
pinFlex = PD4; // Flex sensor (Must be external interrupt enabled)
|
||||
pinTrigger = PD13; //The CAS pin
|
||||
pinTrigger2 = PD14; //The Cam Sensor pin
|
||||
break;
|
||||
|
||||
case 3:
|
||||
//Pin mappings as per the v0.4 shield
|
||||
|
||||
//Black F407VE http://wiki.stm32duino.com/index.php?title=STM32F407
|
||||
//PC8~PC12 SDio
|
||||
|
||||
//PA9..PA10 Serial1
|
||||
//PA11..PA12 USB
|
||||
//PA13..PA15 & PB4 SWD(debug) pins
|
||||
//PB0 EEPROM CS pin
|
||||
//PB1 LCD
|
||||
//PB2 BOOT1
|
||||
//PB3..PB5 SPI interface
|
||||
//PB6..PB8 NRF interface
|
||||
|
||||
//PD5 & PD6 Serial2
|
||||
pinInjector1 = PA1; //Output pin injector 1 is on
|
||||
pinInjector2 = PA2; //Output pin injector 2 is on
|
||||
pinInjector3 = PA3; //Output pin injector 3 is on
|
||||
pinInjector4 = PA4; //Output pin injector 4 is on
|
||||
pinInjector5 = PA5; //Output pin injector 5 is on
|
||||
pinInjector6 = PD4; //Output pin injector 6 is on
|
||||
pinCoil1 = PD7; //Pin for coil 1
|
||||
pinCoil2 = PB9; //Pin for coil 2
|
||||
pinCoil3 = PA8; //Pin for coil 3
|
||||
pinCoil4 = PB10; //Pin for coil 4
|
||||
pinCoil5 = PB11; //Pin for coil 5
|
||||
pinMAP = PC0; //MAP sensor pin
|
||||
pinTPS = PC1;//TPS input pin
|
||||
pinIAT = PC2; //IAT sensor pin
|
||||
pinCLT = PC3; //CLS sensor pin
|
||||
pinO2 = PC5; //O2 Sensor pin
|
||||
pinBat = PB1; //Battery reference voltage pin
|
||||
pinBaro = PC4;
|
||||
pinIdle1 = PB12; //Single wire idle control
|
||||
pinIdle2 = PB11; //2 wire idle control
|
||||
pinBoost = PC7; //Boost control
|
||||
pinVVT_1 = PD3; //Default VVT output
|
||||
pinStepperDir = PE0; //Direction pin for DRV8825 driver
|
||||
pinStepperStep = PE1; //Step pin for DRV8825 driver
|
||||
pinStepperEnable = PE2; //Enable pin for DRV8825
|
||||
pinDisplayReset = PE5; // OLED reset pin
|
||||
pinFan = PE6; //Pin for the fan output
|
||||
|
||||
pinFuelPump = PA6; //Fuel pump output
|
||||
pinTachOut = PD15; //Tacho output pin
|
||||
// pinLaunch = 51; //Can be overwritten below
|
||||
// pinResetControl = 43; //Reset control output
|
||||
|
||||
//external interrupt enabled pins
|
||||
//external interrupts could be enalbed in any pin, except same port numbers (PA4,PE4)
|
||||
pinFlex = PD4; // Flex sensor (Must be external interrupt enabled)
|
||||
pinTrigger = PD13; //The CAS pin
|
||||
pinTrigger2 = PD14; //The Cam Sensor pin
|
||||
break;
|
||||
|
||||
case 9:
|
||||
//Pin mappings as per the MX5 PNP shield
|
||||
pinInjector1 = 11; //Output pin injector 1 is on
|
||||
pinInjector2 = 10; //Output pin injector 2 is on
|
||||
pinInjector3 = 9; //Output pin injector 3 is on
|
||||
pinInjector4 = 8; //Output pin injector 4 is on
|
||||
pinInjector5 = 14; //Output pin injector 5 is on
|
||||
pinCoil1 = 39; //Pin for coil 1
|
||||
pinCoil2 = 41; //Pin for coil 2
|
||||
pinCoil3 = 32; //Pin for coil 3
|
||||
pinCoil4 = 33; //Pin for coil 4
|
||||
pinCoil5 = 34; //Pin for coil 5 PLACEHOLDER value for now
|
||||
pinTrigger = 19; //The CAS pin
|
||||
pinTrigger2 = 18; //The Cam Sensor pin
|
||||
pinTPS = A2;//TPS input pin
|
||||
pinMAP = A5; //MAP sensor pin
|
||||
pinIAT = A0; //IAT sensor pin
|
||||
pinCLT = A1; //CLS sensor pin
|
||||
pinO2 = A3; //O2 Sensor pin
|
||||
pinBat = A4; //Battery reference voltage pin
|
||||
pinDisplayReset = 48; // OLED reset pin
|
||||
pinTachOut = 49; //Tacho output pin (Goes to ULN2803)
|
||||
pinIdle1 = 2; //Single wire idle control
|
||||
pinBoost = 4;
|
||||
pinIdle2 = 4; //2 wire idle control (Note this is shared with boost!!!)
|
||||
pinFuelPump = 37; //Fuel pump output
|
||||
pinStepperDir = 16; //Direction pin for DRV8825 driver
|
||||
pinStepperStep = 17; //Step pin for DRV8825 driver
|
||||
pinFan = 35; //Pin for the fan output
|
||||
pinLaunch = 12; //Can be overwritten below
|
||||
pinFlex = 3; // Flex sensor (Must be external interrupt enabled)
|
||||
pinResetControl = 44; //Reset control output
|
||||
|
||||
break;
|
||||
|
||||
case 10:
|
||||
//Pin mappings as per the v0.4 shield
|
||||
|
||||
//Black F407VE http://wiki.stm32duino.com/index.php?title=STM32F407
|
||||
//PC8~PC12 SDio
|
||||
|
||||
//PA9..PA10 Serial1
|
||||
//PA11..PA12 USB
|
||||
//PA13..PA15 & PB4 SWD(debug) pins
|
||||
//PB0 EEPROM CS pin
|
||||
//PB1 LCD
|
||||
//PB2 BOOT1
|
||||
//PB3..PB5 SPI interface
|
||||
//PB6..PB8 NRF interface
|
||||
|
||||
//PD5 & PD6 Serial2
|
||||
pinInjector1 = PA1; //Output pin injector 1 is on
|
||||
pinInjector2 = PA2; //Output pin injector 2 is on
|
||||
pinInjector3 = PA3; //Output pin injector 3 is on
|
||||
pinInjector4 = PA4; //Output pin injector 4 is on
|
||||
pinInjector5 = PA5; //Output pin injector 5 is on
|
||||
pinInjector6 = PD4; //Output pin injector 6 is on
|
||||
pinCoil1 = PD7; //Pin for coil 1
|
||||
pinCoil2 = PB9; //Pin for coil 2
|
||||
pinCoil3 = PA8; //Pin for coil 3
|
||||
pinCoil4 = PB10; //Pin for coil 4
|
||||
pinCoil5 = PB11; //Pin for coil 5
|
||||
pinMAP = PC0; //MAP sensor pin
|
||||
pinTPS = PC1;//TPS input pin
|
||||
pinIAT = PC2; //IAT sensor pin
|
||||
pinCLT = PC3; //CLS sensor pin
|
||||
pinO2 = PC5; //O2 Sensor pin
|
||||
pinBat = PB1; //Battery reference voltage pin
|
||||
pinBaro = PC4;
|
||||
pinIdle1 = PB12; //Single wire idle control
|
||||
pinIdle2 = PB11; //2 wire idle control
|
||||
pinBoost = PC7; //Boost control
|
||||
pinVVT_1 = PD3; //Default VVT output
|
||||
pinStepperDir = PE0; //Direction pin for DRV8825 driver
|
||||
pinStepperStep = PE1; //Step pin for DRV8825 driver
|
||||
pinStepperEnable = PE2; //Enable pin for DRV8825
|
||||
pinDisplayReset = PE5; // OLED reset pin
|
||||
pinFan = PE6; //Pin for the fan output
|
||||
|
||||
pinFuelPump = PA6; //Fuel pump output
|
||||
pinTachOut = PD15; //Tacho output pin
|
||||
// pinLaunch = 51; //Can be overwritten below
|
||||
// pinResetControl = 43; //Reset control output
|
||||
|
||||
//external interrupt enabled pins
|
||||
//external interrupts could be enalbed in any pin, except same port numbers (PA4,PE4)
|
||||
pinFlex = PD4; // Flex sensor (Must be external interrupt enabled)
|
||||
pinTrigger = PD13; //The CAS pin
|
||||
pinTrigger2 = PD14; //The Cam Sensor pin
|
||||
break;
|
||||
|
||||
case 20:
|
||||
//Pin mappings as per the v0.4 shield
|
||||
|
||||
//Black F407VE http://wiki.stm32duino.com/index.php?title=STM32F407
|
||||
//PC8~PC12 SDio
|
||||
|
||||
//PA9..PA10 Serial1
|
||||
//PA11..PA12 USB
|
||||
//PA13..PA15 & PB4 SWD(debug) pins
|
||||
//PB0 EEPROM CS pin
|
||||
//PB1 LCD
|
||||
//PB2 BOOT1
|
||||
//PB3..PB5 SPI interface
|
||||
//PB6..PB8 NRF interface
|
||||
|
||||
//PD5 & PD6 Serial2
|
||||
pinInjector1 = PA1; //Output pin injector 1 is on
|
||||
pinInjector2 = PA2; //Output pin injector 2 is on
|
||||
pinInjector3 = PA3; //Output pin injector 3 is on
|
||||
pinInjector4 = PA4; //Output pin injector 4 is on
|
||||
pinInjector5 = PA5; //Output pin injector 5 is on
|
||||
pinInjector6 = PD4; //Output pin injector 6 is on
|
||||
pinCoil1 = PD7; //Pin for coil 1
|
||||
pinCoil2 = PB9; //Pin for coil 2
|
||||
pinCoil3 = PA8; //Pin for coil 3
|
||||
pinCoil4 = PB10; //Pin for coil 4
|
||||
pinCoil5 = PB11; //Pin for coil 5
|
||||
pinMAP = PC0; //MAP sensor pin
|
||||
pinTPS = PC1;//TPS input pin
|
||||
pinIAT = PC2; //IAT sensor pin
|
||||
pinCLT = PC3; //CLS sensor pin
|
||||
pinO2 = PC5; //O2 Sensor pin
|
||||
pinBat = PB1; //Battery reference voltage pin
|
||||
pinBaro = PC4;
|
||||
pinIdle1 = PB12; //Single wire idle control
|
||||
pinIdle2 = PB11; //2 wire idle control
|
||||
pinBoost = PC7; //Boost control
|
||||
pinVVT_1 = PD3; //Default VVT output
|
||||
pinStepperDir = PE0; //Direction pin for DRV8825 driver
|
||||
pinStepperStep = PE1; //Step pin for DRV8825 driver
|
||||
pinStepperEnable = PE2; //Enable pin for DRV8825
|
||||
pinDisplayReset = PE5; // OLED reset pin
|
||||
pinFan = PE6; //Pin for the fan output
|
||||
|
||||
pinFuelPump = PA6; //Fuel pump output
|
||||
pinTachOut = PD15; //Tacho output pin
|
||||
// pinLaunch = 51; //Can be overwritten below
|
||||
// pinResetControl = 43; //Reset control output
|
||||
|
||||
//external interrupt enabled pins
|
||||
//external interrupts could be enalbed in any pin, except same port numbers (PA4,PE4)
|
||||
pinFlex = PD4; // Flex sensor (Must be external interrupt enabled)
|
||||
pinTrigger = PD13; //The CAS pin
|
||||
pinTrigger2 = PD14; //The Cam Sensor pin
|
||||
break;
|
||||
|
||||
case 30:
|
||||
//Pin mappings as per the v0.4 shield
|
||||
|
||||
//Black F407VE http://wiki.stm32duino.com/index.php?title=STM32F407
|
||||
//PC8~PC12 SDio
|
||||
|
||||
//PA9..PA10 Serial1
|
||||
//PA11..PA12 USB
|
||||
//PA13..PA15 & PB4 SWD(debug) pins
|
||||
//PB0 EEPROM CS pin
|
||||
//PB1 LCD
|
||||
//PB2 BOOT1
|
||||
//PB3..PB5 SPI interface
|
||||
//PB6..PB8 NRF interface
|
||||
|
||||
//PD5 & PD6 Serial2
|
||||
pinInjector1 = PA1; //Output pin injector 1 is on
|
||||
pinInjector2 = PA2; //Output pin injector 2 is on
|
||||
pinInjector3 = PA3; //Output pin injector 3 is on
|
||||
pinInjector4 = PA4; //Output pin injector 4 is on
|
||||
pinInjector5 = PA5; //Output pin injector 5 is on
|
||||
pinInjector6 = PD4; //Output pin injector 6 is on
|
||||
pinCoil1 = PD7; //Pin for coil 1
|
||||
pinCoil2 = PB9; //Pin for coil 2
|
||||
pinCoil3 = PA8; //Pin for coil 3
|
||||
pinCoil4 = PB10; //Pin for coil 4
|
||||
pinCoil5 = PB11; //Pin for coil 5
|
||||
pinMAP = PC0; //MAP sensor pin
|
||||
pinTPS = PC1;//TPS input pin
|
||||
pinIAT = PC2; //IAT sensor pin
|
||||
pinCLT = PC3; //CLS sensor pin
|
||||
pinO2 = PC5; //O2 Sensor pin
|
||||
pinBat = PB1; //Battery reference voltage pin
|
||||
pinBaro = PC4;
|
||||
pinIdle1 = PB12; //Single wire idle control
|
||||
pinIdle2 = PB11; //2 wire idle control
|
||||
pinBoost = PC7; //Boost control
|
||||
pinVVT_1 = PD3; //Default VVT output
|
||||
pinStepperDir = PE0; //Direction pin for DRV8825 driver
|
||||
pinStepperStep = PE1; //Step pin for DRV8825 driver
|
||||
pinStepperEnable = PE2; //Enable pin for DRV8825
|
||||
pinDisplayReset = PE5; // OLED reset pin
|
||||
pinFan = PE6; //Pin for the fan output
|
||||
|
||||
pinFuelPump = PA6; //Fuel pump output
|
||||
pinTachOut = PD15; //Tacho output pin
|
||||
// pinLaunch = 51; //Can be overwritten below
|
||||
// pinResetControl = 43; //Reset control output
|
||||
|
||||
//external interrupt enabled pins
|
||||
//external interrupts could be enalbed in any pin, except same port numbers (PA4,PE4)
|
||||
pinFlex = PD4; // Flex sensor (Must be external interrupt enabled)
|
||||
pinTrigger = PD13; //The CAS pin
|
||||
pinTrigger2 = PD14; //The Cam Sensor pin
|
||||
break;
|
||||
|
||||
case 40:
|
||||
//Pin mappings as per the v0.4 shield
|
||||
|
||||
//Black F407VE http://wiki.stm32duino.com/index.php?title=STM32F407
|
||||
//PC8~PC12 SDio
|
||||
|
||||
//PA9..PA10 Serial1
|
||||
//PA11..PA12 USB
|
||||
//PA13..PA15 & PB4 SWD(debug) pins
|
||||
//PB0 EEPROM CS pin
|
||||
//PB1 LCD
|
||||
//PB2 BOOT1
|
||||
//PB3..PB5 SPI interface
|
||||
//PB6..PB8 NRF interface
|
||||
|
||||
//PD5 & PD6 Serial2
|
||||
pinInjector1 = PA1; //Output pin injector 1 is on
|
||||
pinInjector2 = PA2; //Output pin injector 2 is on
|
||||
pinInjector3 = PA3; //Output pin injector 3 is on
|
||||
pinInjector4 = PA4; //Output pin injector 4 is on
|
||||
pinInjector5 = PA5; //Output pin injector 5 is on
|
||||
pinInjector6 = PD4; //Output pin injector 6 is on
|
||||
pinCoil1 = PD7; //Pin for coil 1
|
||||
pinCoil2 = PB9; //Pin for coil 2
|
||||
pinCoil3 = PA8; //Pin for coil 3
|
||||
pinCoil4 = PB10; //Pin for coil 4
|
||||
pinCoil5 = PB11; //Pin for coil 5
|
||||
pinMAP = PC0; //MAP sensor pin
|
||||
pinTPS = PC1;//TPS input pin
|
||||
pinIAT = PC2; //IAT sensor pin
|
||||
pinCLT = PC3; //CLS sensor pin
|
||||
pinO2 = PC5; //O2 Sensor pin
|
||||
pinBat = PB1; //Battery reference voltage pin
|
||||
pinBaro = PC4;
|
||||
pinIdle1 = PB12; //Single wire idle control
|
||||
pinIdle2 = PB11; //2 wire idle control
|
||||
pinBoost = PC7; //Boost control
|
||||
pinVVT_1 = PD3; //Default VVT output
|
||||
pinStepperDir = PE0; //Direction pin for DRV8825 driver
|
||||
pinStepperStep = PE1; //Step pin for DRV8825 driver
|
||||
pinStepperEnable = PE2; //Enable pin for DRV8825
|
||||
pinDisplayReset = PE5; // OLED reset pin
|
||||
pinFan = PE6; //Pin for the fan output
|
||||
|
||||
pinFuelPump = PA6; //Fuel pump output
|
||||
pinTachOut = PD15; //Tacho output pin
|
||||
// pinLaunch = 51; //Can be overwritten below
|
||||
// pinResetControl = 43; //Reset control output
|
||||
|
||||
//external interrupt enabled pins
|
||||
//external interrupts could be enalbed in any pin, except same port numbers (PA4,PE4)
|
||||
pinFlex = PD4; // Flex sensor (Must be external interrupt enabled)
|
||||
pinTrigger = PD13; //The CAS pin
|
||||
pinTrigger2 = PD14; //The Cam Sensor pin
|
||||
|
||||
case 41:
|
||||
//Pin mappings as per the v0.4 shield
|
||||
|
||||
//Black F407VE http://wiki.stm32duino.com/index.php?title=STM32F407
|
||||
//PC8~PC12 SDio
|
||||
|
||||
//PA9..PA10 Serial1
|
||||
//PA11..PA12 USB
|
||||
//PA13..PA15 & PB4 SWD(debug) pins
|
||||
//PB0 EEPROM CS pin
|
||||
//PB1 LCD
|
||||
//PB2 BOOT1
|
||||
//PB3..PB5 SPI interface
|
||||
//PB6..PB8 NRF interface
|
||||
|
||||
//PD5 & PD6 Serial2
|
||||
pinInjector1 = PA1; //Output pin injector 1 is on
|
||||
pinInjector2 = PA2; //Output pin injector 2 is on
|
||||
pinInjector3 = PA3; //Output pin injector 3 is on
|
||||
pinInjector4 = PA4; //Output pin injector 4 is on
|
||||
pinInjector5 = PA5; //Output pin injector 5 is on
|
||||
pinInjector6 = PD4; //Output pin injector 6 is on
|
||||
pinCoil1 = PD7; //Pin for coil 1
|
||||
pinCoil2 = PB9; //Pin for coil 2
|
||||
pinCoil3 = PA8; //Pin for coil 3
|
||||
pinCoil4 = PB10; //Pin for coil 4
|
||||
pinCoil5 = PB11; //Pin for coil 5
|
||||
pinMAP = PC0; //MAP sensor pin
|
||||
pinTPS = PC1;//TPS input pin
|
||||
pinIAT = PC2; //IAT sensor pin
|
||||
pinCLT = PC3; //CLS sensor pin
|
||||
pinO2 = PC5; //O2 Sensor pin
|
||||
pinBat = PB1; //Battery reference voltage pin
|
||||
pinBaro = PC4;
|
||||
pinIdle1 = PB12; //Single wire idle control
|
||||
pinIdle2 = PB11; //2 wire idle control
|
||||
pinBoost = PC7; //Boost control
|
||||
pinVVT_1 = PD3; //Default VVT output
|
||||
pinStepperDir = PE0; //Direction pin for DRV8825 driver
|
||||
pinStepperStep = PE1; //Step pin for DRV8825 driver
|
||||
pinStepperEnable = PE2; //Enable pin for DRV8825
|
||||
pinDisplayReset = PE5; // OLED reset pin
|
||||
pinFan = PE6; //Pin for the fan output
|
||||
|
||||
pinFuelPump = PA6; //Fuel pump output
|
||||
pinTachOut = PD15; //Tacho output pin
|
||||
// pinLaunch = 51; //Can be overwritten below
|
||||
// pinResetControl = 43; //Reset control output
|
||||
|
||||
//external interrupt enabled pins
|
||||
//external interrupts could be enalbed in any pin, except same port numbers (PA4,PE4)
|
||||
pinFlex = PD4; // Flex sensor (Must be external interrupt enabled)
|
||||
pinTrigger = PD13; //The CAS pin
|
||||
pinTrigger2 = PD14; //The Cam Sensor pin
|
||||
break;
|
||||
|
||||
default:
|
||||
//Pin mappings as per the v0.4 shield
|
||||
|
||||
//Black F407VE http://wiki.stm32duino.com/index.php?title=STM32F407
|
||||
//PC8~PC12 SDio
|
||||
|
||||
//PA9..PA10 Serial1
|
||||
//PA11..PA12 USB
|
||||
//PA13..PA15 & PB4 SWD(debug) pins
|
||||
//PB0 EEPROM CS pin
|
||||
//PB1 LCD
|
||||
//PB2 BOOT1
|
||||
//PB3..PB5 SPI interface
|
||||
//PB6..PB8 NRF interface
|
||||
|
||||
//PD5 & PD6 Serial2
|
||||
pinInjector1 = PA1; //Output pin injector 1 is on
|
||||
pinInjector2 = PA2; //Output pin injector 2 is on
|
||||
pinInjector3 = PA3; //Output pin injector 3 is on
|
||||
pinInjector4 = PA4; //Output pin injector 4 is on
|
||||
pinInjector5 = PA5; //Output pin injector 5 is on
|
||||
pinInjector6 = PD4; //Output pin injector 6 is on
|
||||
pinCoil1 = PD7; //Pin for coil 1
|
||||
pinCoil2 = PB9; //Pin for coil 2
|
||||
pinCoil3 = PA8; //Pin for coil 3
|
||||
pinCoil4 = PB10; //Pin for coil 4
|
||||
pinCoil5 = PB11; //Pin for coil 5
|
||||
pinMAP = PC0; //MAP sensor pin
|
||||
pinTPS = PC1;//TPS input pin
|
||||
pinIAT = PC2; //IAT sensor pin
|
||||
pinCLT = PC3; //CLS sensor pin
|
||||
pinO2 = PC5; //O2 Sensor pin
|
||||
pinBat = PB1; //Battery reference voltage pin
|
||||
pinBaro = PC4;
|
||||
pinIdle1 = PB12; //Single wire idle control
|
||||
pinIdle2 = PB11; //2 wire idle control
|
||||
pinBoost = PC7; //Boost control
|
||||
pinVVT_1 = PD3; //Default VVT output
|
||||
pinStepperDir = PE0; //Direction pin for DRV8825 driver
|
||||
pinStepperStep = PE1; //Step pin for DRV8825 driver
|
||||
pinStepperEnable = PE2; //Enable pin for DRV8825
|
||||
pinDisplayReset = PE5; // OLED reset pin
|
||||
pinFan = PE6; //Pin for the fan output
|
||||
|
||||
pinFuelPump = PA6; //Fuel pump output
|
||||
pinTachOut = PD15; //Tacho output pin
|
||||
// pinLaunch = 51; //Can be overwritten below
|
||||
// pinResetControl = 43; //Reset control output
|
||||
|
||||
//external interrupt enabled pins
|
||||
//external interrupts could be enalbed in any pin, except same port numbers (PA4,PE4)
|
||||
pinFlex = PD4; // Flex sensor (Must be external interrupt enabled)
|
||||
pinTrigger = PD13; //The CAS pin
|
||||
pinTrigger2 = PD14; //The Cam Sensor pin
|
||||
break;
|
||||
}
|
||||
|
||||
//Setup any devices that are using selectable pins
|
||||
|
||||
if ( (configPage6.launchPin != 0) && (configPage6.launchPin < BOARD_NR_GPIO_PINS) ) { pinLaunch = pinTranslate(configPage6.launchPin); }
|
||||
if ( (configPage4.ignBypassPin != 0) && (configPage4.ignBypassPin < BOARD_NR_GPIO_PINS) ) { pinIgnBypass = pinTranslate(configPage4.ignBypassPin); }
|
||||
if ( (configPage2.tachoPin != 0) && (configPage2.tachoPin < BOARD_NR_GPIO_PINS) ) { pinTachOut = pinTranslate(configPage2.tachoPin); }
|
||||
if ( (configPage4.fuelPumpPin != 0) && (configPage4.fuelPumpPin < BOARD_NR_GPIO_PINS) ) { pinFuelPump = pinTranslate(configPage4.fuelPumpPin); }
|
||||
if ( (configPage6.fanPin != 0) && (configPage6.fanPin < BOARD_NR_GPIO_PINS) ) { pinFan = pinTranslate(configPage6.fanPin); }
|
||||
if ( (configPage6.boostPin != 0) && (configPage6.boostPin < BOARD_NR_GPIO_PINS) ) { pinBoost = pinTranslate(configPage6.boostPin); }
|
||||
if ( (configPage6.vvtPin != 0) && (configPage6.vvtPin < BOARD_NR_GPIO_PINS) ) { pinVVT_1 = pinTranslate(configPage6.vvtPin); }
|
||||
if ( (configPage6.useExtBaro != 0) && (configPage6.baroPin < BOARD_NR_GPIO_PINS) ) { pinBaro = configPage6.baroPin + A0; }
|
||||
if ( (configPage6.useEMAP != 0) && (configPage10.EMAPPin < BOARD_NR_GPIO_PINS) ) { pinEMAP = configPage10.EMAPPin + A0; }
|
||||
|
||||
//Currently there's no default pin for Idle Up
|
||||
pinIdleUp = pinTranslate(configPage2.idleUpPin);
|
||||
|
||||
/* Reset control is a special case. If reset control is enabled, it needs its initial state set BEFORE its pinMode.
|
||||
If that doesn't happen and reset control is in "Serial Command" mode, the Arduino will end up in a reset loop
|
||||
because the control pin will go low as soon as the pinMode is set to OUTPUT. */
|
||||
if ( (configPage4.resetControl != 0) && (configPage4.resetControlPin < BOARD_NR_GPIO_PINS) )
|
||||
{
|
||||
resetControl = configPage4.resetControl;
|
||||
pinResetControl = pinTranslate(configPage4.resetControlPin);
|
||||
setResetControlPinState();
|
||||
pinMode(pinResetControl, OUTPUT);
|
||||
}
|
||||
|
||||
//Finally, set the relevant pin modes for outputs
|
||||
pinMode(pinCoil1, OUTPUT);
|
||||
pinMode(pinCoil2, OUTPUT);
|
||||
pinMode(pinCoil3, OUTPUT);
|
||||
pinMode(pinCoil4, OUTPUT);
|
||||
pinMode(pinCoil5, OUTPUT);
|
||||
pinMode(pinInjector1, OUTPUT);
|
||||
pinMode(pinInjector2, OUTPUT);
|
||||
pinMode(pinInjector3, OUTPUT);
|
||||
pinMode(pinInjector4, OUTPUT);
|
||||
pinMode(pinInjector5, OUTPUT);
|
||||
pinMode(pinTachOut, OUTPUT);
|
||||
pinMode(pinIdle1, OUTPUT);
|
||||
pinMode(pinIdle2, OUTPUT);
|
||||
pinMode(pinFuelPump, OUTPUT);
|
||||
pinMode(pinIgnBypass, OUTPUT);
|
||||
pinMode(pinFan, OUTPUT);
|
||||
pinMode(pinStepperDir, OUTPUT);
|
||||
pinMode(pinStepperStep, OUTPUT);
|
||||
pinMode(pinStepperEnable, OUTPUT);
|
||||
pinMode(pinBoost, OUTPUT);
|
||||
pinMode(pinVVT_1, OUTPUT);
|
||||
|
||||
inj1_pin_port = portOutputRegister(digitalPinToPort(pinInjector1));
|
||||
inj1_pin_mask = digitalPinToBitMask(pinInjector1);
|
||||
inj2_pin_port = portOutputRegister(digitalPinToPort(pinInjector2));
|
||||
inj2_pin_mask = digitalPinToBitMask(pinInjector2);
|
||||
inj3_pin_port = portOutputRegister(digitalPinToPort(pinInjector3));
|
||||
inj3_pin_mask = digitalPinToBitMask(pinInjector3);
|
||||
inj4_pin_port = portOutputRegister(digitalPinToPort(pinInjector4));
|
||||
inj4_pin_mask = digitalPinToBitMask(pinInjector4);
|
||||
inj5_pin_port = portOutputRegister(digitalPinToPort(pinInjector5));
|
||||
inj5_pin_mask = digitalPinToBitMask(pinInjector5);
|
||||
inj6_pin_port = portOutputRegister(digitalPinToPort(pinInjector6));
|
||||
inj6_pin_mask = digitalPinToBitMask(pinInjector6);
|
||||
inj7_pin_port = portOutputRegister(digitalPinToPort(pinInjector7));
|
||||
inj7_pin_mask = digitalPinToBitMask(pinInjector7);
|
||||
inj8_pin_port = portOutputRegister(digitalPinToPort(pinInjector8));
|
||||
inj8_pin_mask = digitalPinToBitMask(pinInjector8);
|
||||
|
||||
ign1_pin_port = portOutputRegister(digitalPinToPort(pinCoil1));
|
||||
ign1_pin_mask = digitalPinToBitMask(pinCoil1);
|
||||
ign2_pin_port = portOutputRegister(digitalPinToPort(pinCoil2));
|
||||
ign2_pin_mask = digitalPinToBitMask(pinCoil2);
|
||||
ign3_pin_port = portOutputRegister(digitalPinToPort(pinCoil3));
|
||||
ign3_pin_mask = digitalPinToBitMask(pinCoil3);
|
||||
ign4_pin_port = portOutputRegister(digitalPinToPort(pinCoil4));
|
||||
ign4_pin_mask = digitalPinToBitMask(pinCoil4);
|
||||
ign5_pin_port = portOutputRegister(digitalPinToPort(pinCoil5));
|
||||
ign5_pin_mask = digitalPinToBitMask(pinCoil5);
|
||||
ign6_pin_port = portOutputRegister(digitalPinToPort(pinCoil6));
|
||||
ign6_pin_mask = digitalPinToBitMask(pinCoil6);
|
||||
ign7_pin_port = portOutputRegister(digitalPinToPort(pinCoil7));
|
||||
ign7_pin_mask = digitalPinToBitMask(pinCoil7);
|
||||
ign8_pin_port = portOutputRegister(digitalPinToPort(pinCoil8));
|
||||
ign8_pin_mask = digitalPinToBitMask(pinCoil8);
|
||||
|
||||
tach_pin_port = portOutputRegister(digitalPinToPort(pinTachOut));
|
||||
tach_pin_mask = digitalPinToBitMask(pinTachOut);
|
||||
pump_pin_port = portOutputRegister(digitalPinToPort(pinFuelPump));
|
||||
pump_pin_mask = digitalPinToBitMask(pinFuelPump);
|
||||
|
||||
//And for inputs
|
||||
pinMode(pinMAP, INPUT);
|
||||
pinMode(pinO2, INPUT);
|
||||
pinMode(pinO2_2, INPUT);
|
||||
pinMode(pinTPS, INPUT);
|
||||
pinMode(pinIAT, INPUT);
|
||||
pinMode(pinCLT, INPUT);
|
||||
pinMode(pinBat, INPUT);
|
||||
pinMode(pinBaro, INPUT);
|
||||
|
||||
pinMode(pinTrigger, INPUT);
|
||||
pinMode(pinTrigger2, INPUT);
|
||||
pinMode(pinTrigger3, INPUT);
|
||||
|
||||
//Each of the below are only set when their relevant function is enabled. This can help prevent pin conflicts that users aren't aware of with unused functions
|
||||
if(configPage2.flexEnabled > 0)
|
||||
{
|
||||
pinMode(pinFlex, INPUT); //Standard GM / Continental flex sensor requires pullup, but this should be onboard. The internal pullup will not work (Requires ~3.3k)!
|
||||
}
|
||||
if(configPage6.launchEnabled > 0)
|
||||
{
|
||||
if (configPage6.lnchPullRes == true) { pinMode(pinLaunch, INPUT_PULLUP); }
|
||||
else { pinMode(pinLaunch, INPUT); } //If Launch Pull Resistor is not set make input float.
|
||||
}
|
||||
if(configPage2.idleUpEnabled > 0)
|
||||
{
|
||||
if (configPage2.idleUpPolarity == 0) { pinMode(pinIdleUp, INPUT_PULLUP); } //Normal setting
|
||||
else { pinMode(pinIdleUp, INPUT); } //inverted setting
|
||||
}
|
||||
|
||||
|
||||
//These must come after the above pinMode statements
|
||||
triggerPri_pin_port = portInputRegister(digitalPinToPort(pinTrigger));
|
||||
triggerPri_pin_mask = digitalPinToBitMask(pinTrigger);
|
||||
triggerSec_pin_port = portInputRegister(digitalPinToPort(pinTrigger2));
|
||||
triggerSec_pin_mask = digitalPinToBitMask(pinTrigger2);
|
||||
|
||||
//Set default values
|
||||
digitalWrite(pinMAP, HIGH);
|
||||
//digitalWrite(pinO2, LOW);
|
||||
digitalWrite(pinTPS, LOW);
|
||||
|
||||
}
|
||||
#endif
|
|
@ -1,7 +1,6 @@
|
|||
#ifndef STM32_H
|
||||
#define STM32_H
|
||||
#if defined(CORE_STM32)
|
||||
#include <Fram.h>
|
||||
#if defined(CORE_STM32_GENERIC)
|
||||
|
||||
/*
|
||||
***********************************************************************************************************
|
||||
|
@ -20,8 +19,9 @@
|
|||
#define Serial Serial1
|
||||
#endif
|
||||
|
||||
#if defined(ARDUINO_BLACK_F407VE) || defined(STM32F4) || defined(_STM32F4_)
|
||||
FramClass EEPROM(PB0, PB3, PB4, PB5, 15000000);
|
||||
#if defined(USE_FRAM)
|
||||
#include <Fram.h>
|
||||
FramClass EEPROM(PB0, PB3, PB4, PB5, 15000000);
|
||||
#endif
|
||||
|
||||
//Much of the below is not correct, but included to allow compilation
|
|
@ -1,5 +1,5 @@
|
|||
#if defined(CORE_STM32) && !defined(ARDUINO_BLACK_F407VE)
|
||||
#include "board_stm32.h"
|
||||
#if defined(CORE_STM32_GENERIC) && !defined(ARDUINO_BLACK_F407VE)
|
||||
#include "board_stm32_generic.h"
|
||||
#include "globals.h"
|
||||
#include "auxiliaries.h"
|
||||
#include "idle.h"
|
|
@ -1,22 +1,23 @@
|
|||
#ifndef STM32F407VE_H
|
||||
#define STM32F407VE_H
|
||||
#if defined(ARDUINO_BLACK_F407VE)
|
||||
#if defined(CORE_STM32_OFFICIAL)
|
||||
|
||||
#include <timer.h>
|
||||
/*
|
||||
***********************************************************************************************************
|
||||
* General
|
||||
*/
|
||||
#define PORT_TYPE uint32_t
|
||||
#define PINMAKS_TYPE uint32_t
|
||||
#define micros_safe() micros() //timer5 method is not used on anything but AVR, the micros_safe() macro is simply an alias for the normal micros()
|
||||
|
||||
#define USE_SERIAL3
|
||||
void initBoard();
|
||||
uint16_t freeRam();
|
||||
// extern void oneMSIntervalIRQ(stimer_t *Timer);
|
||||
|
||||
extern void EmptyIRQCallback(stimer_t *Timer, uint32_t channel);
|
||||
/*
|
||||
#define PORT_TYPE uint32_t
|
||||
#define PINMASK_TYPE uint32_t
|
||||
#define micros_safe() micros() //timer5 method is not used on anything but AVR, the micros_safe() macro is simply an alias for the normal micros()
|
||||
|
||||
#define USE_SERIAL3
|
||||
void initBoard();
|
||||
uint16_t freeRam();
|
||||
extern void oneMSIntervalIRQ(stimer_t *Timer);
|
||||
extern void EmptyIRQCallback(stimer_t *Timer, uint32_t channel);
|
||||
|
||||
/*
|
||||
***********************************************************************************************************
|
||||
* Schedules
|
||||
*/
|
|
@ -0,0 +1,178 @@
|
|||
#if defined(CORE_STM32_OFFICIAL)
|
||||
#include "board_stm32_official.h"
|
||||
#include "globals.h"
|
||||
#include "auxiliaries.h"
|
||||
#include "idle.h"
|
||||
#include "scheduler.h"
|
||||
#include <timer.h>
|
||||
|
||||
#if defined(STM32F4)
|
||||
#define NR_OFF_TIMERS 9
|
||||
//stimer_t HardwareTimers[NR_OFF_TIMERS + 1];
|
||||
stimer_t HardwareTimers_1;
|
||||
stimer_t HardwareTimers_2;
|
||||
stimer_t HardwareTimers_3;
|
||||
stimer_t HardwareTimers_4;
|
||||
stimer_t HardwareTimers_5;
|
||||
stimer_t HardwareTimers_8;
|
||||
#define LED_BUILTIN PA7
|
||||
//These should really be in the stm32GENERIC libs, but for somereason they only have timers 1-4
|
||||
// #include <stm32_TIM_variant_11.h>
|
||||
// #include "src/HardwareTimers/HardwareTimer.h"
|
||||
// HardwareTimer Timer5(TIM5, chip_tim5, sizeof(chip_tim5) / sizeof(chip_tim5[0]));
|
||||
// HardwareTimer Timer8(TIM8, chip_tim8, sizeof(chip_tim8) / sizeof(chip_tim8[0]));
|
||||
#else
|
||||
#include "HardwareTimer.h"
|
||||
#endif
|
||||
|
||||
extern void oneMSIntervalIRQ(stimer_t *Timer)
|
||||
{
|
||||
oneMSInterval();
|
||||
}
|
||||
extern void EmptyIRQCallback(stimer_t *Timer, uint32_t channel)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
void initBoard()
|
||||
{
|
||||
/*
|
||||
* Initialize timers
|
||||
*/
|
||||
|
||||
HardwareTimers_1.timer = TIM1;
|
||||
HardwareTimers_2.timer = TIM2;
|
||||
HardwareTimers_3.timer = TIM3;
|
||||
HardwareTimers_4.timer = TIM4;
|
||||
|
||||
HardwareTimers_5.timer = TIM5;
|
||||
HardwareTimers_8.timer = TIM8;
|
||||
|
||||
|
||||
/*
|
||||
***********************************************************************************************************
|
||||
* General
|
||||
*/
|
||||
#define FLASH_LENGTH 8192
|
||||
|
||||
/*
|
||||
***********************************************************************************************************
|
||||
* Idle
|
||||
*/
|
||||
if( (configPage6.iacAlgorithm == IAC_ALGORITHM_PWM_OL) || (configPage6.iacAlgorithm == IAC_ALGORITHM_PWM_CL) )
|
||||
{
|
||||
idle_pwm_max_count = 1000000L / (configPage6.idleFreq * 2); //Converts the frequency in Hz to the number of ticks (at 2uS) it takes to complete 1 cycle. Note that the frequency is divided by 2 coming from TS to allow for up to 5KHz
|
||||
}
|
||||
|
||||
//This must happen at the end of the idle init
|
||||
TimerPulseInit(&HardwareTimers_1, 0xFFFF, 0, EmptyIRQCallback);
|
||||
//setTimerPrescalerRegister(&HardwareTimers_1, (uint32_t)(getTimerClkFreq(HardwareTimers_1.timer) / (500000)) - 1);
|
||||
if(idle_pwm_max_count > 0) { attachIntHandleOC(&HardwareTimers_1, idleInterrupt, 4, 0);} //on first flash the configPage4.iacAlgorithm is invalid
|
||||
//Timer1.setMode(4, TIMER_OUTPUT_COMPARE);
|
||||
//timer_set_mode(TIMER1, 4, TIMER_OUTPUT_COMPARE;
|
||||
//if(idle_pwm_max_count > 0) { Timer1.attachInterrupt(4, idleInterrupt);} //on first flash the configPage4.iacAlgorithm is invalid
|
||||
//Timer1.resume();
|
||||
|
||||
|
||||
/*
|
||||
***********************************************************************************************************
|
||||
* Timers
|
||||
*/
|
||||
#if defined(ARDUINO_BLACK_F407VE) || defined(STM32F4) || defined(_STM32F4_)
|
||||
TimerHandleInit(&HardwareTimers_8, 1000, 168);
|
||||
attachIntHandle(&HardwareTimers_8, oneMSIntervalIRQ);
|
||||
#else
|
||||
Timer4.setPeriod(1000); // Set up period
|
||||
Timer4.setMode(1, TIMER_OUTPUT_COMPARE);
|
||||
Timer4.attachInterrupt(1, oneMSInterval);
|
||||
Timer4.resume(); //Start Timer
|
||||
#endif
|
||||
pinMode(LED_BUILTIN, OUTPUT); //Visual WDT
|
||||
|
||||
/*
|
||||
***********************************************************************************************************
|
||||
* Auxilliaries
|
||||
*/
|
||||
//2uS resolution Min 8Hz, Max 5KHz
|
||||
boost_pwm_max_count = 1000000L / (2 * configPage6.boostFreq * 2); //Converts the frequency in Hz to the number of ticks (at 2uS) it takes to complete 1 cycle. The x2 is there because the frequency is stored at half value (in a byte) to allow freqneucies up to 511Hz
|
||||
vvt_pwm_max_count = 1000000L / (2 * configPage6.vvtFreq * 2); //Converts the frequency in Hz to the number of ticks (at 2uS) it takes to complete 1 cycle
|
||||
|
||||
//Need to be initialised last due to instant interrupt
|
||||
// Timer1.setMode(2, TIMER_OUTPUT_COMPARE);
|
||||
// Timer1.setMode(3, TIMER_OUTPUT_COMPARE);
|
||||
// if(boost_pwm_max_count > 0) { Timer1.attachInterrupt(2, boostInterrupt);}
|
||||
// if(vvt_pwm_max_count > 0) { Timer1.attachInterrupt(3, vvtInterrupt);}
|
||||
if(idle_pwm_max_count > 0) { attachIntHandleOC(&HardwareTimers_1, boostInterrupt, 2, 0);}
|
||||
if(vvt_pwm_max_count > 0) { attachIntHandleOC(&HardwareTimers_1, vvtInterrupt, 3, 0);}
|
||||
// Timer1.resume();
|
||||
|
||||
TimerPulseInit(&HardwareTimers_3, 0xFFFF, 0, EmptyIRQCallback);
|
||||
attachIntHandleOC(&HardwareTimers_3, fuelSchedule1Interrupt, 1, 0);
|
||||
attachIntHandleOC(&HardwareTimers_3, fuelSchedule2Interrupt, 2, 0);
|
||||
attachIntHandleOC(&HardwareTimers_3, fuelSchedule3Interrupt, 3, 0);
|
||||
attachIntHandleOC(&HardwareTimers_3, fuelSchedule4Interrupt, 4, 0);
|
||||
|
||||
|
||||
TimerPulseInit(&HardwareTimers_2, 0xFFFF, 0, EmptyIRQCallback);
|
||||
attachIntHandleOC(&HardwareTimers_2, ignitionSchedule1Interrupt, 1, 0);
|
||||
attachIntHandleOC(&HardwareTimers_2, ignitionSchedule2Interrupt, 2, 0);
|
||||
attachIntHandleOC(&HardwareTimers_2, ignitionSchedule3Interrupt, 3, 0);
|
||||
attachIntHandleOC(&HardwareTimers_2, ignitionSchedule4Interrupt, 4, 0);
|
||||
|
||||
//Attach interupt functions
|
||||
//Injection
|
||||
|
||||
TimerPulseInit(&HardwareTimers_5, 0xFFFF, 0, EmptyIRQCallback);
|
||||
//setTimerPrescalerRegister(&HardwareTimers_5, (uint32_t)(getTimerClkFreq(HardwareTimers_5.timer) / (1000000)) - 1);
|
||||
#if (INJ_CHANNELS >= 5)
|
||||
attachIntHandleOC(&HardwareTimers_5, fuelSchedule5Interrupt, 1, 0);
|
||||
//Timer5.attachInterrupt(1, fuelSchedule5Interrupt);
|
||||
#endif
|
||||
#if (INJ_CHANNELS >= 6)
|
||||
attachIntHandleOC(&HardwareTimers_5, fuelSchedule6Interrupt, 2, 0);
|
||||
//Timer5.attachInterrupt(2, fuelSchedule6Interrupt);
|
||||
#endif
|
||||
#if (INJ_CHANNELS >= 7)
|
||||
attachIntHandleOC(&HardwareTimers_5, fuelSchedule7Interrupt, 3, 0);
|
||||
//Timer5.attachInterrupt(3, fuelSchedule7Interrupt);
|
||||
#endif
|
||||
#if (INJ_CHANNELS >= 8)
|
||||
attachIntHandleOC(&HardwareTimers_5, fuelSchedule8Interrupt, 4, 0);
|
||||
//Timer5.attachInterrupt(4, fuelSchedule8Interrupt);
|
||||
#endif
|
||||
|
||||
TimerPulseInit(&HardwareTimers_4, 0xFFFF, 0, EmptyIRQCallback);
|
||||
//setTimerPrescalerRegister(&HardwareTimers_4, (uint32_t)(getTimerClkFreq(HardwareTimers_4.timer) / (1000000)) - 1);
|
||||
#if (IGN_CHANNELS >= 5)
|
||||
attachIntHandleOC(&HardwareTimers_4, ignitionSchedule5Interrupt, 1, 0);
|
||||
//Timer4.attachInterrupt(1, ignitionSchedule5Interrupt);
|
||||
#endif
|
||||
#if (IGN_CHANNELS >= 6)
|
||||
attachIntHandleOC(&HardwareTimers_4, ignitionSchedule6Interrupt, 2, 0);
|
||||
//Timer4.attachInterrupt(2, ignitionSchedule6Interrupt);
|
||||
#endif
|
||||
#if (IGN_CHANNELS >= 7)
|
||||
attachIntHandleOC(&HardwareTimers_4, ignitionSchedule7Interrupt, 3, 0);
|
||||
//Timer4.attachInterrupt(3, ignitionSchedule7Interrupt);
|
||||
#endif
|
||||
#if (IGN_CHANNELS >= 8)
|
||||
attachIntHandleOC(&HardwareTimers_4, ignitionSchedule8Interrupt, 4, 0);
|
||||
//Timer4.attachInterrupt(4, ignitionSchedule8Interrupt);
|
||||
#endif
|
||||
|
||||
setTimerPrescalerRegister(&HardwareTimers_2, (uint32_t)(getTimerClkFreq(HardwareTimers_2.timer) / (250000)) - 1);
|
||||
setTimerPrescalerRegister(&HardwareTimers_3, (uint32_t)(getTimerClkFreq(HardwareTimers_3.timer) / (250000)) - 1);
|
||||
setTimerPrescalerRegister(&HardwareTimers_4, (uint32_t)(getTimerClkFreq(HardwareTimers_4.timer) / (250000)) - 1);
|
||||
setTimerPrescalerRegister(&HardwareTimers_5, (uint32_t)(getTimerClkFreq(HardwareTimers_5.timer) / (250000)) - 1);
|
||||
}
|
||||
|
||||
uint16_t freeRam()
|
||||
{
|
||||
char top = 't';
|
||||
return &top - reinterpret_cast<char*>(sbrk(0));
|
||||
}
|
||||
|
||||
//pinmapping the STM32F407 for different boards, at this moment no board is desgined.
|
||||
//All boards are set to the default just to be sure.
|
||||
|
||||
#endif
|
|
@ -206,7 +206,7 @@ static inline int crankingGetRPM(byte totalTeeth)
|
|||
On decoders that are enabled for per tooth based timing adjustments, this function performs the timer compare changes on the schedules themselves
|
||||
For each ignition channel, a check is made whether we're at the relevant tooth and whether that ignition schedule is currently running
|
||||
Only if both these conditions are met will the schedule be updated with the latest timing information.
|
||||
If it's the correct tooth, but
|
||||
If it's the correct tooth, but the schedule is not yet started, calculate and an end compare value (This situation occurs when both the start and end of the ignition pulse happen after the end tooth, but before the next tooth)
|
||||
*/
|
||||
#define checkPerToothTiming(crankAngle, currentTooth) \
|
||||
{ \
|
||||
|
@ -215,7 +215,7 @@ If it's the correct tooth, but
|
|||
if ( (currentTooth == ignition1EndTooth) ) \
|
||||
{ \
|
||||
if( (ignitionSchedule1.Status == RUNNING) ) { IGN1_COMPARE = IGN1_COUNTER + uS_TO_TIMER_COMPARE( fastDegreesToUS( ignitionLimits( (ignition1EndAngle - crankAngle) ) ) ); } \
|
||||
else { ignitionSchedule1.endCompare = IGN1_COUNTER + uS_TO_TIMER_COMPARE( fastDegreesToUS( ignitionLimits( (ignition1EndAngle - crankAngle) ) ) ); ignitionSchedule1.endScheduleSetByDecoder = true; } \
|
||||
else if(currentStatus.startRevolutions > 2) { ignitionSchedule1.endCompare = IGN1_COUNTER + uS_TO_TIMER_COMPARE( fastDegreesToUS( ignitionLimits( (ignition1EndAngle - crankAngle) ) ) ); ignitionSchedule1.endScheduleSetByDecoder = true; } \
|
||||
} \
|
||||
\
|
||||
else if ( (currentTooth == ignition2EndTooth) ) \
|
||||
|
|
|
@ -20,8 +20,8 @@
|
|||
#define BOARD_H "board_teensy35.h"
|
||||
|
||||
#elif defined(STM32_MCU_SERIES) || defined(ARDUINO_ARCH_STM32) || defined(__STM32F1__) || defined(STM32F4) || defined(STM32)
|
||||
#define CORE_STM32
|
||||
#define BOARD_H "board_stm32.h"
|
||||
#define CORE_STM32_GENERIC
|
||||
#define BOARD_H "board_stm32_generic.h"
|
||||
#ifndef word
|
||||
#define word(h, l) ((h << 8) | l) //word() function not defined for this platform in the main library
|
||||
#endif
|
||||
|
@ -32,7 +32,9 @@
|
|||
#define LED_BUILTIN PB1 //Maple Mini
|
||||
#endif
|
||||
#elif defined(ARDUINO_BLACK_F407VE) || defined(STM32F4)
|
||||
#define BOARD_H "board_stm32F407VE.h"
|
||||
//Need to identify the official core better
|
||||
#define CORE_STM32_OFFICIAL
|
||||
#define BOARD_H "board_stm32_official.h"
|
||||
#define BOARD_DIGITAL_GPIO_PINS 80
|
||||
#define BOARD_NR_GPIO_PINS 80
|
||||
|
||||
|
@ -55,8 +57,10 @@
|
|||
inline unsigned char digitalPinToInterrupt(unsigned char Interrupt_pin) { return Interrupt_pin; } //This isn't included in the stm32duino libs (yet)
|
||||
#else //libmaple core aka STM32DUINO
|
||||
//These are defined in STM32F1/variants/generic_stm32f103c/variant.h but return a non byte* value
|
||||
#define portOutputRegister(port) (volatile byte *)( &(port->regs->ODR) )
|
||||
#define portInputRegister(port) (volatile byte *)( &(port->regs->IDR) )
|
||||
#ifndef portOutputRegister
|
||||
#define portOutputRegister(port) (volatile byte *)( &(port->regs->ODR) )
|
||||
#define portInputRegister(port) (volatile byte *)( &(port->regs->IDR) )
|
||||
#endif
|
||||
#endif
|
||||
#elif defined(__SAMD21G18A__)
|
||||
#define BOARD_H "board_samd21.h"
|
||||
|
|
|
@ -679,6 +679,7 @@ void loop()
|
|||
//If ignition timing is being tracked per tooth, perform the calcs to get the end teeth
|
||||
//This only needs to be run if the advance figure has changed, otherwise the end teeth will still be the same
|
||||
if( (configPage2.perToothIgn == true) && (lastToothCalcAdvance != currentStatus.advance) ) { triggerSetEndTeeth(); }
|
||||
//if( (configPage2.perToothIgn == true) ) { triggerSetEndTeeth(); }
|
||||
|
||||
//***********************************************************************************************
|
||||
//| BEGIN FUEL SCHEDULES
|
||||
|
|
|
@ -12,7 +12,7 @@ A full copy of the license may be found in the projects root directory
|
|||
#include "src/FlashStorage/FlashAsEEPROM.h"
|
||||
#elif defined(ARDUINO_BLACK_F407VE)
|
||||
#include "src/BackupSram/BackupSramAsEEPROM.h"
|
||||
#elif defined(CORE_STM32)
|
||||
#elif defined(USE_FRAM)
|
||||
#include <Fram.h>
|
||||
#else
|
||||
#include <EEPROM.h>
|
||||
|
|
|
@ -10,7 +10,7 @@
|
|||
#include "src/FlashStorage/FlashAsEEPROM.h"
|
||||
#elif defined(ARDUINO_BLACK_F407VE)
|
||||
#include "src/BackupSram/BackupSramAsEEPROM.h"
|
||||
#elif defined(CORE_STM32)
|
||||
#elif defined(USE_FRAM)
|
||||
#include <Fram.h>
|
||||
#else
|
||||
#include <EEPROM.h>
|
||||
|
|
Loading…
Reference in New Issue