• R/O
  • SSH
  • HTTPS

Commit

Frequently used words (click to add to your profile)

javac++androidlinuxc#windowsobjective-ccocoa誰得qtpythonphprubygameguibathyscaphec計画中(planning stage)翻訳omegatframeworktwitterdomtestvb.netdirectxゲームエンジンbtronarduinopreviewer

PJSC(Pump Jet Solenoid Controller)はArduinoを使用したバイク用燃料噴射コントローラです。このプロジェクトは、オープンソースECUプロジェクト『Speeduino』をベースにしています。


Commit MetaInfo

Revision33 (tree)
Time2019-02-16 22:12:08
Authormaharu

Log Message

Based on Speeduino Feb.2019 version.
Support dual fuel load.

Change Summary

Incremental Difference

--- branches/Ver1.00_base/reference/PJSC.ini (revision 32)
+++ branches/Ver1.00_base/reference/PJSC.ini (revision 33)
@@ -6,7 +6,7 @@
66 MTversion = 2.25
77
88 queryCommand = "Q"
9- signature = "speeduino - PJSC v1.0" ;[PJSC]
9+ signature = "speeduino - PJSC v1.10" ;[PJSC]
1010 versionInfo = "S" ;This info is what is displayed to user
1111
1212 [TunerStudio]
@@ -152,9 +152,10 @@
152152
153153 endianness = little
154154 ;[PJSC] nPages = 10
155-;[PJSC] pageSize = 288, 128, 288, 128, 288, 128, 240, 192, 192, 192
155+ ;pageSize = 288, 128, 288, 128, 288, 128, 240, 192, 192, 192
156+;[PJSC] pageSize = 128, 288, 288, 128, 288, 128, 240, 192, 192, 192
156157 nPages = 11 ;[PJSC]
157- pageSize = 288, 128, 288, 128, 288, 128, 240, 192, 192, 192, 288 ;[PJSC]
158+ pageSize = 128, 288, 288, 128, 288, 128, 240, 192, 192, 192, 288 ;[PJSC]
158159
159160 ;burnCommand = "B"
160161 ;pageActivate = "P\001", "P\002", "P\003", "P\004", "P\005", "P\006", "P\007", "P\010", "P\011", "P\012", "P\013"
@@ -191,7 +192,7 @@
191192 #define PIN_OUT16inv = "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
192193 #define PIN_16inv = "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
193194
194- #define ANALOG_PIN = "A0", "A1", "A2", "A3", "A4", "A5", "A6", "A7", "A8", "A8", "A10", "A11", "A12", "A13", "A14", "A15", $PIN_16inv, $PIN_16inv, $PIN_16inv
195+ #define ANALOG_PIN = "A0", "A1", "A2", "A3", "A4", "A5", "A6", "A7", "A8", "A9", "A10", "A11", "A12", "A13", "A14", "A15", $PIN_16inv, $PIN_16inv, $PIN_16inv
195196 #define DIGITAL_PIN = "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "21", "22", "23", "24", "25", "26", "27", "28", "29", "30", "31", "32", "33", "34", "35", "36", "37", "38", "39", "40", "41", "42", "43", "44", "45", "46", "47", "48", "49", "50", "51", "52", "53", "54", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
196197 #define ANALOG_DIG_PIN_LIST = $DIGITAL_PIN, $ANALOG_PIN
197198 #define tsCanId_list = "CAN ID 0", "CAN ID 1", "CAN ID 2", "CAN ID 3", "CAN ID 4", "CAN ID 5", "CAN ID 6", "CAN ID 7", "CAN ID 8", "CAN ID 9", "CAN ID 10","CAN ID 11","CAN ID 12","CAN ID 13","CAN ID 14","INVALID"
@@ -206,23 +207,13 @@
206207 #define CAN_ADDRESS_HEX_07XX = "0x700", "0x701", "0x702", "0x703", "0x704", "0x705", "0x706", "0x707", "0x708", "0x709", "0x70A", "0x70B", "0x70C", "0x70D", "0x70E", "0x70F", "0x710", "0x711", "0x712", "0x713", "0x714", "0x715", "0x716", "0x717", "0x718", "0x719", "0x71A", "0x71B", "0x71C", "0x71D", "0x71E", "0x71F", "0x720", "0x721", "0x722", "0x723", "0x724", "0x725", "0x726", "0x727", "0x728", "0x729", "0x72A", "0x72B", "0x72C", "0x72D", "0x72E", "0x72F", "0x730", "0x731", "0x732", "0x733", "0x734", "0x735", "0x736", "0x737", "0x738", "0x739", "0x73A", "0x73B", "0x73C", "0x73D", "0x73E", "0x73F", "0x740", "0x741", "0x742", "0x743", "0x744", "0x745", "0x746", "0x747", "0x748", "0x749", "0x74A", "0x74B", "0x74C", "0x74D", "0x74E", "0x74F", "0x750", "0x751", "0x752", "0x753", "0x754", "0x755", "0x756", "0x757", "0x758", "0x759", "0x75A", "0x75B", "0x75C", "0x75D", "0x75E", "0x75F" ,"0x760", "0x761", "0x762", "0x763", "0x764", "0x765", "0x766", "0x767", "0x768", "0x769", "0x76A", "0x76B", "0x76C", "0x76D", "0x76E", "0x76F", "0x770", "0x771", "0x772", "0x773", "0x774", "0x775", "0x776", "0x777", "0x778", "0x779", "0x77A", "0x77B", "0x77C", "0x77D", "0x77E", "0x77F", "0x780", "0x781", "0x782", "0x783", "0x784", "0x785", "0x786", "0x787", "0x788", "0x789", "0x78A", "0x78B", "0x78C", "0x78D", "0x78E", "0x78F" ,"0x790", "0x791", "0x792", "0x793", "0x794", "0x795", "0x796", "0x797", "0x798", "0x799", "0x79A", "0x79B", "0x79C", "0x79D", "0x79E", "0x79F", "0x7A0", "0x7A1", "0x7A2", "0x7A3", "0x7A4", "0x7A5", "0x7A6", "0x7A7", "0x7A8", "0x7A9", "0x7AA", "0x7AB", "0x7AC", "0x7AD", "0x7AE", "0x7AF", "0x7B0", "0x7B1", "0x7B2", "0x7B3", "0x7B4", "0x7B5", "0x7B6", "0x7B7", "0x7B8", "0x7B9", "0x7BA", "0x7BB", "0x7BC", "0x7BD", "0x7BE", "0x7BF" ,"0x7C0", "0x7C1", "0x7C2", "0x7C3", "0x7C4", "0x7C5", "0x7C6", "0x7C7", "0x7C8", "0x7C9", "0x7CA", "0x7CB", "0x7CC", "0x7CD", "0x7CE", "0x7CF", "0x7D0", "0x7D1", "0x7D2", "0x7D3", "0x7D4", "0x7D5", "0x7D6", "0x7D7", "0x7D8", "0x7D9", "0x7DA", "0x7DB", "0x7DC", "0x7DD", "0x7DE", "0x7DF", "0x7E0", "0x7E1", "0x7E2", "0x7E3", "0x7E4", "0x7E5", "0x7E6", "0x7E7", "0x7E8", "0x7E9", "0x7EA", "0x7EB", "0x7EC", "0x7ED", "0x7EE", "0x7EF" ,"0x7F0", "0x7F1", "0x7F2", "0x7F3", "0x7F4", "0x7F5", "0x7F6", "0x7F7", "0x7F8", "0x7F9", "0x7FA", "0x7FB", "0x7FC", "0x7FD", "0x7FE", "0x7FF"
207208 #define CAN_ADDRESS_HEX = $CAN_ADDRESS_HEX_01XX, $CAN_ADDRESS_HEX_02XX, $CAN_ADDRESS_HEX_03XX, $CAN_ADDRESS_HEX_04XX, $CAN_ADDRESS_HEX_05XX, $CAN_ADDRESS_HEX_06XX, $CAN_ADDRESS_HEX_07XX, $CAN_ADDRESS_HEX_inv255
208209
209-;Page 1 is the fuel map and axis bins only
210-page = 1
211- ; name = bits, type, offset, bits
212- ; name = array, type, offset, shape, units, scale, translate, lo, hi, digits
213- ; name = scalar, type, offset, units, scale, translate, lo, hi, digits
214- veTable = array, U08, 0, [16x16],"%", 1.0, 0.0, 0.0, 255.0, 0
215- rpmBins = array, U08, 256, [ 16], "RPM", 100.0, 0.0, 100.0, 25500.0, 0
216- fuelLoadBins = array, U08, 272, [ 16], { bitStringValue(algorithmUnits , algorithm) }, 2.0, 0.0, 0.0, {fuelLoadMax}, 0
217- ;fuelLoadBins = array, U08, 272, [ 16], { bitStringValue(algorithmUnits , algorithm) }, 2.0, 0.0, 0.0, { arrayValue(rpmBins , algorithm) }, 0
218210
219211
220-
221212 ;--------------------------------------------------
222-;Start Page 2
223-;Page 2 is all general settings (Previously part of page 1)
213+;Start Page 1
214+;Page 1 is all general settings. Note that some of these (algorithm and ignAlgorithm) MUST come before their use in the bitStringValue() calls in the fuel and ignition tables
224215 ;--------------------------------------------------
225-page = 2
216+page = 1
226217 unused2-1 = scalar, S08, 0, "kPa", 1.0, 0.0, -127, 127, 0
227218 unused2-2 = scalar, U08, 1, "kPa", 1.0, 0.0, 0.0, 255, 0
228219 asePct = scalar, U08, 2, "%", 1.0, 0.0, 0.0, 95.0, 0
@@ -230,7 +221,7 @@
230221 wueRates = array, U08, 4, [10], "%", 1.0, 0.0, 0.0, 255, 0
231222 crankingPct = scalar, U08, 14, "%", 1.0, 0.0, 0.0, 255, 0
232223 ;[PJSC] pinLayout = bits, U08, 15, [0:7], "Speeduino v0.1", "Speeduino v0.2", "Speeduino v0.3", "Speeduino v0.4", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "NA6 MX5 PNP", "Turtana PCB", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "Plazomat I/O 0.1", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "Daz V6 Shield 0.1", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "NO2C", "UA4C", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "dvjcodec Teensy RevA", "dvjcodec Teensy RevB", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
233- pinLayout = bits, U08, 15, [0:7], "Speeduino v0.1", "Speeduino v0.2", "Speeduino v0.3", "Speeduino v0.4", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "NA6 MX5 PNP", "Turtana PCB", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "Plazomat I/O 0.1", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "Daz V6 Shield 0.1", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "NO2C", "UA4C", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "dvjcodec Teensy RevA", "dvjcodec Teensy RevB", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "PJSC v1.0", "PJSC v0.2", "PJSC v0.3", "PJSC v0.4", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" ;[PJSC] Boad ID: PJSC boad ver1.0/0.2/0.3 (2018/20/19)
224+ pinLayout = bits, U08, 15, [0:7], "Speeduino v0.1", "Speeduino v0.2", "Speeduino v0.3", "Speeduino v0.4", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "NA6 MX5 PNP", "Turtana PCB", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "Plazomat I/O 0.1", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "Daz V6 Shield 0.1", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "NO2C", "UA4C", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "dvjcodec Teensy RevA", "dvjcodec Teensy RevB", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "PJSC v1.0", "PJSC v0.2", "PJSC v0.3", "PJSC v0.4", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" ;[PJSC] Boad ID: PJSC boad ver1.0/0.2/0.3 (2018/20/19)
234225 tachoPin = bits, U08, 16, [0:5], "Board Default", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "21", "22", "23", "24", "25", "26", "27", "28", "29", "30", "31", "32", "33", "34", "35", "36", "37", "38", "39", "40", "41", "42", "43", "44", "45", "46", "47", "48", "49", "50", "51", "52", "53", "54", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
235226 tachoDiv = bits, U08, 16, [6:7], "Normal", "Half", "INVALID", "INVALID"
236227 unused2-17 = scalar, U08, 17, "ms", 0.1, 0.0, 0.0, 25.5, 1
@@ -315,53 +306,67 @@
315306 baroMax = scalar, U16, 65, "kpa", 1.0, 0.0, 0.0, 25500, 0
316307 EMAPMin = scalar, S08, 67, "kpa", 1.0, 0.0, -100, 127.0, 0
317308 EMAPMax = scalar, U16, 68, "kpa", 1.0, 0.0, 0.0, 25500, 0
318-;[PJSC] unused2-67 = array, U08, 70, [57], "%", 1.0, 0.0, 0.0, 255, 0
319- pjscFreq = scalar, U08, 70, "Hz", 2.0, 0.0, 10, 511, 0 ;[PJSC]
320- exValvePosMin = scalar, U08, 71, "ADC", 1.0, 0.0, 0.0, 255.0, 0 ; |
321- exValvePosMax = scalar, U08, 72, "ADC", 1.0, 0.0, 0.0, 255.0, 0 ; |
322- exTrigHysteresis = scalar, U08, 73, "deg", 1.0, 0.0, 0.0, 255.0, 0 ; V
323- squirtDeviceType = bits, U08, 74, [0:0], "Injector", "Solenoid valve" ;[PJSC]
324- multiVEmapEnabled = bits, U08, 74, [1:2], "Disable", "Separate", "Switching", "Dual Fuel Load" ;[PJSC v1.10] For Dual Fuel Load
325- exTrigModeSelect = bits, U08, 74, [3:4], "Disable", "Spark timing capture", "MAP select switch", "INVALID" ;[PJSC]
326- externalTrigEdge = bits, U08, 74, [5:5], "Rising", "Falling" ; |
327- exValveCaptureEnabled = bits, U08, 74, [6:6], "Disable", "Exhaust Valve Position capture" ; |
328- dutyPulseCaptureEnabled = bits, U08, 74, [7:7], "Disable", "PWM input" ; |
329- dutyPulseCaptureEnabled2 = bits, U08, 75, [0:0], "Disable", "PWM input" ; |
330- dutyPulseOnLevel = bits, U08, 75, [1:1], "High", "Low" ; |
331- dutyPulseOnLevel2 = bits, U08, 75, [2:2], "High", "Low" ; V
332- exValveCalibrationMode = bits, U08, 75, [3:3], "Off", "On" ;[PJSC]
333- algorithm2 = bits, U08, 75, [4:6], $loadSourceNames ;[PJSC v1.10] For Dual Fuel Load
334- secondaryFuelUsage = bits, U08, 75, [7:7], "additive", "multiplicitive" ;[PJSC v1.10] For Dual Fuel Load
335- veMapSelection1 = bits, U08, 76, [0:7], "VE Table 1","VE Table 2","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID"
336- veMapSelection2 = bits, U08, 77, [0:7], "VE Table 1","VE Table 2","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID"
337- veMapSelection3 = bits, U08, 78, [0:7], "VE Table 1","VE Table 2","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID"
338- veMapSelection4 = bits, U08, 79, [0:7], "VE Table 1","VE Table 2","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID"
339- veMapSelection1_2 = bits, U08, 80, [0:7], "VE Table 1","VE Table 2","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID"
340- veMapSelection2_2 = bits, U08, 81, [0:7], "VE Table 1","VE Table 2","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID"
341- veMapSelection3_2 = bits, U08, 82, [0:7], "VE Table 1","VE Table 2","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID"
342- veMapSelection4_2 = bits, U08, 83, [0:7], "VE Table 1","VE Table 2","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID"
343- dutyFreqTst1 = scalar, U08, 84, "Hz", 2.0, 0.0, 10, 511, 0 ;[PJSC v1.10]
344- dutyFreqTst2 = scalar, U08, 85, "Hz", 2.0, 0.0, 10, 511, 0 ;[PJSC v1.10]
345- dutyFreqTst3 = scalar, U08, 86, "Hz", 2.0, 0.0, 10, 511, 0 ;[PJSC v1.10]
346- dutyFreqTst4 = scalar, U08, 87, "Hz", 2.0, 0.0, 10, 511, 0 ;[PJSC v1.10]
347- dutyRatioTst1 = scalar, U08, 88, "%", 1.0, 0.0, 0.0, 100.0, 0 ;[PJSC v1.10]
348- dutyRatioTst2 = scalar, U08, 89, "%", 1.0, 0.0, 0.0, 100.0, 0 ;[PJSC v1.10]
349- dutyRatioTst3 = scalar, U08, 90, "%", 1.0, 0.0, 0.0, 100.0, 0 ;[PJSC v1.10]
350- dutyRatioTst4 = scalar, U08, 91, "%", 1.0, 0.0, 0.0, 100.0, 0 ;[PJSC v1.10]
351- testop_fp = bits, U08, 92, [0:0], "Off", "On"
352- testop_inj = bits, U08, 92, [1:2], "Off", "One", "INVALID", "All"
353- testop_coil = bits, U08, 92, [3:4], "Off", "One", "INVALID", "INVALID"
354- testsel_inj = bits, U08, 92, [5:6], "Inj1", "Inj2", "Inj3", "Inj4"
355- testsel_coil = bits, U08, 92, [7:7], "CoilA", "CoilB"
356- testint = scalar, U16, 93, "ms", 0.01, 0.00, 0, 655.35, 1
357- testrpm = scalar, U16, 93, "RPM", 1.0, { 60000/testint }, 0, 60000, 0
358- testpw = scalar, U16, 95, "ms", 0.01, 0.00, 0, 655.35, 1 ; * ( 1 byte)
359- testinjcnt = scalar, U16, 97, "", 1, 0, 0, 65535, 0, noLocalUpdate
360- muxout1selection = bits, U08, 99, [0:3], "Disable", "IDLE control", "Thermo Fan control", "Launch control", "Fuel pump control", "Boost control", "VVT control", "Tach output", "INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID"
361- muxout2selection = bits, U08, 99, [4:7], "Disable", "IDLE control", "Thermo Fan control", "Launch control", "Fuel pump control", "Boost control", "VVT control", "Tach output", "INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID"
362- unused2-100 = array, U08, 100, [28], "%", 1.0, 0.0, 0.0, 255, 0 ;[PJSC v1.10]
363309
310+ fanWhenOff = bits, U08, 70, [0:0], "No", "Yes"
311+ unused_fan_bits = bits, U08, 70,[1:7]
364312
313+;[PJSC] unused2-67 = array, U08, 71, [56], "%", 1.0, 0.0, 0.0, 255, 0
314+ pjscFreq = scalar, U08, 71, "Hz", 2.0, 0.0, 10, 511, 0 ;[PJSC]
315+ exValvePosMin = scalar, U08, 72, "ADC", 1.0, 0.0, 0.0, 255.0, 0 ; |
316+ exValvePosMax = scalar, U08, 73, "ADC", 1.0, 0.0, 0.0, 255.0, 0 ; |
317+ exTrigHysteresis = scalar, U08, 74, "deg", 1.0, 0.0, 0.0, 255.0, 0 ; V
318+ squirtDeviceType = bits, U08, 75, [0:0], "Injector", "Solenoid valve" ;[PJSC]
319+ multiVEmapEnabled = bits, U08, 75, [1:2], "Disable", "Separate", "Switching", "Dual Fuel Load" ;[PJSC v1.10] For Dual Fuel Load
320+ exTrigModeSelect = bits, U08, 75, [3:4], "Disable", "Spark timing capture", "MAP select switch", "INVALID" ;[PJSC]
321+ externalTrigEdge = bits, U08, 75, [5:5], "Rising", "Falling" ; |
322+ exValveCaptureEnabled = bits, U08, 75, [6:6], "Disable", "Exhaust Valve Position capture" ; |
323+ dutyPulseCaptureEnabled = bits, U08, 75, [7:7], "Disable", "PWM input" ; |
324+ dutyPulseCaptureEnabled2 = bits, U08, 76, [0:0], "Disable", "PWM input" ; |
325+ dutyPulseOnLevel = bits, U08, 76, [1:1], "High", "Low" ; |
326+ dutyPulseOnLevel2 = bits, U08, 76, [2:2], "High", "Low" ; V
327+ exValveCalibrationMode = bits, U08, 76, [3:3], "Off", "On" ;[PJSC]
328+ algorithm2 = bits, U08, 76, [4:6], $loadSourceNames ;[PJSC v1.10] For Dual Fuel Load
329+ secondaryFuelUsage = bits, U08, 76, [7:7], "additive", "multiplicitive" ;[PJSC v1.10] For Dual Fuel Load
330+ veMapSelection1 = bits, U08, 77, [0:7], "VE Table 1","VE Table 2","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID"
331+ veMapSelection2 = bits, U08, 78, [0:7], "VE Table 1","VE Table 2","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID"
332+ veMapSelection3 = bits, U08, 79, [0:7], "VE Table 1","VE Table 2","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID"
333+ veMapSelection4 = bits, U08, 80, [0:7], "VE Table 1","VE Table 2","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID"
334+ veMapSelection1_2 = bits, U08, 81, [0:7], "VE Table 1","VE Table 2","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID"
335+ veMapSelection2_2 = bits, U08, 82, [0:7], "VE Table 1","VE Table 2","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID"
336+ veMapSelection3_2 = bits, U08, 83, [0:7], "VE Table 1","VE Table 2","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID"
337+ veMapSelection4_2 = bits, U08, 84, [0:7], "VE Table 1","VE Table 2","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID"
338+ dutyFreqTst1 = scalar, U08, 85, "Hz", 2.0, 0.0, 10, 511, 0 ;[PJSC v1.10]
339+ dutyFreqTst2 = scalar, U08, 86, "Hz", 2.0, 0.0, 10, 511, 0 ;[PJSC v1.10]
340+ dutyFreqTst3 = scalar, U08, 87, "Hz", 2.0, 0.0, 10, 511, 0 ;[PJSC v1.10]
341+ dutyFreqTst4 = scalar, U08, 88, "Hz", 2.0, 0.0, 10, 511, 0 ;[PJSC v1.10]
342+ dutyRatioTst1 = scalar, U08, 89, "%", 1.0, 0.0, 0.0, 100.0, 0 ;[PJSC v1.10]
343+ dutyRatioTst2 = scalar, U08, 90, "%", 1.0, 0.0, 0.0, 100.0, 0 ;[PJSC v1.10]
344+ dutyRatioTst3 = scalar, U08, 91, "%", 1.0, 0.0, 0.0, 100.0, 0 ;[PJSC v1.10]
345+ dutyRatioTst4 = scalar, U08, 92, "%", 1.0, 0.0, 0.0, 100.0, 0 ;[PJSC v1.10]
346+ testop_fp = bits, U08, 93, [0:0], "Off", "On"
347+ testop_inj = bits, U08, 93, [1:2], "Off", "One", "INVALID", "All"
348+ testop_coil = bits, U08, 93, [3:4], "Off", "One", "INVALID", "INVALID"
349+ testsel_inj = bits, U08, 93, [5:6], "Inj1", "Inj2", "Inj3", "Inj4"
350+ testsel_coil = bits, U08, 93, [7:7], "CoilA", "CoilB"
351+ testint = scalar, U16, 94, "ms", 0.01, 0.00, 0, 655.35, 1
352+ testrpm = scalar, U16, 94, "RPM", 1.0, { 60000/testint }, 0, 60000, 0
353+ testpw = scalar, U16, 96, "ms", 0.01, 0.00, 0, 655.35, 1 ; * ( 1 byte)
354+ testinjcnt = scalar, U16, 98, "", 1, 0, 0, 65535, 0, noLocalUpdate
355+ muxout1selection = bits, U08, 100, [0:3], "Disable", "IDLE control", "Thermo Fan control", "Launch control", "Fuel pump control", "Boost control", "VVT control", "Tach output", "INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID"
356+ muxout2selection = bits, U08, 100, [4:7], "Disable", "IDLE control", "Thermo Fan control", "Launch control", "Fuel pump control", "Boost control", "VVT control", "Tach output", "INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID"
357+ unused2-100 = array, U08, 101, [27], "%", 1.0, 0.0, 0.0, 255, 0 ;[PJSC v1.10]
358+
359+
360+;Page 2 is the fuel map and axis bins only
361+page = 2
362+ ; name = bits, type, offset, bits
363+ ; name = array, type, offset, shape, units, scale, translate, lo, hi, digits
364+ ; name = scalar, type, offset, units, scale, translate, lo, hi, digits
365+ veTable = array, U08, 0, [16x16],"%", 1.0, 0.0, 0.0, 255.0, 0
366+ rpmBins = array, U08, 256, [ 16], "RPM", 100.0, 0.0, 100.0, 25500.0, 0
367+ fuelLoadBins = array, U08, 272, [ 16], { bitStringValue(algorithmUnits , algorithm) }, 2.0, 0.0, 0.0, {fuelLoadMax}, 0
368+ ;fuelLoadBins = array, U08, 272, [ 16], { bitStringValue(algorithmUnits , algorithm) }, 2.0, 0.0, 0.0, { arrayValue(rpmBins , algorithm) }, 0
369+
365370 ;--------------------------------------------------
366371 ;Start Ignition table (Page 3)
367372 ;--------------------------------------------------
@@ -368,7 +373,6 @@
368373 page = 3
369374 advTable1 = array, U08, 0,[16x16], "deg", 1.0, -40, -40, 215.0, 0
370375 rpmBins2 = array, U08, 256,[ 16], "RPM", 100.0, 0.0, 100, 25500, 0
371- ;ignLoadBins= array, U08, 272, [ 16], { bitStringValue(algorithmUnits , ignAlgorithm) }, 2.0, 0.0, 0.0, {ignLoadMax}, 0
372376 mapBins1= array, U08, 272, [ 16], { bitStringValue(algorithmUnits , ignAlgorithm) }, 2.0, 0.0, 0.0, {ignLoadMax}, 0 ; This name has to be used in order for the table to show up in MLVs table. I can't find the regexs that make this work :(
373377
374378 ;--------------------------------------------------
@@ -588,7 +592,7 @@
588592 ; Begin fan control vairables
589593 fanInv = bits, U08, 120, [0:0], "No", "Yes"
590594 fanEnable = bits, U08, 120, [1:1], "Off", "On/Off"
591- fanPin = bits , U08, 120, [2:7], "Board Default", "INVALID", "INVALID", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "21", "22", "23", "24", "25", "26", "27", "28", "29", "30", "31", "32", "33", "34", "35", "36", "37", "38", "39", "40", "41", "42", "43", "44", "45", "46", "47", "48", "49", "50", "51", "52", "53", "54", "A8", "A9", "A10", "A11", "A12", "A13", "A14", "A15", "INVALID"
595+ fanPin = bits, U08, 120, [2:7], "Board Default", "INVALID", "INVALID", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "21", "22", "23", "24", "25", "26", "27", "28", "29", "30", "31", "32", "33", "34", "35", "36", "37", "38", "39", "40", "41", "42", "43", "44", "45", "46", "47", "48", "49", "50", "51", "52", "53", "54", "A8", "A9", "A10", "A11", "A12", "A13", "A14", "A15", "INVALID"
592596 #if CELSIUS
593597 fanSP = scalar, U08, 121, "C", 1.0, -40, -40, 215.0, 0
594598 fanHyster = scalar, U08, 122, "C", 1.0, 0.0, 0.0, 40, 0
@@ -908,7 +912,9 @@
908912 ;unused10_150 = scalar, U08, 150, "", 1, 0, 0, 255, 0
909913 ;unused10_151 = scalar, U08, 151, "", 1, 0, 0, 255, 0
910914 ;unused10_152 = scalar, U08, 152, "", 1, 0, 0, 255, 0
911- unused10_153 = scalar, U08, 153, "", 1, 0, 0, 255, 0
915+ ;unused10_153 = scalar, U08, 153, "", 1, 0, 0, 255, 0
916+ iacStepperInv = bits, U08, 153, [0:0], "No", "Yes"
917+
912918 unused10_154 = scalar, U08, 154, "", 1, 0, 0, 255, 0
913919 unused10_155 = scalar, U08, 155, "", 1, 0, 0, 255, 0
914920 unused10_156 = scalar, U08, 156, "", 1, 0, 0, 255, 0
@@ -1111,7 +1117,7 @@
11111117 requiresPowerCycle = caninput_sel0b
11121118 requiresPowerCycle = caninput_sel1a
11131119 requiresPowerCycle = caninput_sel1b
1114- requiresPowerCycle = caninput_sel2a
1120+ requiresPowerCycle = caninput_sel2a
11151121 requiresPowerCycle = caninput_sel2b
11161122 requiresPowerCycle = caninput_sel3a
11171123 requiresPowerCycle = caninput_sel3b
@@ -1337,9 +1343,9 @@
13371343 ;[PJSC] subMenu = flexFueling, "Flex Fuel", 2
13381344 ;[PJSC] subMenu = veTableDialog, "VE Table", 0
13391345 ;[PJSC] subMenu = sparkTbl, "Spark Table", 2
1340- subMenu = veMapSelectDialog, "VE Table select" ;[PJSC]
1341- subMenu = veTable1Dialog, "&VE Table 1", 0 ; V
1342- subMenu = veTable2Dialog, "&VE Table 2", 0, { multiVEmapEnabled <= 1 } ;[PJSC]
1346+ subMenu = veMapSelectDialog, "VE Table select" ;[PJSC]
1347+ subMenu = veTable1Dialog, "&VE Table 1", 0 ; V
1348+ subMenu = veTable2Dialog, "&VE Table 2", 0, { multiVEmapEnabled <= 1 } ;[PJSC]
13431349 subMenu = afrTable1Tbl, "AFR Table", 5
13441350 subMenu = std_separator
13451351 subMenu = inj_trimad, "Sequential fuel trim", 9
@@ -1436,8 +1442,8 @@
14361442 menuDialog = main
14371443 menu = "Hardware Testing"
14381444 ;[PJSC v1.10] subMenu = outputtest1, "Test Output Hardware"
1439- subMenu = outputtest1, "Output Test Mode - PWM" ;[PJSC v1.10]
1440- subMenu = outputtest2, "Output Test Mode - Pulse" ;[PJSC v1.10]
1445+ subMenu = outputtest1, "Output Test Mode - PWM" ;[PJSC v1.10]
1446+ subMenu = outputtest2, "Output Test Mode - Pulse" ;[PJSC v1.10]
14411447 #endif
14421448
14431449 menu = "Help"
@@ -1492,6 +1498,7 @@
14921498 iacCLmaxDuty= "When using closed loop idle control, this is the maximum duty cycle that the PID loop will allow. Combined with the minimum value, this specifies the working range of your idle valve"
14931499 iacFastTemp = "Below this temperature, the idle output will be high (On). Above this temperature, it will turn off."
14941500 idleUpPolarity = "Normal polarity is a ground switch where an earthed signal activates the Idle Up. The internal pullup will be enabled with Normal polarity. \n Inverted may be used if a 5v signal is used to enable the Idle Up."
1501+ idleUpAdder = "The amount (In either Duty Cycle % or Steps (Depending on the idle control method in use), that the idle control will increase by when Idle Up is active"
14951502
14961503 oddfire2 = "The ATDC angle of channel 2 for oddfire engines. This is relative to the TDC angle of channel 1"
14971504 oddfire3 = "The ATDC angle of channel 3 for oddfire engines. This is relative to the TDC angle of channel 1 (NOT channel 2)"
@@ -1920,18 +1927,21 @@
19201927 panel = veTable2Dialog_north, North ; V
19211928 panel = veTable2Dialog_south, South ;[PJSC]
19221929
1923- dialog = injChars, "Injector Characteristics"
1924- field = "Squirt Device", squirtDeviceType ;[PJSC]
1925- field = "PJSC solenoid freq.", pjscFreq, { squirtDeviceType == 1 } ;[PJSC]
1926- field = "Injector Open Time", injOpen, { squirtDeviceType == 0 } ;[PJSC]
1927- field = "Injector close angle", { squirtDeviceType == 0 } ;[PJSC]
1928- field = "", inj1Ang, { indInjAng == 0 && squirtDeviceType == 0 } ;[PJSC]
1929- field = "Individual channel setting", indInjAng, { squirtDeviceType == 0 } ;[PJSC]
1930- field = "Channel 1", inj1Ang, { indInjAng && squirtDeviceType == 0 } ;[PJSC]
1931- field = "Channel 2", inj2Ang, { nCylinders > 1 && indInjAng && squirtDeviceType == 0 } ;[PJSC]
1932- field = "Channel 3", inj3Ang, { indInjAng && (nCylinders > 4 || nCylinders == 3 || ((nCylinders == 4) && (injLayout == 3))) && squirtDeviceType == 0 } ;[PJSC]
1933- field = "Channel 4", inj4Ang, { indInjAng && (nCylinders > 6 || ((nCylinders == 4) && (injLayout == 3))) && squirtDeviceType == 0 } ;[PJSC]
1934- field = "Injector Duty Limit", dutyLim, { squirtDeviceType == 0 } ;[PJSC]
1930+ dialog = injChars, "Injector Characteristics" ;[PJSC]
1931+ field = "Squirt Device", squirtDeviceType ; |
1932+ field = "PJSC solenoid freq.", pjscFreq, { squirtDeviceType == 1 } ; |
1933+ field = "Injector Open Time", injOpen, { squirtDeviceType == 0 } ; |
1934+ field = "Injector close angle", { squirtDeviceType == 0 } ; |
1935+ field = "", inj1Ang, { indInjAng == 0 && squirtDeviceType == 0 } ; |
1936+ field = "Individual channel setting", indInjAng, { squirtDeviceType == 0 } ; |
1937+ field = "Channel 1", inj1Ang, { indInjAng && squirtDeviceType == 0 } ; |
1938+ field = "Channel 2", inj2Ang, { nCylinders > 1 && indInjAng && squirtDeviceType == 0 } ; |
1939+ field = "Channel 3", inj3Ang, { indInjAng && (nCylinders > 4 || nCylinders == 3 || ((nCylinders == 4) && (injLayout == 3))) && squirtDeviceType == 0 } ; |
1940+ field = "Channel 4", inj4Ang, { indInjAng && (nCylinders > 6 || ((nCylinders == 4) && (injLayout == 3))) && squirtDeviceType == 0 } ; |
1941+ field = "Injector Duty Limit", dutyLim, { squirtDeviceType == 0 } ; V
1942+ panel = injector_voltage_curve ;[PJSC]
1943+
1944+;[PJSC] dialog = injChars, "Injector Characteristics"
19351945 ;[PJSC] field = "Injector Open Time", injOpen
19361946 ;[PJSC] field = "Injector close angle"
19371947 ;[PJSC] field = "", inj1Ang, { indInjAng == 0 }
@@ -1941,7 +1951,7 @@
19411951 ;[PJSC] field = "Channel 3", inj3Ang, { indInjAng && (nCylinders > 4 || nCylinders == 3 || ((nCylinders == 4) && (injLayout == 3))) }
19421952 ;[PJSC] field = "Channel 4", inj4Ang, { indInjAng && (nCylinders > 6 || ((nCylinders == 4) && (injLayout == 3))) }
19431953 ;[PJSC] field = "Injector Duty Limit", dutyLim
1944- panel = injector_voltage_curve
1954+;[PJSC] panel = injector_voltage_curve
19451955
19461956 dialog = egoControl, ""
19471957 topicHelp = "http://speeduino.com/wiki/index.php/AFR/O2"
@@ -1962,6 +1972,7 @@
19621972
19631973 dialog = fanSettings,"Fan Settings",7
19641974 field = "Fan Mode", fanEnable
1975+ field = "Fan when off", fanWhenOff, { fanEnable }
19651976 field = "Fan output pin", fanPin, { fanEnable }
19661977 field = "Fan Output Inverted", fanInv , { fanEnable }
19671978 field = "Fan temperature SP", fanSP, { fanEnable }
@@ -1971,6 +1982,7 @@
19711982 field = "Step time (ms)", iacStepTime, { iacAlgorithm == 4 || iacAlgorithm == 5 }
19721983 field = "Home steps", iacStepHome, { iacAlgorithm == 4 || iacAlgorithm == 5 }
19731984 field = "Minimum Steps", iacStepHyster, { iacAlgorithm == 4 || iacAlgorithm == 5 }
1985+ field = "Stepper Inverted", iacStepperInv, { iacAlgorithm == 4 || iacAlgorithm == 5 }
19741986
19751987 dialog = pwm_idle, "PWM Idle"
19761988 field = "Number of outputs", iacChannels, { iacAlgorithm == 2 || iacAlgorithm == 3 }
@@ -1996,7 +2008,8 @@
19962008 dialog = idleUpSettings, "Idle Up Settings"
19972009 field = "Idle Up Enabled", idleUpEnabled
19982010 field = "Idle Up Pin", idleUpPin, { idleUpEnabled }
1999- field = "Idle Up Polarity", idleUpPolarity, { idleUpEnabled }
2011+ field = "Idle Up Pin Polarity", idleUpPolarity, { idleUpEnabled }
2012+ field = "Idle Up Amount", idleUpAdder, { idleUpEnabled }
20002013
20012014 dialog = fuelpump, "Fuel pump"
20022015 field = "Fuel pump pin", fuelPumpPin
@@ -2058,7 +2071,7 @@
20582071 ;[PJSC] field = "Cranking advance Angle", CrankAng
20592072 ;[PJSC] field = "Spark Outputs triggers", IgInv
20602073 ;[PJSC] field = ""
2061-;[PJSC] field = "Enabled Fixed/Locked timing", fixAngEnable
2074+;[PJSC] field = "Enabled Fixed/Locked timing", fixAngEnable
20622075 ;[PJSC] field = "Fixed Angle", FixAng, { fixAngEnable }
20632076 ;[PJSC] field = "#Note: During cranking the fixed/locked timing angle is overriden by the Cranking advance angle value above"
20642077 ;[PJSC] field = ""
@@ -2152,8 +2165,8 @@
21522165 field = "Nitrous is armed when pin is", n2o_pin_polarity,{ n2o_enable > 0 }
21532166 field = "Minimum CLT", n2o_minCLT, { n2o_enable > 0 }
21542167 field = "Minimum TPS", n2o_minTPS, { n2o_enable > 0 }
2155- field = "Maximum MAP", n2o_maxMAP, { n2o_enable > 0 }
2156- field = "Leanest AFR", n2o_maxAFR, { n2o_enable > 0 }
2168+ field = "Maximum MAP", n2o_maxMAP, { n2o_enable > 0 }
2169+ field = "Leanest AFR", n2o_maxAFR, { n2o_enable > 0 }
21572170
21582171 dialog = NitrousControl, "Nitrous"
21592172 panel = NitrousMain, North
@@ -2401,7 +2414,7 @@
24012414 ;[PJSC] panel = outputtest_spark
24022415 ;panel = outputtest_io2
24032416 panel = outputtest_warningmessage
2404-
2417+
24052418 ;[PJSC v1.10] For test mode - outputs pulse =========================================================================
24062419 dialog = outputTestbuttons1a, "", xAxis
24072420 ;commandButton = "Label Text", command, { Enabled Condition }, optionalFlags
@@ -2461,7 +2474,7 @@
24612474 panel = outputtest_r
24622475
24632476 ;[PJSC v1.10] For test mode - outputs pulse =========================================================================
2464-
2477+
24652478 dialog = Auxin_north
24662479 displayOnlyField = #"Secondary Serial ENABLED", blankfield, {enable_secondarySerial},{enable_secondarySerial}
24672480 displayOnlyField = !"Secondary Serial DISABLED", blankfield, {enable_secondarySerial == 0},{enable_secondarySerial == 0}
@@ -2812,7 +2825,7 @@
28122825 displayOnlyField = "Off 1", blankfield, {},{(caninput_sel1a == 0 && (!enable_secondarySerial && (!enable_intcan || (enable_intcan && intcan_available == 0)))) || (caninput_sel1b == 0 && ((enable_secondarySerial && enable_intcan) || (enable_secondarySerial && !enable_intcan) || (!enable_secondarySerial && enable_intcan)))}
28132826 displayOnlyField = "External Source 1 Via Secondary Serial", blankfield, {},{(caninput_sel1b == 1 && enable_secondarySerial && ((enable_intcan && intcan_available == 0) || !enable_intcan)) || (caninput_sel1b == 1 && enable_secondarySerial && (enable_intcan && intcan_available) && caninput_sel1extsourceb == 0)}
28142827 displayOnlyField = "External Source 1 Via Internal CAN", blankfield, {},{(caninput_sel1b == 1 && enable_secondarySerial && (enable_intcan && intcan_available) && caninput_sel1extsourceb == 1) ||(caninput_sel1b == 1 && !enable_secondarySerial && (enable_intcan && intcan_available) && caninput_sel1extsourcec == 1)}
2815- field = "Local Analog Source 1 Pin No:", Auxin1pina , {}, {(caninput_sel1a == 2 && (!enable_secondarySerial && (!enable_intcan || (enable_intcan && intcan_available == 0)) || (caninput_sel1b == 2 && (enable_secondarySerial || enable_intcan))}
2828+ field = "Local Analog Source 1 Pin No:", Auxin1pina , {}, {(caninput_sel1a == 2 && (!enable_secondarySerial && (!enable_intcan || (enable_intcan && intcan_available == 0)))) || (caninput_sel1b == 2 && (enable_secondarySerial || (enable_intcan && intcan_available == 1 )))}
28162829 field = "Local Digital Source 1 Pin No:", Auxin1pinb , {}, {(caninput_sel1a == 3 && (!enable_secondarySerial && (!enable_intcan || (enable_intcan && intcan_available == 0)))) || (caninput_sel1b == 3 && (enable_secondarySerial || (enable_intcan && intcan_available == 1 )))}
28172830
28182831 displayOnlyField = "Off 2", blankfield, {},{(caninput_sel2a == 0 && (!enable_secondarySerial && !enable_intcan)) || (caninput_sel2b == 0 && (enable_secondarySerial && enable_intcan)) || (caninput_sel2b == 0 && (enable_secondarySerial && !enable_intcan)) || (caninput_sel2b == 0 && (!enable_secondarySerial && enable_intcan))}
@@ -3531,7 +3544,7 @@
35313544 softlimitOn = bits, U08, 31, [3:3]
35323545 boostCutSpark = bits, U08, 31, [4:4]
35333546 error = bits, U08, 31, [5:5]
3534- idle = bits, U08, 31, [6:6]
3547+ idleControlOn = bits, U08, 31, [6:6]
35353548 sync = bits, U08, 31, [7:7]
35363549 rpmDOT = scalar, S16, 32, "rpm/s", 1.000, 0.000
35373550 flex = scalar, U08, 34, "%", 1.000, 0.000
@@ -3580,17 +3593,17 @@
35803593 fuelLoad = scalar, S16, 85, { bitStringValue( algorithmUnits , algorithm ) }, 1.000, 0.000
35813594 ignLoad = scalar, S16, 87, { bitStringValue( algorithmUnits , ignAlgorithm ) }, 1.000, 0.000
35823595 syncLossCounter = scalar, U08, 89, "", 1.000, 0.000
3583- veCurr2 = scalar, U08, 90, "%", 1.000, 0.000 ;[PJSC]Multi VE Map support
3584- valvePosition = scalar, U08, 91, "%", 1.000, 0.000 ;[PJSC]Extend output channel for External Trigger
3585- valvePositionADC = scalar, U08, 92, "ADC", 1.000, 0.000 ;[PJSC]Extend output channel for External Trigger
3586- sparkedAngle = scalar, S16, 93, "deg", 1.000, 0.000 ;[PJSC]Extend output channel for External Trigger
3587- dutyFreq = scalar, U16, 95, "Hz", 1.000, 0.000 ;[PJSC]For capturing duty pulse
3588- dutyRatio = scalar, U16, 97, "%", 1.000, 0.000 ;[PJSC]For capturing duty pulse
3589- dutyFreq2 = scalar, U16, 99, "Hz", 1.000, 0.000 ;[PJSC]For capturing duty pulse
3590- dutyRatio2 = scalar, U16, 101, "%", 1.000, 0.000 ;[PJSC]For capturing duty pulse
3591- testCnt = scalar, U16, 103, "", 1.000, 0.000 ;[PJSC v1.10]For test mode
3592- afr2 = scalar, U08, 105, "O2", 0.100, 0.000 ;[PJSC v1.10]
3593- fuelLoad2 = scalar, S16, 106, { bitStringValue( algorithmUnits2 , algorithm2 ) }, 1.000, 0.000
3596+ veCurr2 = scalar, U08, 90, "%", 1.000, 0.000 ;[PJSC]Multi VE Map support
3597+ valvePosition = scalar, U08, 91, "%", 1.000, 0.000 ;[PJSC]Extend output channel for External Trigger
3598+ valvePositionADC = scalar, U08, 92, "ADC", 1.000, 0.000 ;[PJSC]Extend output channel for External Trigger
3599+ sparkedAngle = scalar, S16, 93, "deg", 1.000, 0.000 ;[PJSC]Extend output channel for External Trigger
3600+ dutyFreq = scalar, U16, 95, "Hz", 1.000, 0.000 ;[PJSC]For capturing duty pulse
3601+ dutyRatio = scalar, U16, 97, "%", 1.000, 0.000 ;[PJSC]For capturing duty pulse
3602+ dutyFreq2 = scalar, U16, 99, "Hz", 1.000, 0.000 ;[PJSC]For capturing duty pulse
3603+ dutyRatio2 = scalar, U16, 101, "%", 1.000, 0.000 ;[PJSC]For capturing duty pulse
3604+ testCnt = scalar, U16, 103, "", 1.000, 0.000 ;[PJSC v1.10]For test mode
3605+ afr2 = scalar, U08, 105, "O2", 0.100, 0.000 ;[PJSC v1.10]
3606+ fuelLoad2 = scalar, S16, 106, { bitStringValue( algorithmUnits2 , algorithm2 ) }, 1.000, 0.000 ;[PJSC v1.10]For dual fuel load
35943607
35953608
35963609 #if CELSIUS
@@ -3722,16 +3735,16 @@
37223735 startCommand = "H"
37233736 stopCommand = "h"
37243737 dataReadCommand = "T" ; Basic TS command format
3725- dataReadTimeout = 15000 ; time in ms
3726- dataReadyCondition = { toothLog1Ready }
3738+ dataReadTimeout = 5000 ; time in ms
3739+ dataReadyCondition = { toothLog1Ready == 1 }
37273740 ;dataLength = 256 ; in bytes, including headers, footers and data (not used)
3728- dataLength = 128 ; in bytes, including headers, footers and data (not used)
3741+ ;dataLength = 128 ; in bytes, including headers, footers and data (not used)
37293742
37303743 ;recordDef = headerLen. footerLen, recordLen
3731- recordDef = 0, 0, 2; in bytes, the recordLen is for each record, currently limited to 4 bytes
3744+ recordDef = 0, 0, 4; in bytes, the recordLen is for each record, currently limited to 4 bytes
37323745
37333746 ;recordField = Name, HeaderName, startBit, bitCount, scale, units, updateCondition
3734- recordField = toothTime, "ToothTime", 0, 16, 1.0, "uS"
3747+ recordField = toothTime, "ToothTime", 0, 32, 1.0, "uS"
37353748
37363749 loggerDef = compositeLogger, "Composite Logger", composite
37373750 startCommand = "J"
@@ -3738,7 +3751,7 @@
37383751 stopCommand = "j"
37393752 dataReadCommand = "T" ; Basic TS command format. Note that this is shared with the composite logger. Firmware detects which log is currently running
37403753 dataReadTimeout = 5000 ; time in ms
3741- dataReadyCondition = { toothLog1Ready }
3754+ dataReadyCondition = { toothLog1Ready == 1 }
37423755 ;dataLength = 256 ; in bytes, including headers, footers and data (not used)
37433756 ;dataLength = 320 ; in bytes, including headers, footers and data (not used)
37443757
@@ -3750,10 +3763,10 @@
37503763 recordField = secLevel, "SecLevel", 1, 1, 1.0, "Flag"
37513764 recordField = trigger, "Trigger", 2, 1, 1.0, "Flag"
37523765 recordField = sync, "Sync", 3, 1, 1.0, "Flag"
3753- recordField = refTime, "RefTime", 8, 32, 0.001, "ms", hidden
3766+ recordField = refTime, "RefTime", 8, 32, 0.001, "ms"
37543767
37553768 ; hidden calcField serves as intermediate variable
3756- calcField = maxTime, "MaxTime", "ms", { maxValue(refTime) }, hidden
3769+ calcField = maxTime, "MaxTime", "ms", { maxValue(refTime) }
37573770
37583771 calcField = toothTime, "ToothTime", "ms", { refTime - pastValue(refTime, 1) }
37593772 ;recordField = time, "Time", 24, 16, 1.0, "ms"
--- branches/Ver1.00_base/speeduino/auxiliaries.h (revision 32)
+++ branches/Ver1.00_base/speeduino/auxiliaries.h (revision 33)
@@ -1,6 +1,8 @@
11 #ifndef AUX_H
22 #define AUX_H
33
4+#include BOARD_H //Note that this is not a real file, it is defined in globals.h.
5+
46 void initialiseAuxPWM();
57 void boostControl();
68 void boostDisable();
@@ -10,55 +12,6 @@
1012 void nitrousControl();
1113 void fanControl();
1214
13-#if defined(CORE_AVR)
14- #define ENABLE_BOOST_TIMER() TIMSK1 |= (1 << OCIE1A)
15- #define DISABLE_BOOST_TIMER() TIMSK1 &= ~(1 << OCIE1A)
16- #define ENABLE_VVT_TIMER() TIMSK1 |= (1 << OCIE1B)
17- #define DISABLE_VVT_TIMER() TIMSK1 &= ~(1 << OCIE1B)
18-
19- #define BOOST_TIMER_COMPARE OCR1A
20- #define BOOST_TIMER_COUNTER TCNT1
21- #define VVT_TIMER_COMPARE OCR1B
22- #define VVT_TIMER_COUNTER TCNT1
23-
24-#elif defined(CORE_TEENSY)
25- #define ENABLE_BOOST_TIMER() FTM1_C0SC |= FTM_CSC_CHIE
26- #define DISABLE_BOOST_TIMER() FTM1_C0SC &= ~FTM_CSC_CHIE
27-
28- #define ENABLE_VVT_TIMER() FTM1_C1SC |= FTM_CSC_CHIE
29- #define DISABLE_VVT_TIMER() FTM1_C1SC &= ~FTM_CSC_CHIE
30-
31- #define BOOST_TIMER_COMPARE FTM1_C0V
32- #define BOOST_TIMER_COUNTER FTM1_CNT
33- #define VVT_TIMER_COMPARE FTM1_C1V
34- #define VVT_TIMER_COUNTER FTM1_CNT
35-
36-#elif defined(CORE_STM32)
37- #if defined(ARDUINO_ARCH_STM32) // STM32GENERIC core
38- #define ENABLE_BOOST_TIMER() (TIM1)->CCER |= TIM_CCER_CC2E
39- #define DISABLE_BOOST_TIMER() (TIM1)->CCER &= ~TIM_CCER_CC2E
40-
41- #define ENABLE_VVT_TIMER() (TIM1)->CCER |= TIM_CCER_CC3E
42- #define DISABLE_VVT_TIMER() (TIM1)->CCER &= ~TIM_CCER_CC3E
43-
44- #define BOOST_TIMER_COMPARE (TIM1)->CCR2
45- #define BOOST_TIMER_COUNTER (TIM1)->CNT
46- #define VVT_TIMER_COMPARE (TIM1)->CCR3
47- #define VVT_TIMER_COUNTER (TIM1)->CNT
48- #else //libmaple core aka STM32DUINO
49- #define ENABLE_BOOST_TIMER() (TIMER1->regs).gen->CCER |= TIMER_CCER_CC2E
50- #define DISABLE_BOOST_TIMER() (TIMER1->regs).gen->CCER &= ~TIMER_CCER_CC2E
51-
52- #define ENABLE_VVT_TIMER() (TIMER1->regs).gen->CCER |= TIMER_CCER_CC3E
53- #define DISABLE_VVT_TIMER() (TIMER1->regs).gen->CCER &= ~TIMER_CCER_CC3E
54-
55- #define BOOST_TIMER_COMPARE (TIMER1->regs).gen->CCR2
56- #define BOOST_TIMER_COUNTER (TIMER1->regs).gen->CNT
57- #define VVT_TIMER_COMPARE (TIMER1->regs).gen->CCR3
58- #define VVT_TIMER_COUNTER (TIMER1->regs).gen->CNT
59- #endif
60-#endif
61-
6215 #define BOOST_PIN_LOW() *boost_pin_port &= ~(boost_pin_mask)
6316 #define BOOST_PIN_HIGH() *boost_pin_port |= (boost_pin_mask)
6417 #define VVT_PIN_LOW() *vvt_pin_port &= ~(vvt_pin_mask)
@@ -71,17 +24,17 @@
7124 #define N2O_STAGE2_PIN_HIGH() *n2o_stage2_pin_port |= (n2o_stage2_pin_mask)
7225 #define READ_N2O_ARM_PIN() ((*n2o_arming_pin_port & n2o_arming_pin_mask) ? true : false)
7326
74-volatile byte *boost_pin_port;
27+volatile PORT_TYPE *boost_pin_port;
7528 volatile byte boost_pin_mask;
76-volatile byte *vvt_pin_port;
29+volatile PORT_TYPE *vvt_pin_port;
7730 volatile byte vvt_pin_mask;
78-volatile byte *fan_pin_port;
31+volatile PORT_TYPE *fan_pin_port;
7932 volatile byte fan_pin_mask;
80-volatile byte *n2o_stage1_pin_port;
33+volatile PORT_TYPE *n2o_stage1_pin_port;
8134 volatile byte n2o_stage1_pin_mask;
82-volatile byte *n2o_stage2_pin_port;
35+volatile PORT_TYPE *n2o_stage2_pin_port;
8336 volatile byte n2o_stage2_pin_mask;
84-volatile byte *n2o_arming_pin_port;
37+volatile PORT_TYPE *n2o_arming_pin_port;
8538 volatile byte n2o_arming_pin_mask;
8639
8740 volatile bool boost_pwm_state;
@@ -98,10 +51,8 @@
9851 unsigned int vvt_pwm_max_count; //Used for variable PWM frequency
9952 volatile unsigned int vvt_pwm_cur_value;
10053 long vvt_pwm_target_value;
101-#if defined (CORE_TEENSY) || defined(CORE_STM32)
102- static inline void boostInterrupt();
103- static inline void vvtInterrupt();
104-#endif
54+static inline void boostInterrupt();
55+static inline void vvtInterrupt();
10556
10657
10758 #endif
--- branches/Ver1.00_base/speeduino/board_avr2560.h (nonexistent)
+++ branches/Ver1.00_base/speeduino/board_avr2560.h (revision 33)
@@ -0,0 +1,143 @@
1+#ifndef AVR2560_H
2+#define AVR2560_H
3+#if defined(CORE_AVR)
4+
5+#include <avr/interrupt.h>
6+#include <avr/io.h>
7+
8+/*
9+***********************************************************************************************************
10+* General
11+*/
12+ #define PORT_TYPE uint8_t //Size of the port variables (Eg inj1_pin_port).
13+ void initBoard();
14+ uint16_t freeRam();
15+
16+ #if defined(TIMER5_MICROS)
17+ //#define micros() (((timer5_overflow_count << 16) + TCNT5) * 4) //Fast version of micros() that uses the 4uS tick of timer5. See timers.ino for the overflow ISR of timer5
18+ #define millis() (ms_counter) //Replaces the standard millis() function with this macro. It is both faster and more accurate. See timers.ino for its counter increment.
19+ static inline unsigned long micros_safe(); //A version of micros() that is interrupt safe
20+ #else
21+ #define micros_safe() micros() //If the timer5 method is not used, the micros_safe() macro is simply an alias for the normal micros()
22+ #endif
23+
24+ //Mega 2561 MCU does not have a serial3 available.
25+ #if not defined(__AVR_ATmega2561__)
26+ #define USE_SERIAL3
27+ #endif
28+
29+/*
30+***********************************************************************************************************
31+* Schedules
32+*/
33+ //Refer to http://svn.savannah.nongnu.org/viewvc/trunk/avr-libc/include/avr/iomxx0_1.h?root=avr-libc&view=markup
34+ #define FUEL1_COUNTER TCNT3
35+ #define FUEL2_COUNTER TCNT3
36+ #define FUEL3_COUNTER TCNT3
37+ #define FUEL4_COUNTER TCNT4
38+ #define FUEL5_COUNTER TCNT1
39+ #define FUEL6_COUNTER TCNT4 //Replaces ignition 4
40+ #define FUEL7_COUNTER TCNT5 //Replaces ignition 3
41+ #define FUEL8_COUNTER TCNT5 //Replaces ignition 2
42+
43+ #define IGN1_COUNTER TCNT5
44+ #define IGN2_COUNTER TCNT5
45+ #define IGN3_COUNTER TCNT5
46+ #define IGN4_COUNTER TCNT4
47+ #define IGN5_COUNTER TCNT1
48+ #define IGN6_COUNTER TCNT4 //Replaces injector 4
49+ #define IGN7_COUNTER TCNT3 //Replaces injector 3
50+ #define IGN8_COUNTER TCNT3 //Replaces injector 2
51+
52+ #define FUEL1_COMPARE OCR3A
53+ #define FUEL2_COMPARE OCR3B
54+ #define FUEL3_COMPARE OCR3C
55+ #define FUEL4_COMPARE OCR4B
56+ #define FUEL5_COMPARE OCR1C //Shared with FUEL1
57+ #define FUEL6_COMPARE OCR4A //Replaces ignition4
58+ #define FUEL7_COMPARE OCR5C //Replaces ignition3
59+ #define FUEL8_COMPARE OCR5B //Replaces ignition2
60+
61+ #define IGN1_COMPARE OCR5A
62+ #define IGN2_COMPARE OCR5B
63+ #define IGN3_COMPARE OCR5C
64+ #define IGN4_COMPARE OCR4A
65+ #define IGN5_COMPARE OCR1C
66+ #define IGN6_COMPARE OCR4B //Replaces injector 4
67+ #define IGN7_COMPARE OCR3C //Replaces injector 3
68+ #define IGN8_COMPARE OCR3B //Replaces injector 2
69+
70+ #define FUEL1_TIMER_ENABLE() TIMSK3 |= (1 << OCIE3A) //Turn on the A compare unit (ie turn on the interrupt)
71+ #define FUEL2_TIMER_ENABLE() TIMSK3 |= (1 << OCIE3B) //Turn on the B compare unit (ie turn on the interrupt)
72+ #define FUEL3_TIMER_ENABLE() TIMSK3 |= (1 << OCIE3C) //Turn on the C compare unit (ie turn on the interrupt)
73+ #define FUEL4_TIMER_ENABLE() TIMSK4 |= (1 << OCIE4B) //Turn on the B compare unit (ie turn on the interrupt)
74+ #define FUEL5_TIMER_ENABLE() TIMSK1 |= (1 << OCIE1C) //
75+ #define FUEL6_TIMER_ENABLE() TIMSK4 |= (1 << OCIE4A) //
76+ #define FUEL7_TIMER_ENABLE() TIMSK5 |= (1 << OCIE5C) //
77+ #define FUEL8_TIMER_ENABLE() TIMSK5 |= (1 << OCIE5B) //
78+
79+ #define FUEL1_TIMER_DISABLE() TIMSK3 &= ~(1 << OCIE3A); //Turn off this output compare unit
80+ #define FUEL2_TIMER_DISABLE() TIMSK3 &= ~(1 << OCIE3B); //Turn off this output compare unit
81+ #define FUEL3_TIMER_DISABLE() TIMSK3 &= ~(1 << OCIE3C); //Turn off this output compare unit
82+ #define FUEL4_TIMER_DISABLE() TIMSK4 &= ~(1 << OCIE4B); //Turn off this output compare unit
83+ #define FUEL5_TIMER_DISABLE() TIMSK1 &= ~(1 << OCIE1C); //
84+ #define FUEL6_TIMER_DISABLE() TIMSK4 &= ~(1 << OCIE4A); //
85+ #define FUEL7_TIMER_DISABLE() TIMSK5 &= ~(1 << OCIE5C); //
86+ #define FUEL8_TIMER_DISABLE() TIMSK5 &= ~(1 << OCIE5B); //
87+
88+ #define IGN1_TIMER_ENABLE() TIMSK5 |= (1 << OCIE5A) //Turn on the A compare unit (ie turn on the interrupt)
89+ #define IGN2_TIMER_ENABLE() TIMSK5 |= (1 << OCIE5B) //Turn on the B compare unit (ie turn on the interrupt)
90+ #define IGN3_TIMER_ENABLE() TIMSK5 |= (1 << OCIE5C) //Turn on the C compare unit (ie turn on the interrupt)
91+ #define IGN4_TIMER_ENABLE() TIMSK4 |= (1 << OCIE4A) //Turn on the A compare unit (ie turn on the interrupt)
92+ #define IGN5_TIMER_ENABLE() TIMSK1 |= (1 << OCIE1C) //Turn on the A compare unit (ie turn on the interrupt)
93+ #define IGN6_TIMER_ENABLE() TIMSK4 |= (1 << OCIE4B) //Replaces injector 4
94+ #define IGN7_TIMER_ENABLE() TIMSK3 |= (1 << OCIE3C) //Replaces injector 3
95+ #define IGN8_TIMER_ENABLE() TIMSK3 |= (1 << OCIE3B) //Replaces injector 2
96+
97+ #define IGN1_TIMER_DISABLE() TIMSK5 &= ~(1 << OCIE5A) //Turn off this output compare unit
98+ #define IGN2_TIMER_DISABLE() TIMSK5 &= ~(1 << OCIE5B) //Turn off this output compare unit
99+ #define IGN3_TIMER_DISABLE() TIMSK5 &= ~(1 << OCIE5C) //Turn off this output compare unit
100+ #define IGN4_TIMER_DISABLE() TIMSK4 &= ~(1 << OCIE4A) //Turn off this output compare unit
101+ #define IGN5_TIMER_DISABLE() TIMSK1 &= ~(1 << OCIE1C) //Turn off this output compare unit
102+ #define IGN6_TIMER_DISABLE() TIMSK4 &= ~(1 << OCIE4B) //Replaces injector 4
103+ #define IGN7_TIMER_DISABLE() TIMSK3 &= ~(1 << OCIE3C) //Replaces injector 3
104+ #define IGN8_TIMER_DISABLE() TIMSK3 &= ~(1 << OCIE3B) //Replaces injector 2
105+
106+ #define MAX_TIMER_PERIOD 262140UL //The longest period of time (in uS) that the timer can permit (IN this case it is 65535 * 4, as each timer tick is 4uS)
107+ #define MAX_TIMER_PERIOD_SLOW 1048560UL //The longest period of time (in uS) that the timer can permit (IN this case it is 65535 * 16, as each timer tick is 16uS)
108+ #define uS_TO_TIMER_COMPARE(uS1) (uS1 >> 2) //Converts a given number of uS into the required number of timer ticks until that time has passed
109+ //This is a hack until I make all the AVR timers run at the same speed
110+ #define uS_TO_TIMER_COMPARE_SLOW(uS1) (uS1 >> 4)
111+
112+/*
113+***********************************************************************************************************
114+* Auxilliaries
115+*/
116+ #define ENABLE_BOOST_TIMER() TIMSK1 |= (1 << OCIE1A)
117+ #define DISABLE_BOOST_TIMER() TIMSK1 &= ~(1 << OCIE1A)
118+ #define ENABLE_VVT_TIMER() TIMSK1 |= (1 << OCIE1B)
119+ #define DISABLE_VVT_TIMER() TIMSK1 &= ~(1 << OCIE1B)
120+
121+ #define BOOST_TIMER_COMPARE OCR1A
122+ #define BOOST_TIMER_COUNTER TCNT1
123+ #define VVT_TIMER_COMPARE OCR1B
124+ #define VVT_TIMER_COUNTER TCNT1
125+
126+/*
127+***********************************************************************************************************
128+* Idle
129+*/
130+ #define IDLE_COUNTER TCNT4
131+ #define IDLE_COMPARE OCR4C
132+
133+ #define IDLE_TIMER_ENABLE() TIMSK4 |= (1 << OCIE4C)
134+ #define IDLE_TIMER_DISABLE() TIMSK4 &= ~(1 << OCIE4C)
135+
136+/*
137+***********************************************************************************************************
138+* CAN / Second serial
139+*/
140+
141+
142+#endif //CORE_AVR
143+#endif //AVR2560_H
--- branches/Ver1.00_base/speeduino/board_stm32.h (nonexistent)
+++ branches/Ver1.00_base/speeduino/board_stm32.h (revision 33)
@@ -0,0 +1,295 @@
1+#ifndef STM32_H
2+#define STM32_H
3+#if defined(CORE_STM32)
4+
5+/*
6+***********************************************************************************************************
7+* General
8+*/
9+ #define PORT_TYPE uint8_t
10+ #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()
11+ #define USE_SERIAL3
12+ void initBoard();
13+ uint16_t freeRam();
14+
15+ #if defined(USE_STM32GENERIC)
16+ #define Serial Serial1
17+ #endif
18+
19+ //Much of the below is not correct, but included to allow compilation
20+ //STM32F1/variants/.../board.cpp
21+ #if defined (STM32F4)
22+ #define A0 PA0
23+ #define A1 PA1
24+ #define A2 PA2
25+ #define A3 PA3
26+ #define A4 PA4
27+ #define A5 PA5
28+ #define A6 PA6
29+ #define A7 PA7
30+ #define A8 PB0
31+ #define A9 PB1
32+ #define A10 PC0
33+ #define A11 PC1
34+ #define A12 PC2
35+ #define A13 PC3
36+ #define A14 PC4
37+ #define A15 PC5
38+ #else
39+ #define A0 PB0
40+ #define A1 PA7
41+ #define A2 PA6
42+ #define A3 PA5
43+ #define A4 PA4
44+ #define A5 PA3
45+ #define A6 PA2
46+ #define A7 PA1
47+ #define A8 PA0
48+ //STM32F1 have only 9 12bit adc
49+ #define A9 PB0
50+ #define A10 PA7
51+ #define A11 PA6
52+ #define A12 PA5
53+ #define A13 PA4
54+ #define A14 PA3
55+ #define A15 PA2
56+ #endif
57+
58+
59+/*
60+***********************************************************************************************************
61+* Schedules
62+*/
63+ #define MAX_TIMER_PERIOD 131070 //The longest period of time (in uS) that the timer can permit (IN this case it is 65535 * 2, as each timer tick is 2uS)
64+ #define MAX_TIMER_PERIOD_SLOW 131070 //The longest period of time (in uS) that the timer can permit (IN this case it is 65535 * 2, as each timer tick is 2uS)
65+ #define uS_TO_TIMER_COMPARE(uS) (uS >> 1) //Converts a given number of uS into the required number of timer ticks until that time has passed.
66+ #define uS_TO_TIMER_COMPARE_SLOW(uS) (uS >> 1) //Converts a given number of uS into the required number of timer ticks until that time has passed.
67+ #if defined(ARDUINO_ARCH_STM32) // STM32GENERIC core
68+ #define FUEL1_COUNTER (TIM2)->CNT
69+ #define FUEL2_COUNTER (TIM2)->CNT
70+ #define FUEL3_COUNTER (TIM2)->CNT
71+ #define FUEL4_COUNTER (TIM2)->CNT
72+
73+ #define FUEL1_COMPARE (TIM2)->CCR1
74+ #define FUEL2_COMPARE (TIM2)->CCR2
75+ #define FUEL3_COMPARE (TIM2)->CCR3
76+ #define FUEL4_COMPARE (TIM2)->CCR4
77+
78+ #define IGN1_COUNTER (TIM3)->CNT
79+ #define IGN2_COUNTER (TIM3)->CNT
80+ #define IGN3_COUNTER (TIM3)->CNT
81+ #define IGN4_COUNTER (TIM3)->CNT
82+
83+ #define IGN1_COMPARE (TIM3)->CCR1
84+ #define IGN2_COMPARE (TIM3)->CCR2
85+ #define IGN3_COMPARE (TIM3)->CCR3
86+ #define IGN4_COMPARE (TIM3)->CCR4
87+
88+ #ifndef SMALL_FLASH_MODE
89+ #define FUEL5_COUNTER (TIM5)->CNT
90+ #define FUEL6_COUNTER (TIM5)->CNT
91+ #define FUEL7_COUNTER (TIM5)->CNT
92+ #define FUEL8_COUNTER (TIM5)->CNT
93+
94+ #define FUEL5_COMPARE (TIM5)->CCR1
95+ #define FUEL6_COMPARE (TIM5)->CCR2
96+ #define FUEL7_COMPARE (TIM5)->CCR3
97+ #define FUEL8_COMPARE (TIM5)->CCR4
98+
99+ #define IGN5_COUNTER (TIM4)->CNT
100+ #define IGN6_COUNTER (TIM4)->CNT
101+ #define IGN7_COUNTER (TIM4)->CNT
102+ #define IGN8_COUNTER (TIM4)->CNT
103+
104+ #define IGN5_COMPARE (TIM4)->CCR1
105+ #define IGN6_COMPARE (TIM4)->CCR2
106+ #define IGN7_COMPARE (TIM4)->CCR3
107+ #define IGN8_COMPARE (TIM4)->CCR4
108+ #endif
109+ //https://github.com/rogerclarkmelbourne/Arduino_STM32/blob/754bc2969921f1ef262bd69e7faca80b19db7524/STM32F1/system/libmaple/include/libmaple/timer.h#L444
110+ #define FUEL1_TIMER_ENABLE() (TIM2)->CCER |= TIM_CCER_CC1E
111+ #define FUEL2_TIMER_ENABLE() (TIM2)->CCER |= TIM_CCER_CC2E
112+ #define FUEL3_TIMER_ENABLE() (TIM2)->CCER |= TIM_CCER_CC3E
113+ #define FUEL4_TIMER_ENABLE() (TIM2)->CCER |= TIM_CCER_CC4E
114+
115+ #define FUEL1_TIMER_DISABLE() (TIM2)->CCER &= ~TIM_CCER_CC1E
116+ #define FUEL2_TIMER_DISABLE() (TIM2)->CCER &= ~TIM_CCER_CC2E
117+ #define FUEL3_TIMER_DISABLE() (TIM2)->CCER &= ~TIM_CCER_CC3E
118+ #define FUEL4_TIMER_DISABLE() (TIM2)->CCER &= ~TIM_CCER_CC4E
119+
120+ #define IGN1_TIMER_ENABLE() (TIM3)->CCER |= TIM_CCER_CC1E
121+ #define IGN2_TIMER_ENABLE() (TIM3)->CCER |= TIM_CCER_CC2E
122+ #define IGN3_TIMER_ENABLE() (TIM3)->CCER |= TIM_CCER_CC3E
123+ #define IGN4_TIMER_ENABLE() (TIM3)->CCER |= TIM_CCER_CC4E
124+
125+ #define IGN1_TIMER_DISABLE() (TIM3)->CCER &= ~TIM_CCER_CC1E
126+ #define IGN2_TIMER_DISABLE() (TIM3)->CCER &= ~TIM_CCER_CC2E
127+ #define IGN3_TIMER_DISABLE() (TIM3)->CCER &= ~TIM_CCER_CC3E
128+ #define IGN4_TIMER_DISABLE() (TIM3)->CCER &= ~TIM_CCER_CC4E
129+
130+ #ifndef SMALL_FLASH_MODE
131+ #define FUEL5_TIMER_ENABLE() (TIM5)->CCER |= TIM_CCER_CC1E
132+ #define FUEL6_TIMER_ENABLE() (TIM5)->CCER |= TIM_CCER_CC2E
133+ #define FUEL7_TIMER_ENABLE() (TIM5)->CCER |= TIM_CCER_CC3E
134+ #define FUEL8_TIMER_ENABLE() (TIM5)->CCER |= TIM_CCER_CC4E
135+
136+ #define FUEL5_TIMER_DISABLE() (TIM5)->CCER &= ~TIM_CCER_CC1E
137+ #define FUEL6_TIMER_DISABLE() (TIM5)->CCER &= ~TIM_CCER_CC2E
138+ #define FUEL7_TIMER_DISABLE() (TIM5)->CCER &= ~TIM_CCER_CC3E
139+ #define FUEL8_TIMER_DISABLE() (TIM5)->CCER &= ~TIM_CCER_CC4E
140+
141+ #define IGN5_TIMER_ENABLE() (TIM4)->CCER |= TIM_CCER_CC1E
142+ #define IGN6_TIMER_ENABLE() (TIM4)->CCER |= TIM_CCER_CC2E
143+ #define IGN7_TIMER_ENABLE() (TIM4)->CCER |= TIM_CCER_CC3E
144+ #define IGN8_TIMER_ENABLE() (TIM4)->CCER |= TIM_CCER_CC4E
145+
146+ #define IGN5_TIMER_DISABLE() (TIM4)->CCER &= ~TIM_CCER_CC1E
147+ #define IGN6_TIMER_DISABLE() (TIM4)->CCER &= ~TIM_CCER_CC2E
148+ #define IGN7_TIMER_DISABLE() (TIM4)->CCER &= ~TIM_CCER_CC3E
149+ #define IGN8_TIMER_DISABLE() (TIM4)->CCER &= ~TIM_CCER_CC4E
150+ #endif
151+ #else //libmaple core aka STM32DUINO
152+ #define FUEL1_COUNTER (TIMER2->regs).gen->CNT
153+ #define FUEL2_COUNTER (TIMER2->regs).gen->CNT
154+ #define FUEL3_COUNTER (TIMER2->regs).gen->CNT
155+ #define FUEL4_COUNTER (TIMER2->regs).gen->CNT
156+
157+ #define FUEL1_COMPARE (TIMER2->regs).gen->CCR1
158+ #define FUEL2_COMPARE (TIMER2->regs).gen->CCR2
159+ #define FUEL3_COMPARE (TIMER2->regs).gen->CCR3
160+ #define FUEL4_COMPARE (TIMER2->regs).gen->CCR4
161+
162+ #define IGN1_COUNTER (TIMER3->regs).gen->CNT
163+ #define IGN2_COUNTER (TIMER3->regs).gen->CNT
164+ #define IGN3_COUNTER (TIMER3->regs).gen->CNT
165+ #define IGN4_COUNTER (TIMER3->regs).gen->CNT
166+
167+ #define IGN1_COMPARE (TIMER3->regs).gen->CCR1
168+ #define IGN2_COMPARE (TIMER3->regs).gen->CCR2
169+ #define IGN3_COMPARE (TIMER3->regs).gen->CCR3
170+ #define IGN4_COMPARE (TIMER3->regs).gen->CCR4
171+
172+ #ifndef SMALL_FLASH_MODE
173+ #define FUEL5_COUNTER (TIMER5->regs).gen->CNT
174+ #define FUEL6_COUNTER (TIMER5->regs).gen->CNT
175+ #define FUEL7_COUNTER (TIMER5->regs).gen->CNT
176+ #define FUEL8_COUNTER (TIMER5->regs).gen->CNT
177+
178+ #define FUEL5_COMPARE (TIMER5->regs).gen->CCR1
179+ #define FUEL6_COMPARE (TIMER5->regs).gen->CCR2
180+ #define FUEL7_COMPARE (TIMER5->regs).gen->CCR3
181+ #define FUEL8_COMPARE (TIMER5->regs).gen->CCR4
182+
183+ #define IGN5_COUNTER (TIMER4->regs).gen->CNT
184+ #define IGN6_COUNTER (TIMER4->regs).gen->CNT
185+ #define IGN7_COUNTER (TIMER4->regs).gen->CNT
186+ #define IGN8_COUNTER (TIMER4->regs).gen->CNT
187+
188+ #define IGN5_COMPARE (TIMER4->regs).gen->CCR1
189+ #define IGN6_COMPARE (TIMER4->regs).gen->CCR2
190+ #define IGN7_COMPARE (TIMER4->regs).gen->CCR3
191+ #define IGN8_COMPARE (TIMER4->regs).gen->CCR4
192+ #endif
193+ //https://github.com/rogerclarkmelbourne/Arduino_STM32/blob/754bc2969921f1ef262bd69e7faca80b19db7524/STM32F1/system/libmaple/include/libmaple/timer.h#L444
194+ #define FUEL1_TIMER_ENABLE() (TIMER2->regs).gen->CCER |= TIMER_CCER_CC1E
195+ #define FUEL2_TIMER_ENABLE() (TIMER2->regs).gen->CCER |= TIMER_CCER_CC2E
196+ #define FUEL3_TIMER_ENABLE() (TIMER2->regs).gen->CCER |= TIMER_CCER_CC3E
197+ #define FUEL4_TIMER_ENABLE() (TIMER2->regs).gen->CCER |= TIMER_CCER_CC4E
198+
199+ #define FUEL1_TIMER_DISABLE() (TIMER2->regs).gen->CCER &= ~TIMER_CCER_CC1E
200+ #define FUEL2_TIMER_DISABLE() (TIMER2->regs).gen->CCER &= ~TIMER_CCER_CC2E
201+ #define FUEL3_TIMER_DISABLE() (TIMER2->regs).gen->CCER &= ~TIMER_CCER_CC3E
202+ #define FUEL4_TIMER_DISABLE() (TIMER2->regs).gen->CCER &= ~TIMER_CCER_CC4E
203+
204+ #define IGN1_TIMER_DISABLE() (TIMER3->regs).gen->CCER &= ~TIMER_CCER_CC1E
205+ #define IGN2_TIMER_DISABLE() (TIMER3->regs).gen->CCER &= ~TIMER_CCER_CC2E
206+ #define IGN3_TIMER_DISABLE() (TIMER3->regs).gen->CCER &= ~TIMER_CCER_CC3E
207+ #define IGN4_TIMER_DISABLE() (TIMER3->regs).gen->CCER &= ~TIMER_CCER_CC4E
208+
209+ #define IGN1_TIMER_ENABLE() (TIMER3->regs).gen->CCER |= TIMER_CCER_CC1E
210+ #define IGN2_TIMER_ENABLE() (TIMER3->regs).gen->CCER |= TIMER_CCER_CC2E
211+ #define IGN3_TIMER_ENABLE() (TIMER3->regs).gen->CCER |= TIMER_CCER_CC3E
212+ #define IGN4_TIMER_ENABLE() (TIMER3->regs).gen->CCER |= TIMER_CCER_CC4E
213+
214+ #ifndef SMALL_FLASH_MODE
215+ #define FUEL5_TIMER_ENABLE() (TIMER5->regs).gen->CCER |= TIMER_CCER_CC1E
216+ #define FUEL6_TIMER_ENABLE() (TIMER5->regs).gen->CCER |= TIMER_CCER_CC2E
217+ #define FUEL7_TIMER_ENABLE() (TIMER5->regs).gen->CCER |= TIMER_CCER_CC3E
218+ #define FUEL8_TIMER_ENABLE() (TIMER5->regs).gen->CCER |= TIMER_CCER_CC4E
219+
220+ #define IGN5_TIMER_ENABLE() (TIMER4->regs).gen->CCER |= TIMER_CCER_CC1E
221+ #define IGN6_TIMER_ENABLE() (TIMER4->regs).gen->CCER |= TIMER_CCER_CC2E
222+ #define IGN7_TIMER_ENABLE() (TIMER4->regs).gen->CCER |= TIMER_CCER_CC3E
223+ #define IGN8_TIMER_ENABLE() (TIMER4->regs).gen->CCER |= TIMER_CCER_CC4E
224+
225+ #define FUEL5_TIMER_DISABLE() (TIMER5->regs).gen->CCER &= ~TIMER_CCER_CC1E
226+ #define FUEL6_TIMER_DISABLE() (TIMER5->regs).gen->CCER &= ~TIMER_CCER_CC2E
227+ #define FUEL7_TIMER_DISABLE() (TIMER5->regs).gen->CCER &= ~TIMER_CCER_CC3E
228+ #define FUEL8_TIMER_DISABLE() (TIMER5->regs).gen->CCER &= ~TIMER_CCER_CC4E
229+
230+ #define IGN5_TIMER_DISABLE() (TIMER4->regs).gen->CCER &= ~TIMER_CCER_CC1E
231+ #define IGN6_TIMER_DISABLE() (TIMER4->regs).gen->CCER &= ~TIMER_CCER_CC2E
232+ #define IGN7_TIMER_DISABLE() (TIMER4->regs).gen->CCER &= ~TIMER_CCER_CC3E
233+ #define IGN8_TIMER_DISABLE() (TIMER4->regs).gen->CCER &= ~TIMER_CCER_CC4E
234+ #endif
235+#endif
236+
237+/*
238+***********************************************************************************************************
239+* Auxilliaries
240+*/
241+ #if defined(ARDUINO_ARCH_STM32) // STM32GENERIC core
242+ #define ENABLE_BOOST_TIMER() (TIM1)->CCER |= TIM_CCER_CC2E
243+ #define DISABLE_BOOST_TIMER() (TIM1)->CCER &= ~TIM_CCER_CC2E
244+
245+ #define ENABLE_VVT_TIMER() (TIM1)->CCER |= TIM_CCER_CC3E
246+ #define DISABLE_VVT_TIMER() (TIM1)->CCER &= ~TIM_CCER_CC3E
247+
248+ #define BOOST_TIMER_COMPARE (TIM1)->CCR2
249+ #define BOOST_TIMER_COUNTER (TIM1)->CNT
250+ #define VVT_TIMER_COMPARE (TIM1)->CCR3
251+ #define VVT_TIMER_COUNTER (TIM1)->CNT
252+ #else //libmaple core aka STM32DUINO
253+ #define ENABLE_BOOST_TIMER() (TIMER1->regs).gen->CCER |= TIMER_CCER_CC2E
254+ #define DISABLE_BOOST_TIMER() (TIMER1->regs).gen->CCER &= ~TIMER_CCER_CC2E
255+
256+ #define ENABLE_VVT_TIMER() (TIMER1->regs).gen->CCER |= TIMER_CCER_CC3E
257+ #define DISABLE_VVT_TIMER() (TIMER1->regs).gen->CCER &= ~TIMER_CCER_CC3E
258+
259+ #define BOOST_TIMER_COMPARE (TIMER1->regs).gen->CCR2
260+ #define BOOST_TIMER_COUNTER (TIMER1->regs).gen->CNT
261+ #define VVT_TIMER_COMPARE (TIMER1->regs).gen->CCR3
262+ #define VVT_TIMER_COUNTER (TIMER1->regs).gen->CNT
263+ #endif
264+
265+/*
266+***********************************************************************************************************
267+* Idle
268+*/
269+ #if defined(ARDUINO_ARCH_STM32) // STM32GENERIC core
270+ #define IDLE_COUNTER (TIM1)->CNT
271+ #define IDLE_COMPARE (TIM1)->CCR4
272+
273+ #define IDLE_TIMER_ENABLE() (TIM1)->CCER |= TIM_CCER_CC4E
274+ #define IDLE_TIMER_DISABLE() (TIM1)->CCER &= ~TIM_CCER_CC4E
275+ #else //libmaple core aka STM32DUINO
276+ #define IDLE_COUNTER (TIMER1->regs).gen->CNT
277+ #define IDLE_COMPARE (TIMER1->regs).gen->CCR4
278+
279+ #define IDLE_TIMER_ENABLE() (TIMER1->regs).gen->CCER |= TIMER_CCER_CC4E
280+ #define IDLE_TIMER_DISABLE() (TIMER1->regs).gen->CCER &= ~TIMER_CCER_CC4E
281+ #endif
282+
283+/*
284+***********************************************************************************************************
285+* Timers
286+*/
287+
288+
289+/*
290+***********************************************************************************************************
291+* CAN / Second serial
292+*/
293+
294+#endif //CORE_STM32
295+#endif //STM32_H
\ No newline at end of file
--- branches/Ver1.00_base/speeduino/board_teensy35.h (nonexistent)
+++ branches/Ver1.00_base/speeduino/board_teensy35.h (revision 33)
@@ -0,0 +1,138 @@
1+#ifndef TEENSY35_H
2+#define TEENSY35_H
3+#if defined(CORE_TEENSY)
4+
5+/*
6+***********************************************************************************************************
7+* General
8+*/
9+ void initBoard();
10+ uint16_t freeRam();
11+ #define PORT_TYPE uint8_t //Size of the port variables
12+ #define BOARD_DIGITAL_GPIO_PINS 34
13+ #define BOARD_NR_GPIO_PINS 34
14+ #define USE_SERIAL3
15+
16+ #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()
17+
18+/*
19+***********************************************************************************************************
20+* Schedules
21+*/
22+ //http://shawnhymel.com/661/learning-the-teensy-lc-interrupt-service-routines/
23+ #define FUEL1_COUNTER FTM0_CNT
24+ #define FUEL2_COUNTER FTM0_CNT
25+ #define FUEL3_COUNTER FTM0_CNT
26+ #define FUEL4_COUNTER FTM0_CNT
27+ #define FUEL5_COUNTER FTM3_CNT
28+ #define FUEL6_COUNTER FTM3_CNT
29+ #define FUEL7_COUNTER FTM3_CNT
30+ #define FUEL8_COUNTER FTM3_CNT
31+
32+ #define IGN1_COUNTER FTM0_CNT
33+ #define IGN2_COUNTER FTM0_CNT
34+ #define IGN3_COUNTER FTM0_CNT
35+ #define IGN4_COUNTER FTM0_CNT
36+ #define IGN5_COUNTER FTM3_CNT
37+ #define IGN6_COUNTER FTM3_CNT
38+ #define IGN7_COUNTER FTM3_CNT
39+ #define IGN8_COUNTER FTM3_CNT
40+
41+ #define FUEL1_COMPARE FTM0_C0V
42+ #define FUEL2_COMPARE FTM0_C1V
43+ #define FUEL3_COMPARE FTM0_C2V
44+ #define FUEL4_COMPARE FTM0_C3V
45+ #define FUEL5_COMPARE FTM3_C0V
46+ #define FUEL6_COMPARE FTM3_C1V
47+ #define FUEL7_COMPARE FTM3_C2V
48+ #define FUEL8_COMPARE FTM3_C3V
49+
50+ #define IGN1_COMPARE FTM0_C4V
51+ #define IGN2_COMPARE FTM0_C5V
52+ #define IGN3_COMPARE FTM0_C6V
53+ #define IGN4_COMPARE FTM0_C7V
54+ #define IGN5_COMPARE FTM3_C4V
55+ #define IGN6_COMPARE FTM3_C5V
56+ #define IGN7_COMPARE FTM3_C6V
57+ #define IGN8_COMPARE FTM3_C7V
58+
59+ #define FUEL1_TIMER_ENABLE() FTM0_C0SC |= FTM_CSC_CHIE //Write 1 to the CHIE (Channel Interrupt Enable) bit of channel 0 Status/Control
60+ #define FUEL2_TIMER_ENABLE() FTM0_C1SC |= FTM_CSC_CHIE
61+ #define FUEL3_TIMER_ENABLE() FTM0_C2SC |= FTM_CSC_CHIE
62+ #define FUEL4_TIMER_ENABLE() FTM0_C3SC |= FTM_CSC_CHIE
63+ #define FUEL5_TIMER_ENABLE() FTM3_C0SC |= FTM_CSC_CHIE
64+ #define FUEL6_TIMER_ENABLE() FTM3_C1SC |= FTM_CSC_CHIE
65+ #define FUEL7_TIMER_ENABLE() FTM3_C2SC |= FTM_CSC_CHIE
66+ #define FUEL8_TIMER_ENABLE() FTM3_C3SC |= FTM_CSC_CHIE
67+
68+ #define FUEL1_TIMER_DISABLE() FTM0_C0SC &= ~FTM_CSC_CHIE //Write 0 to the CHIE (Channel Interrupt Enable) bit of channel 0 Status/Control
69+ #define FUEL2_TIMER_DISABLE() FTM0_C1SC &= ~FTM_CSC_CHIE
70+ #define FUEL3_TIMER_DISABLE() FTM0_C2SC &= ~FTM_CSC_CHIE
71+ #define FUEL4_TIMER_DISABLE() FTM0_C3SC &= ~FTM_CSC_CHIE
72+ #define FUEL5_TIMER_DISABLE() FTM3_C0SC &= ~FTM_CSC_CHIE //Write 0 to the CHIE (Channel Interrupt Enable) bit of channel 0 Status/Control
73+ #define FUEL6_TIMER_DISABLE() FTM3_C1SC &= ~FTM_CSC_CHIE
74+ #define FUEL7_TIMER_DISABLE() FTM3_C2SC &= ~FTM_CSC_CHIE
75+ #define FUEL8_TIMER_DISABLE() FTM3_C3SC &= ~FTM_CSC_CHIE
76+
77+ #define IGN1_TIMER_ENABLE() FTM0_C4SC |= FTM_CSC_CHIE
78+ #define IGN2_TIMER_ENABLE() FTM0_C5SC |= FTM_CSC_CHIE
79+ #define IGN3_TIMER_ENABLE() FTM0_C6SC |= FTM_CSC_CHIE
80+ #define IGN4_TIMER_ENABLE() FTM0_C7SC |= FTM_CSC_CHIE
81+ #define IGN5_TIMER_ENABLE() FTM3_C4SC |= FTM_CSC_CHIE
82+ #define IGN6_TIMER_ENABLE() FTM3_C5SC |= FTM_CSC_CHIE
83+ #define IGN7_TIMER_ENABLE() FTM3_C6SC |= FTM_CSC_CHIE
84+ #define IGN8_TIMER_ENABLE() FTM3_C7SC |= FTM_CSC_CHIE
85+
86+ #define IGN1_TIMER_DISABLE() FTM0_C4SC &= ~FTM_CSC_CHIE
87+ #define IGN2_TIMER_DISABLE() FTM0_C5SC &= ~FTM_CSC_CHIE
88+ #define IGN3_TIMER_DISABLE() FTM0_C6SC &= ~FTM_CSC_CHIE
89+ #define IGN4_TIMER_DISABLE() FTM0_C7SC &= ~FTM_CSC_CHIE
90+ #define IGN5_TIMER_DISABLE() FTM3_C4SC &= ~FTM_CSC_CHIE
91+ #define IGN6_TIMER_DISABLE() FTM3_C5SC &= ~FTM_CSC_CHIE
92+ #define IGN7_TIMER_DISABLE() FTM3_C6SC &= ~FTM_CSC_CHIE
93+ #define IGN8_TIMER_DISABLE() FTM3_C7SC &= ~FTM_CSC_CHIE
94+
95+ #define MAX_TIMER_PERIOD 139808 // 2.13333333uS * 65535
96+ #define MAX_TIMER_PERIOD_SLOW 139808
97+ #define uS_TO_TIMER_COMPARE(uS) ((uS * 15) >> 5) //Converts a given number of uS into the required number of timer ticks until that time has passed.
98+ //Hack compatibility with AVR timers that run at different speeds
99+ #define uS_TO_TIMER_COMPARE_SLOW(uS) ((uS * 15) >> 5)
100+
101+/*
102+***********************************************************************************************************
103+* Auxilliaries
104+*/
105+ #define ENABLE_BOOST_TIMER() FTM1_C0SC |= FTM_CSC_CHIE
106+ #define DISABLE_BOOST_TIMER() FTM1_C0SC &= ~FTM_CSC_CHIE
107+
108+ #define ENABLE_VVT_TIMER() FTM1_C1SC |= FTM_CSC_CHIE
109+ #define DISABLE_VVT_TIMER() FTM1_C1SC &= ~FTM_CSC_CHIE
110+
111+ #define BOOST_TIMER_COMPARE FTM1_C0V
112+ #define BOOST_TIMER_COUNTER FTM1_CNT
113+ #define VVT_TIMER_COMPARE FTM1_C1V
114+ #define VVT_TIMER_COUNTER FTM1_CNT
115+
116+ static inline void boostInterrupt();
117+ static inline void vvtInterrupt();
118+
119+/*
120+***********************************************************************************************************
121+* Idle
122+*/
123+ #define IDLE_COUNTER FTM2_CNT
124+ #define IDLE_COMPARE FTM2_C0V
125+
126+ #define IDLE_TIMER_ENABLE() FTM2_C0SC |= FTM_CSC_CHIE
127+ #define IDLE_TIMER_DISABLE() FTM2_C0SC &= ~FTM_CSC_CHIE
128+
129+ static inline void idleInterrupt();
130+
131+/*
132+***********************************************************************************************************
133+* CAN / Second serial
134+*/
135+ //Uart CANSerial (&sercom3, 0, 1, SERCOM_RX_PAD_1, UART_TX_PAD_0);
136+
137+#endif //CORE_TEENSY
138+#endif //TEENSY35_H
\ No newline at end of file
--- branches/Ver1.00_base/speeduino/board_template.h (nonexistent)
+++ branches/Ver1.00_base/speeduino/board_template.h (revision 33)
@@ -0,0 +1,142 @@
1+#ifndef TEMPLATE_H
2+#define TEMPLATE_H
3+#if defined(CORE_TEMPLATE)
4+
5+/*
6+***********************************************************************************************************
7+* General
8+*/
9+ #define PORT_TYPE uint32_t //Size of the port variables (Eg inj1_pin_port). Most systems use a byte, but SAMD21 and possibly others are a 32-bit unsigned int
10+ #define BOARD_NR_GPIO_PINS 52 //Not sure this is correct
11+ #define BOARD_DIGITAL_GPIO_PINS 52 //Pretty sure this isn't right
12+ #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()
13+ void initBoard();
14+ uint16_t freeRam();
15+
16+
17+/*
18+***********************************************************************************************************
19+* Schedules
20+*/
21+
22+ #define FUEL1_COUNTER <register here>
23+ #define FUEL2_COUNTER <register here>
24+ #define FUEL3_COUNTER <register here>
25+ #define FUEL4_COUNTER <register here>
26+ //The below are optional, but recommended if there are sufficient timers/compares
27+ #define FUEL5_COUNTER <register here>
28+ #define FUEL6_COUNTER <register here>
29+ #define FUEL7_COUNTER <register here>
30+ #define FUEL8_COUNTER <register here>
31+
32+ #define IGN1_COUNTER <register here>
33+ #define IGN2_COUNTER <register here>
34+ #define IGN3_COUNTER <register here>
35+ #define IGN4_COUNTER <register here>
36+ //The below are optional, but recommended if there are sufficient timers/compares
37+ #define IGN5_COUNTER <register here>
38+ #define IGN6_COUNTER <register here>
39+ #define IGN7_COUNTER <register here>
40+ #define IGN8_COUNTER <register here>
41+
42+ #define FUEL1_COMPARE <register here>
43+ #define FUEL2_COMPARE <register here>
44+ #define FUEL3_COMPARE <register here>
45+ #define FUEL4_COMPARE <register here>
46+ //The below are optional, but recommended if there are sufficient timers/compares
47+ #define FUEL5_COMPARE <register here>
48+ #define FUEL6_COMPARE <register here>
49+ #define FUEL7_COMPARE <register here>
50+ #define FUEL8_COMPARE <register here>
51+
52+ #define IGN1_COMPARE <register here>
53+ #define IGN2_COMPARE <register here>
54+ #define IGN3_COMPARE <register here>
55+ #define IGN4_COMPARE <register here>
56+ //The below are optional, but recommended if there are sufficient timers/compares
57+ #define IGN5_COMPARE <register here>
58+ #define IGN6_COMPARE <register here>
59+ #define IGN7_COMPARE <register here>
60+ #define IGN8_COMPARE <register here>
61+
62+ #define FUEL1_TIMER_ENABLE() <macro here>
63+ #define FUEL2_TIMER_ENABLE() <macro here>
64+ #define FUEL3_TIMER_ENABLE() <macro here>
65+ #define FUEL4_TIMER_ENABLE() <macro here>
66+ //The below are optional, but recommended if there are sufficient timers/compares
67+ #define FUEL5_TIMER_ENABLE() <macro here>
68+ #define FUEL6_TIMER_ENABLE() <macro here>
69+ #define FUEL7_TIMER_ENABLE() <macro here>
70+ #define FUEL8_TIMER_ENABLE() <macro here>
71+
72+ #define FUEL1_TIMER_DISABLE() <macro here>
73+ #define FUEL2_TIMER_DISABLE() <macro here>
74+ #define FUEL3_TIMER_DISABLE() <macro here>
75+ #define FUEL4_TIMER_DISABLE() <macro here>
76+ //The below are optional, but recommended if there are sufficient timers/compares
77+ #define FUEL5_TIMER_DISABLE() <macro here>
78+ #define FUEL6_TIMER_DISABLE() <macro here>
79+ #define FUEL7_TIMER_DISABLE() <macro here>
80+ #define FUEL8_TIMER_DISABLE() <macro here>
81+
82+ #define IGN1_TIMER_ENABLE() <macro here>
83+ #define IGN2_TIMER_ENABLE() <macro here>
84+ #define IGN3_TIMER_ENABLE() <macro here>
85+ #define IGN4_TIMER_ENABLE() <macro here>
86+ //The below are optional, but recommended if there are sufficient timers/compares
87+ #define IGN5_TIMER_ENABLE() <macro here>
88+ #define IGN6_TIMER_ENABLE() <macro here>
89+ #define IGN7_TIMER_ENABLE() <macro here>
90+ #define IGN8_TIMER_ENABLE() <macro here>
91+
92+ #define IGN1_TIMER_DISABLE() <macro here>
93+ #define IGN2_TIMER_DISABLE() <macro here>
94+ #define IGN3_TIMER_DISABLE() <macro here>
95+ #define IGN4_TIMER_DISABLE() <macro here>
96+ //The below are optional, but recommended if there are sufficient timers/compares
97+ #define IGN5_TIMER_DISABLE() <macro here>
98+ #define IGN6_TIMER_DISABLE() <macro here>
99+ #define IGN7_TIMER_DISABLE() <macro here>
100+ #define IGN8_TIMER_DISABLE() <macro here>
101+
102+
103+ #define MAX_TIMER_PERIOD 139808 //This is the maximum time, in uS, that the compare channels can run before overflowing. It is typically 65535 * <how long each tick represents>
104+ #define MAX_TIMER_PERIOD_SLOW 139808 //If there is a second timer speed used, this is the same as above for that
105+ #define uS_TO_TIMER_COMPARE(uS) ((uS * 15) >> 5) //Converts a given number of uS into the required number of timer ticks until that time has passed.
106+ #define uS_TO_TIMER_COMPARE_SLOW(uS) ((uS * 15) >> 5) //As above, but for the alternative slow timer if required
107+
108+/*
109+***********************************************************************************************************
110+* Auxilliaries
111+*/
112+ //macro functions for enabling and disabling timer interrupts for the boost and vvt functions
113+ #define ENABLE_BOOST_TIMER() <macro here>
114+ #define DISABLE_BOOST_TIMER() <macro here>
115+
116+ #define ENABLE_VVT_TIMER() <macro here>
117+ #define DISABLE_VVT_TIMER() <macro here>
118+
119+ #define BOOST_TIMER_COMPARE <register here>
120+ #define BOOST_TIMER_COUNTER <register here>
121+ #define VVT_TIMER_COMPARE <register here>
122+ #define VVT_TIMER_COUNTER <register here>
123+
124+/*
125+***********************************************************************************************************
126+* Idle
127+*/
128+ //Same as above, but for the timer controlling PWM idle
129+ #define IDLE_COUNTER <register here>
130+ #define IDLE_COMPARE <register here>
131+
132+ #define IDLE_TIMER_ENABLE() <macro here>
133+ #define IDLE_TIMER_DISABLE() <macro here>
134+
135+/*
136+***********************************************************************************************************
137+* CAN / Second serial
138+*/
139+
140+
141+#endif //CORE_TEMPLATE
142+#endif //TEMPLATE_H
\ No newline at end of file
--- branches/Ver1.00_base/speeduino/cancomms.h (revision 32)
+++ branches/Ver1.00_base/speeduino/cancomms.h (revision 33)
@@ -1,7 +1,5 @@
11 #ifndef CANCOMMS_H
22 #define CANCOMMS_H
3-//These are the page numbers that the Tuner Studio serial protocol uses to transverse the different map and config pages.
4-#define veMapPage 1
53
64 #define CAN_PACKET_SIZE 75
75
@@ -30,4 +28,4 @@
3028 void sendcanValues(uint16_t offset, uint16_t packetLength, byte cmd, byte portNum);
3129 void sendCancommand(uint8_t cmdtype , uint16_t canadddress, uint8_t candata1, uint8_t candata2, uint16_t sourcecanAddress);
3230
33-#endif // CANCOMMS_H
31+#endif // CANCOMMS_H
--- branches/Ver1.00_base/speeduino/comms.h (revision 32)
+++ branches/Ver1.00_base/speeduino/comms.h (revision 33)
@@ -1,8 +1,8 @@
11 #ifndef COMMS_H
22 #define COMMS_H
33 //These are the page numbers that the Tuner Studio serial protocol uses to transverse the different map and config pages.
4-#define veMapPage 1
5-#define veSetPage 2//Config Page 1
4+#define veMapPage 2
5+#define veSetPage 1 //Note that this and the veMapPage were swapped in Feb 2019 as the 'algorithm' field must be declared in the ini before it's used in the fuel table
66 #define ignMapPage 3
77 #define ignSetPage 4//Config Page 2
88 #define afrMapPage 5
@@ -48,12 +48,12 @@
4848 };
4949
5050 void command();//This is the heart of the Command Line Interpeter. All that needed to be done was to make it human readable.
51-void sendValues(uint16_t offset, uint16_t packetlength,byte cmd, byte portnum);
52-void receiveValue(int offset, byte newValue);
51+void sendValues(uint16_t, uint16_t,byte, byte);
52+void receiveValue(int, byte);
5353 void saveConfig();
54-void sendPage(bool useChar);
55-void receiveCalibration(byte tableID);
56-void sendToothLog(bool useChar);
54+void sendPage(bool);
55+void receiveCalibration(byte);
56+void sendToothLog(bool);
5757 void testComm();
5858 void commandButtons();
5959
--- branches/Ver1.00_base/speeduino/globals.h (revision 32)
+++ branches/Ver1.00_base/speeduino/globals.h (revision 33)
@@ -3,7 +3,7 @@
33 #include <Arduino.h>
44 #include "table.h"
55
6-//These are configuration options for changing around the outputs that are used
6+//These are configuration options for changing around the outputs that are used. THese are just the defaults and may be changed in the sections below based on the hardware in use.
77 #define INJ_CHANNELS 4
88 #define IGN_CHANNELS 5
99
@@ -12,15 +12,16 @@
1212 #define BOARD_NR_GPIO_PINS 62
1313 #define LED_BUILTIN 13
1414 #define CORE_AVR
15+ #define BOARD_H "board_avr2560.h"
1516
1617 //#define TIMER5_MICROS
1718
1819 #elif defined(CORE_TEENSY)
19- #define BOARD_DIGITAL_GPIO_PINS 34
20- #define BOARD_NR_GPIO_PINS 34
20+ #define BOARD_H "board_teensy35.h"
2121
2222 #elif defined(STM32_MCU_SERIES) || defined(ARDUINO_ARCH_STM32) || defined(__STM32F1__) || defined(STM32F4) || defined(STM32)
2323 #define CORE_STM32
24+ #define BOARD_H "board_stm32.h"
2425 #ifndef word
2526 #define word(h, l) ((h << 8) | l) //word() function not defined for this platform in the main library
2627 #endif
@@ -34,10 +35,16 @@
3435 #define BOARD_DIGITAL_GPIO_PINS 80
3536 #define BOARD_NR_GPIO_PINS 80
3637 #define LED_BUILTIN PA7
38+
39+ //These boards always make 8/8 channels available
40+ #undef INJ_CHANNELS
41+ #undef IGN_CHANNELS
42+ #define INJ_CHANNELS 8
43+ #define IGN_CHANNELS 8
3744 #endif
3845
3946 //Specific mode for Bluepill due to its small flash size. This disables a number of strings from being compiled into the flash
40- #if defined(MCU_STM32F103C8) | defined(MCU_STM32F103CB)
47+ #if defined(MCU_STM32F103C8) || defined(MCU_STM32F103CB)
4148 #define SMALL_FLASH_MODE
4249 #endif
4350
@@ -51,10 +58,16 @@
5158 #define portOutputRegister(port) (volatile byte *)( &(port->regs->ODR) )
5259 #define portInputRegister(port) (volatile byte *)( &(port->regs->IDR) )
5360 #endif
61+#elif defined(__SAMD21G18A__)
62+ #define BOARD_H "board_samd21.h"
63+ #define CORE_SAMD21
5464 #else
5565 #error Incorrect board selected. Please select the correct board (Usually Mega 2560) and upload again
5666 #endif
5767
68+//This can only be included after the above section
69+#include BOARD_H //Note that this is not a real file, it is defined in globals.h.
70+
5871 //Handy bitsetting macros
5972 #define BIT_SET(a,b) ((a) |= (1<<(b)))
6073 #define BIT_CLEAR(a,b) ((a) &= ~(1<<(b)))
@@ -85,7 +98,7 @@
8598 #define BIT_STATUS1_INJ2 1 //inj2
8699 #define BIT_STATUS1_INJ3 2 //inj3
87100 #define BIT_STATUS1_INJ4 3 //inj4
88-#define BIT_STATUS1_DFCO 4 //Decelleration fuel cutoff
101+#define BIT_STATUS1_DFCO 4 //Decelleration fuel cutoff
89102 #define BIT_STATUS1_BOOSTCUT 5 //Fuel component of MAP based boost cut out
90103 #define BIT_STATUS1_TOOTHLOG1READY 6 //Used to flag if tooth log 1 is ready
91104 #define BIT_STATUS1_TOOTHLOG2READY 7 //Used to flag if tooth log 2 is ready (Log is not currently used)
@@ -100,8 +113,8 @@
100113 #define BIT_SPARK_IDLE 6 // idle on
101114 #define BIT_SPARK_SYNC 7 // Whether engine has sync or not
102115
103-#define BIT_SPARK2_FLATSH 0 //Flat shift hard cut
104-#define BIT_SPARK2_FLATSS 1 //Flat shift soft cut
116+#define BIT_SPARK2_FLATSH 0 //Flat shift hard cut
117+#define BIT_SPARK2_FLATSS 1 //Flat shift soft cut
105118 #define BIT_SPARK2_UNUSED3 2
106119 #define BIT_SPARK2_UNUSED4 3
107120 #define BIT_SPARK2_UNUSED5 4
@@ -149,7 +162,7 @@
149162 #define VALID_MAP_MIN 2 //The smallest ADC value that is valid for the MAP sensor
150163
151164 #define TOOTH_LOG_SIZE 64
152-#define TOOTH_LOG_BUFFER 256
165+#define TOOTH_LOG_BUFFER 128 //256
153166
154167 #define COMPOSITE_LOG_PRI 0
155168 #define COMPOSITE_LOG_SEC 1
@@ -229,7 +242,7 @@
229242
230243 const byte data_structure_version = 2; //This identifies the data structure when reading / writing.
231244 //const byte page_size = 64;
232-//[PJSC]const int16_t npage_size[11] = {0,288,128,288,128,288,128,240,192,192,192};
245+//[PJSC]const int16_t npage_size[11] PROGMEM = {0,288,128,288,128,288,128,240,192,192,192};
233246 const int16_t npage_size[12] = {0,288,128,288,128,288,128,240,192,192,192,288}; //[PJSC]
234247 //const byte page11_size = 128;
235248 #define MAP_PAGE_SIZE 288
@@ -278,48 +291,48 @@
278291 struct table2D knockWindowDurationTable;
279292
280293 //These are for the direct port manipulation of the injectors, coils and aux outputs
281-volatile byte *inj1_pin_port;
294+volatile PORT_TYPE *inj1_pin_port;
282295 volatile byte inj1_pin_mask;
283-volatile byte *inj2_pin_port;
296+volatile PORT_TYPE *inj2_pin_port;
284297 volatile byte inj2_pin_mask;
285-volatile byte *inj3_pin_port;
298+volatile PORT_TYPE *inj3_pin_port;
286299 volatile byte inj3_pin_mask;
287-volatile byte *inj4_pin_port;
300+volatile PORT_TYPE *inj4_pin_port;
288301 volatile byte inj4_pin_mask;
289-volatile byte *inj5_pin_port;
302+volatile PORT_TYPE *inj5_pin_port;
290303 volatile byte inj5_pin_mask;
291-volatile byte *inj6_pin_port;
304+volatile PORT_TYPE *inj6_pin_port;
292305 volatile byte inj6_pin_mask;
293-volatile byte *inj7_pin_port;
306+volatile PORT_TYPE *inj7_pin_port;
294307 volatile byte inj7_pin_mask;
295-volatile byte *inj8_pin_port;
308+volatile PORT_TYPE *inj8_pin_port;
296309 volatile byte inj8_pin_mask;
297310
298-volatile byte *ign1_pin_port;
311+volatile PORT_TYPE *ign1_pin_port;
299312 volatile byte ign1_pin_mask;
300-volatile byte *ign2_pin_port;
313+volatile PORT_TYPE *ign2_pin_port;
301314 volatile byte ign2_pin_mask;
302-volatile byte *ign3_pin_port;
315+volatile PORT_TYPE *ign3_pin_port;
303316 volatile byte ign3_pin_mask;
304-volatile byte *ign4_pin_port;
317+volatile PORT_TYPE *ign4_pin_port;
305318 volatile byte ign4_pin_mask;
306-volatile byte *ign5_pin_port;
319+volatile PORT_TYPE *ign5_pin_port;
307320 volatile byte ign5_pin_mask;
308-volatile byte *ign6_pin_port;
321+volatile PORT_TYPE *ign6_pin_port;
309322 volatile byte ign6_pin_mask;
310-volatile byte *ign7_pin_port;
323+volatile PORT_TYPE *ign7_pin_port;
311324 volatile byte ign7_pin_mask;
312-volatile byte *ign8_pin_port;
325+volatile PORT_TYPE *ign8_pin_port;
313326 volatile byte ign8_pin_mask;
314327
315-volatile byte *tach_pin_port;
328+volatile PORT_TYPE *tach_pin_port;
316329 volatile byte tach_pin_mask;
317-volatile byte *pump_pin_port;
330+volatile PORT_TYPE *pump_pin_port;
318331 volatile byte pump_pin_mask;
319332
320-volatile byte *triggerPri_pin_port;
333+volatile PORT_TYPE *triggerPri_pin_port;
321334 volatile byte triggerPri_pin_mask;
322-volatile byte *triggerSec_pin_port;
335+volatile PORT_TYPE *triggerSec_pin_port;
323336 volatile byte triggerSec_pin_mask;
324337
325338 volatile byte captureDutyPulseInterrupt; //[PJSC] For capture duty pulse
@@ -345,7 +358,7 @@
345358 int ignition5EndAngle = 0;
346359
347360 //These are variables used across multiple files
348-bool initialisationComplete = false; //Tracks whether the setup() functino has run completely
361+bool initialisationComplete = false; //Tracks whether the setup() function has run completely
349362 volatile uint16_t mainLoopCount;
350363 unsigned long revolutionTime; //The time in uS that one revolution would take at current speed (The time tooth 1 was last seen, minus the time it was seen prior to that)
351364 volatile unsigned long timer5_overflow_count = 0; //Increments every time counter 5 overflows. Used for the fast version of micros()
@@ -353,7 +366,7 @@
353366 uint16_t fixedCrankingOverride = 0;
354367 bool clutchTrigger;
355368 bool previousClutchTrigger;
356-volatile uint16_t toothHistory[TOOTH_LOG_BUFFER];
369+volatile uint32_t toothHistory[TOOTH_LOG_BUFFER];
357370 volatile uint8_t compositeLogHistory[TOOTH_LOG_BUFFER];
358371 volatile bool fpPrimed = false; //Tracks whether or not the fuel pump priming has been completed yet
359372 volatile unsigned int toothHistoryIndex = 0;
@@ -362,7 +375,7 @@
362375 byte secondaryTriggerEdge;
363376 int CRANK_ANGLE_MAX = 720;
364377 int CRANK_ANGLE_MAX_IGN = 360;
365-int CRANK_ANGLE_MAX_INJ = 360; // The number of crank degrees that the system track over. 360 for wasted / timed batch and 720 for sequential
378+int CRANK_ANGLE_MAX_INJ = 360; //The number of crank degrees that the system track over. 360 for wasted / timed batch and 720 for sequential
366379
367380
368381 //This needs to be here because using the config page directly can prevent burning the setting
@@ -599,8 +612,12 @@
599612
600613 int8_t EMAPMin; //Must be signed
601614 uint16_t EMAPMax;
602- //[PJSC] byte unused1_70[58];
603- byte pjscFreq; //[PJSC] Offset 70
615+
616+ byte fanWhenOff : 1; // Only run fan when engine is running
617+ byte fanUnused : 7;
618+
619+ //[PJSC] byte unused1_70[57];
620+ byte pjscFreq; //[PJSC] Offset 71
604621 byte exValvePosMin; // |
605622 byte exValvePosMax; // |
606623 byte exTrigHysteresis; // |
@@ -631,7 +648,7 @@
631648 uint16_t testinjcnt; // |
632649 byte muxout1Selection: 4; // | MUX output1 selection
633650 byte muxout2Selection: 4; // V MUX output2 selection
634- byte unused1_100[28]; //[PJSC v1.10] For test mode
651+ byte unused1_101[27]; //[PJSC v1.10] For test mode
635652
636653 #if defined(CORE_AVR)
637654 };
@@ -737,7 +754,7 @@
737754 byte egoTPSMax; //TPS must be below this for closed loop to function
738755 byte vvtPin : 6;
739756 byte useExtBaro : 1;
740- byte boostMode : 1; //Simple of full boost contrl
757+ byte boostMode : 1; //Simple of full boost control
741758 byte boostPin : 6;
742759 byte VVTasOnOff : 1; //Whether or not to use the VVT table as an on/off map
743760 byte useEMAP : 1;
@@ -787,7 +804,7 @@
787804 byte iacAlgorithm : 3; //Valid values are: "None", "On/Off", "PWM", "PWM Closed Loop", "Stepper", "Stepper Closed Loop"
788805 byte iacStepTime : 3; //How long to pulse the stepper for to ensure the step completes (ms)
789806 byte iacChannels : 1; //How many outputs to use in PWM mode (0 = 1 channel, 1 = 2 channels)
790- byte iacPWMdir : 1; //Directino of the PWM valve. 0 = Normal = Higher RPM with more duty. 1 = Reverse = Lower RPM with more duty
807+ byte iacPWMdir : 1; //Direction of the PWM valve. 0 = Normal = Higher RPM with more duty. 1 = Reverse = Lower RPM with more duty
791808
792809 byte iacFastTemp; //Fast idle temp when using a simple on/off valve
793810
@@ -801,6 +818,7 @@
801818 byte fanHyster; // Fan hysteresis
802819 byte fanFreq; // Fan PWM frequency
803820 byte fanPWMBins[4]; //Temperature Bins for the PWM fan control
821+
804822 #if defined(CORE_AVR)
805823 };
806824 #else
@@ -835,8 +853,9 @@
835853 uint16_t obd_address; //speeduino OBD diagnostic address
836854 uint8_t Auxinpina[16]; //analog pin number when internal aux in use
837855 uint8_t Auxinpinb[16]; // digital pin number when internal aux in use
838-
839- byte unused10_152;
856+
857+ byte iacStepperInv : 1; //stepper direction of travel to allow reversing. 0=normal, 1=inverted.
858+
840859 byte unused10_153;
841860 byte unused10_154;
842861 byte unused10_155;
@@ -1055,7 +1074,6 @@
10551074 extern struct config9 configPage9;
10561075 extern struct config10 configPage10;
10571076 extern struct config11 configPage11; //[PJSC]
1058-//[PJSC]extern struct config12 configPage12; //[PJSC]
10591077 extern unsigned long currentLoopTime; //The time the current loop started (uS)
10601078 extern unsigned long previousLoopTime; //The time the previous loop started (uS)
10611079 volatile uint16_t ignitionCount; //The count of ignition events that have taken place since the engine started
--- branches/Ver1.00_base/speeduino/idle.h (revision 32)
+++ branches/Ver1.00_base/speeduino/idle.h (revision 33)
@@ -3,6 +3,7 @@
33
44 #include "globals.h"
55 #include "table.h"
6+#include BOARD_H //Note that this is not a real file, it is defined in globals.h.
67
78 #define IAC_ALGORITHM_NONE 0
89 #define IAC_ALGORITHM_ONOFF 1
@@ -23,38 +24,10 @@
2324 int targetIdleStep; //What the targetted step is
2425 volatile StepperStatus stepperStatus;
2526 volatile unsigned long stepStartTime; //The time the curren
27+ byte lessAirDirection;
28+ byte moreAirDirection;
2629 };
2730
28-#if defined(CORE_AVR)
29- #define IDLE_COUNTER TCNT4
30- #define IDLE_COMPARE OCR4C
31-
32- #define IDLE_TIMER_ENABLE() TIMSK4 |= (1 << OCIE4C)
33- #define IDLE_TIMER_DISABLE() TIMSK4 &= ~(1 << OCIE4C)
34-
35-#elif defined(CORE_TEENSY)
36- #define IDLE_COUNTER FTM2_CNT
37- #define IDLE_COMPARE FTM2_C0V
38-
39- #define IDLE_TIMER_ENABLE() FTM2_C0SC |= FTM_CSC_CHIE
40- #define IDLE_TIMER_DISABLE() FTM2_C0SC &= ~FTM_CSC_CHIE
41-
42-#elif defined(CORE_STM32)
43- #if defined(ARDUINO_ARCH_STM32) // STM32GENERIC core
44- #define IDLE_COUNTER (TIM1)->CNT
45- #define IDLE_COMPARE (TIM1)->CCR4
46-
47- #define IDLE_TIMER_ENABLE() (TIM1)->CCER |= TIM_CCER_CC4E
48- #define IDLE_TIMER_DISABLE() (TIM1)->CCER &= ~TIM_CCER_CC4E
49- #else //libmaple core aka STM32DUINO
50- #define IDLE_COUNTER (TIMER1->regs).gen->CNT
51- #define IDLE_COMPARE (TIMER1->regs).gen->CCR4
52-
53- #define IDLE_TIMER_ENABLE() (TIMER1->regs).gen->CCER |= TIMER_CCER_CC4E
54- #define IDLE_TIMER_DISABLE() (TIMER1->regs).gen->CCER &= ~TIMER_CCER_CC4E
55- #endif
56-#endif
57-
5831 struct table2D iacClosedLoopTable;
5932 struct table2D iacPWMTable;
6033 struct table2D iacStepTable;
@@ -68,10 +41,11 @@
6841 unsigned int iacStepTime;
6942 unsigned int completedHomeSteps;
7043
71-volatile byte *idle_pin_port;
44+volatile PORT_TYPE *idle_pin_port;
7245 volatile byte idle_pin_mask;
73-volatile byte *idle2_pin_port;
46+volatile PORT_TYPE *idle2_pin_port;
7447 volatile byte idle2_pin_mask;
48+
7549 volatile bool idle_pwm_state;
7650 unsigned int idle_pwm_max_count; //Used for variable PWM frequency
7751 volatile unsigned int idle_pwm_cur_value;
@@ -86,8 +60,6 @@
8660 static inline byte isStepperHomed();
8761 static inline byte checkForStepping();
8862 static inline void doStep();
89-#if defined (CORE_TEENSY) || defined(CORE_STM32)
90- static inline void idleInterrupt();
91-#endif
63+static inline void idleInterrupt();
9264
9365 #endif
--- branches/Ver1.00_base/speeduino/init.h (nonexistent)
+++ branches/Ver1.00_base/speeduino/init.h (revision 33)
@@ -0,0 +1,12 @@
1+#ifndef INIT_H
2+#define INIT_H
3+
4+void initialiseAll();
5+void initialiseTriggers();
6+void setPinMapping(byte);
7+void initialiseExternalTrigger(); //[PJSC] For External Trigger Interruot
8+void changeMapSelectSw(); //[PJSC v1.10] For MAP switch
9+void initialiseCaptureDutyPulse(); //[PJSC] For capturing duty pulse
10+void initialiseCaptureDutyPulse2(); //[PJSC] For capturing duty pulse
11+
12+#endif
\ No newline at end of file
--- branches/Ver1.00_base/speeduino/scheduler.h (revision 32)
+++ branches/Ver1.00_base/speeduino/scheduler.h (revision 33)
@@ -27,346 +27,7 @@
2727
2828 #define USE_IGN_REFRESH
2929 #define IGNITION_REFRESH_THRESHOLD 30 //Time in uS that the refresh functions will check to ensure there is enough time before changing the end compare
30-#if defined(CORE_AVR)
31- #include <avr/interrupt.h>
32- #include <avr/io.h>
3330
34- //Refer to http://svn.savannah.nongnu.org/viewvc/trunk/avr-libc/include/avr/iomxx0_1.h?root=avr-libc&view=markup
35- #define FUEL1_COUNTER TCNT3
36- #define FUEL2_COUNTER TCNT3
37- #define FUEL3_COUNTER TCNT3
38- #define FUEL4_COUNTER TCNT4
39- #define FUEL5_COUNTER TCNT1
40- #define FUEL6_COUNTER TCNT4 //Replaces ignition 4
41- #define FUEL7_COUNTER TCNT5 //Replaces ignition 3
42- #define FUEL8_COUNTER TCNT5 //Replaces ignition 2
43-
44- #define IGN1_COUNTER TCNT5
45- #define IGN2_COUNTER TCNT5
46- #define IGN3_COUNTER TCNT5
47- #define IGN4_COUNTER TCNT4
48- #define IGN5_COUNTER TCNT1
49- #define IGN6_COUNTER TCNT4 //Replaces injector 4
50- #define IGN7_COUNTER TCNT3 //Replaces injector 3
51- #define IGN8_COUNTER TCNT3 //Replaces injector 2
52-
53- #define FUEL1_COMPARE OCR3A
54- #define FUEL2_COMPARE OCR3B
55- #define FUEL3_COMPARE OCR3C
56- #define FUEL4_COMPARE OCR4B
57- #define FUEL5_COMPARE OCR1C //Shared with FUEL1
58- #define FUEL6_COMPARE OCR4A //Replaces ignition4
59- #define FUEL7_COMPARE OCR5C //Replaces ignition3
60- #define FUEL8_COMPARE OCR5B //Replaces ignition2
61-
62- #define IGN1_COMPARE OCR5A
63- #define IGN2_COMPARE OCR5B
64- #define IGN3_COMPARE OCR5C
65- #define IGN4_COMPARE OCR4A
66- #define IGN5_COMPARE OCR1C
67- #define IGN6_COMPARE OCR4B //Replaces injector 4
68- #define IGN7_COMPARE OCR3C //Replaces injector 3
69- #define IGN8_COMPARE OCR3B //Replaces injector 2
70-
71- #define FUEL1_TIMER_ENABLE() TIMSK3 |= (1 << OCIE3A) //Turn on the A compare unit (ie turn on the interrupt)
72- #define FUEL2_TIMER_ENABLE() TIMSK3 |= (1 << OCIE3B) //Turn on the B compare unit (ie turn on the interrupt)
73- #define FUEL3_TIMER_ENABLE() TIMSK3 |= (1 << OCIE3C) //Turn on the C compare unit (ie turn on the interrupt)
74- #define FUEL4_TIMER_ENABLE() TIMSK4 |= (1 << OCIE4B) //Turn on the B compare unit (ie turn on the interrupt)
75- #define FUEL5_TIMER_ENABLE() TIMSK1 |= (1 << OCIE1C) //
76- #define FUEL6_TIMER_ENABLE() TIMSK4 |= (1 << OCIE4A) //
77- #define FUEL7_TIMER_ENABLE() TIMSK5 |= (1 << OCIE5C) //
78- #define FUEL8_TIMER_ENABLE() TIMSK5 |= (1 << OCIE5B) //
79-
80- #define FUEL1_TIMER_DISABLE() TIMSK3 &= ~(1 << OCIE3A); //Turn off this output compare unit
81- #define FUEL2_TIMER_DISABLE() TIMSK3 &= ~(1 << OCIE3B); //Turn off this output compare unit
82- #define FUEL3_TIMER_DISABLE() TIMSK3 &= ~(1 << OCIE3C); //Turn off this output compare unit
83- #define FUEL4_TIMER_DISABLE() TIMSK4 &= ~(1 << OCIE4B); //Turn off this output compare unit
84- #define FUEL5_TIMER_DISABLE() TIMSK1 &= ~(1 << OCIE1C); //
85- #define FUEL6_TIMER_DISABLE() TIMSK4 &= ~(1 << OCIE4A); //
86- #define FUEL7_TIMER_DISABLE() TIMSK5 &= ~(1 << OCIE5C); //
87- #define FUEL8_TIMER_DISABLE() TIMSK5 &= ~(1 << OCIE5B); //
88-
89- #define IGN1_TIMER_ENABLE() TIMSK5 |= (1 << OCIE5A) //Turn on the A compare unit (ie turn on the interrupt)
90- #define IGN2_TIMER_ENABLE() TIMSK5 |= (1 << OCIE5B) //Turn on the B compare unit (ie turn on the interrupt)
91- #define IGN3_TIMER_ENABLE() TIMSK5 |= (1 << OCIE5C) //Turn on the C compare unit (ie turn on the interrupt)
92- #define IGN4_TIMER_ENABLE() TIMSK4 |= (1 << OCIE4A) //Turn on the A compare unit (ie turn on the interrupt)
93- #define IGN5_TIMER_ENABLE() TIMSK1 |= (1 << OCIE1C) //Turn on the A compare unit (ie turn on the interrupt)
94- #define IGN6_TIMER_ENABLE() TIMSK4 |= (1 << OCIE4B) //Replaces injector 4
95- #define IGN7_TIMER_ENABLE() TIMSK3 |= (1 << OCIE3C) //Replaces injector 3
96- #define IGN8_TIMER_ENABLE() TIMSK3 |= (1 << OCIE3B) //Replaces injector 2
97-
98- #define IGN1_TIMER_DISABLE() TIMSK5 &= ~(1 << OCIE5A) //Turn off this output compare unit
99- #define IGN2_TIMER_DISABLE() TIMSK5 &= ~(1 << OCIE5B) //Turn off this output compare unit
100- #define IGN3_TIMER_DISABLE() TIMSK5 &= ~(1 << OCIE5C) //Turn off this output compare unit
101- #define IGN4_TIMER_DISABLE() TIMSK4 &= ~(1 << OCIE4A) //Turn off this output compare unit
102- #define IGN5_TIMER_DISABLE() TIMSK1 &= ~(1 << OCIE1C) //Turn off this output compare unit
103- #define IGN6_TIMER_DISABLE() TIMSK4 &= ~(1 << OCIE4B) //Replaces injector 4
104- #define IGN7_TIMER_DISABLE() TIMSK3 &= ~(1 << OCIE3C) //Replaces injector 3
105- #define IGN8_TIMER_DISABLE() TIMSK3 &= ~(1 << OCIE3B) //Replaces injector 2
106-
107- #define MAX_TIMER_PERIOD 262140UL //The longest period of time (in uS) that the timer can permit (IN this case it is 65535 * 4, as each timer tick is 4uS)
108- #define MAX_TIMER_PERIOD_SLOW 1048560UL //The longest period of time (in uS) that the timer can permit (IN this case it is 65535 * 16, as each timer tick is 16uS)
109- #define uS_TO_TIMER_COMPARE(uS1) (uS1 >> 2) //Converts a given number of uS into the required number of timer ticks until that time has passed
110- //This is a hack until I make all the AVR timers run at the same speed
111- #define uS_TO_TIMER_COMPARE_SLOW(uS1) (uS1 >> 4)
112-
113-#elif defined(CORE_TEENSY)
114- //http://shawnhymel.com/661/learning-the-teensy-lc-interrupt-service-routines/
115- #define FUEL1_COUNTER FTM0_CNT
116- #define FUEL2_COUNTER FTM0_CNT
117- #define FUEL3_COUNTER FTM0_CNT
118- #define FUEL4_COUNTER FTM0_CNT
119- #define FUEL5_COUNTER FTM3_CNT
120- #define FUEL6_COUNTER FTM3_CNT
121- #define FUEL7_COUNTER FTM3_CNT
122- #define FUEL8_COUNTER FTM3_CNT
123-
124- #define IGN1_COUNTER FTM0_CNT
125- #define IGN2_COUNTER FTM0_CNT
126- #define IGN3_COUNTER FTM0_CNT
127- #define IGN4_COUNTER FTM0_CNT
128- #define IGN5_COUNTER FTM3_CNT
129- #define IGN6_COUNTER FTM3_CNT
130- #define IGN7_COUNTER FTM3_CNT
131- #define IGN8_COUNTER FTM3_CNT
132-
133- #define FUEL1_COMPARE FTM0_C0V
134- #define FUEL2_COMPARE FTM0_C1V
135- #define FUEL3_COMPARE FTM0_C2V
136- #define FUEL4_COMPARE FTM0_C3V
137- #define FUEL5_COMPARE FTM3_C0V
138- #define FUEL6_COMPARE FTM3_C1V
139- #define FUEL7_COMPARE FTM3_C2V
140- #define FUEL8_COMPARE FTM3_C3V
141-
142- #define IGN1_COMPARE FTM0_C4V
143- #define IGN2_COMPARE FTM0_C5V
144- #define IGN3_COMPARE FTM0_C6V
145- #define IGN4_COMPARE FTM0_C7V
146- #define IGN5_COMPARE FTM3_C4V
147- #define IGN6_COMPARE FTM3_C5V
148- #define IGN7_COMPARE FTM3_C6V
149- #define IGN8_COMPARE FTM3_C7V
150-
151- #define FUEL1_TIMER_ENABLE() FTM0_C0SC |= FTM_CSC_CHIE //Write 1 to the CHIE (Channel Interrupt Enable) bit of channel 0 Status/Control
152- #define FUEL2_TIMER_ENABLE() FTM0_C1SC |= FTM_CSC_CHIE
153- #define FUEL3_TIMER_ENABLE() FTM0_C2SC |= FTM_CSC_CHIE
154- #define FUEL4_TIMER_ENABLE() FTM0_C3SC |= FTM_CSC_CHIE
155- #define FUEL5_TIMER_ENABLE() FTM3_C0SC |= FTM_CSC_CHIE
156- #define FUEL6_TIMER_ENABLE() FTM3_C1SC |= FTM_CSC_CHIE
157- #define FUEL7_TIMER_ENABLE() FTM3_C2SC |= FTM_CSC_CHIE
158- #define FUEL8_TIMER_ENABLE() FTM3_C3SC |= FTM_CSC_CHIE
159-
160- #define FUEL1_TIMER_DISABLE() FTM0_C0SC &= ~FTM_CSC_CHIE //Write 0 to the CHIE (Channel Interrupt Enable) bit of channel 0 Status/Control
161- #define FUEL2_TIMER_DISABLE() FTM0_C1SC &= ~FTM_CSC_CHIE
162- #define FUEL3_TIMER_DISABLE() FTM0_C2SC &= ~FTM_CSC_CHIE
163- #define FUEL4_TIMER_DISABLE() FTM0_C3SC &= ~FTM_CSC_CHIE
164- #define FUEL5_TIMER_DISABLE() FTM3_C0SC &= ~FTM_CSC_CHIE //Write 0 to the CHIE (Channel Interrupt Enable) bit of channel 0 Status/Control
165- #define FUEL6_TIMER_DISABLE() FTM3_C1SC &= ~FTM_CSC_CHIE
166- #define FUEL7_TIMER_DISABLE() FTM3_C2SC &= ~FTM_CSC_CHIE
167- #define FUEL8_TIMER_DISABLE() FTM3_C3SC &= ~FTM_CSC_CHIE
168-
169- #define IGN1_TIMER_ENABLE() FTM0_C4SC |= FTM_CSC_CHIE
170- #define IGN2_TIMER_ENABLE() FTM0_C5SC |= FTM_CSC_CHIE
171- #define IGN3_TIMER_ENABLE() FTM0_C6SC |= FTM_CSC_CHIE
172- #define IGN4_TIMER_ENABLE() FTM0_C7SC |= FTM_CSC_CHIE
173- #define IGN5_TIMER_ENABLE() FTM3_C4SC |= FTM_CSC_CHIE
174- #define IGN6_TIMER_ENABLE() FTM3_C5SC |= FTM_CSC_CHIE
175- #define IGN7_TIMER_ENABLE() FTM3_C6SC |= FTM_CSC_CHIE
176- #define IGN8_TIMER_ENABLE() FTM3_C7SC |= FTM_CSC_CHIE
177-
178- #define IGN1_TIMER_DISABLE() FTM0_C4SC &= ~FTM_CSC_CHIE
179- #define IGN2_TIMER_DISABLE() FTM0_C5SC &= ~FTM_CSC_CHIE
180- #define IGN3_TIMER_DISABLE() FTM0_C6SC &= ~FTM_CSC_CHIE
181- #define IGN4_TIMER_DISABLE() FTM0_C7SC &= ~FTM_CSC_CHIE
182- #define IGN5_TIMER_DISABLE() FTM3_C4SC &= ~FTM_CSC_CHIE
183- #define IGN6_TIMER_DISABLE() FTM3_C5SC &= ~FTM_CSC_CHIE
184- #define IGN7_TIMER_DISABLE() FTM3_C6SC &= ~FTM_CSC_CHIE
185- #define IGN8_TIMER_DISABLE() FTM3_C7SC &= ~FTM_CSC_CHIE
186-
187- #define MAX_TIMER_PERIOD 139808 // 2.13333333uS * 65535
188- #define MAX_TIMER_PERIOD_SLOW 139808
189- #define uS_TO_TIMER_COMPARE(uS) ((uS * 15) >> 5) //Converts a given number of uS into the required number of timer ticks until that time has passed.
190- //Hack compatibility with AVR timers that run at different speeds
191- #define uS_TO_TIMER_COMPARE_SLOW(uS) ((uS * 15) >> 5)
192-
193-#elif defined(CORE_STM32)
194- #define MAX_TIMER_PERIOD 131070 //The longest period of time (in uS) that the timer can permit (IN this case it is 65535 * 2, as each timer tick is 2uS)
195- #define MAX_TIMER_PERIOD_SLOW 131070 //The longest period of time (in uS) that the timer can permit (IN this case it is 65535 * 2, as each timer tick is 2uS)
196- #define uS_TO_TIMER_COMPARE(uS) (uS >> 1) //Converts a given number of uS into the required number of timer ticks until that time has passed.
197- #define uS_TO_TIMER_COMPARE_SLOW(uS) (uS >> 1) //Converts a given number of uS into the required number of timer ticks until that time has passed.
198- #if defined(ARDUINO_ARCH_STM32) // STM32GENERIC core
199- #include "HardwareTimer.h"
200- #define FUEL1_COUNTER (TIM2)->CNT
201- #define FUEL2_COUNTER (TIM2)->CNT
202- #define FUEL3_COUNTER (TIM2)->CNT
203- #define FUEL4_COUNTER (TIM2)->CNT
204-
205- #define FUEL1_COMPARE (TIM2)->CCR1
206- #define FUEL2_COMPARE (TIM2)->CCR2
207- #define FUEL3_COMPARE (TIM2)->CCR3
208- #define FUEL4_COMPARE (TIM2)->CCR4
209-
210- #define IGN1_COUNTER (TIM3)->CNT
211- #define IGN2_COUNTER (TIM3)->CNT
212- #define IGN3_COUNTER (TIM3)->CNT
213- #define IGN4_COUNTER (TIM3)->CNT
214-
215- #define IGN1_COMPARE (TIM3)->CCR1
216- #define IGN2_COMPARE (TIM3)->CCR2
217- #define IGN3_COMPARE (TIM3)->CCR3
218- #define IGN4_COMPARE (TIM3)->CCR4
219-
220-#ifndef SMALL_FLASH_MODE
221- #define FUEL5_COUNTER (TIM5)->CNT
222- #define FUEL6_COUNTER (TIM5)->CNT
223- #define FUEL7_COUNTER (TIM5)->CNT
224- #define FUEL8_COUNTER (TIM5)->CNT
225-
226- #define FUEL5_COMPARE (TIM5)->CCR1
227- #define FUEL6_COMPARE (TIM5)->CCR2
228- #define FUEL7_COMPARE (TIM5)->CCR3
229- #define FUEL8_COMPARE (TIM5)->CCR4
230-
231- #define IGN5_COUNTER (TIM4)->CNT
232- #define IGN6_COUNTER (TIM4)->CNT
233- #define IGN7_COUNTER (TIM4)->CNT
234- #define IGN8_COUNTER (TIM4)->CNT
235-
236- #define IGN5_COMPARE (TIM4)->CCR1
237- #define IGN6_COMPARE (TIM4)->CCR2
238- #define IGN7_COMPARE (TIM4)->CCR3
239- #define IGN8_COMPARE (TIM4)->CCR4
240-#endif
241- //https://github.com/rogerclarkmelbourne/Arduino_STM32/blob/754bc2969921f1ef262bd69e7faca80b19db7524/STM32F1/system/libmaple/include/libmaple/timer.h#L444
242- #define FUEL1_TIMER_ENABLE() (TIM2)->CCER |= TIM_CCER_CC1E
243- #define FUEL2_TIMER_ENABLE() (TIM2)->CCER |= TIM_CCER_CC2E
244- #define FUEL3_TIMER_ENABLE() (TIM2)->CCER |= TIM_CCER_CC3E
245- #define FUEL4_TIMER_ENABLE() (TIM2)->CCER |= TIM_CCER_CC4E
246-
247- #define FUEL1_TIMER_DISABLE() (TIM2)->CCER &= ~TIM_CCER_CC1E
248- #define FUEL2_TIMER_DISABLE() (TIM2)->CCER &= ~TIM_CCER_CC2E
249- #define FUEL3_TIMER_DISABLE() (TIM2)->CCER &= ~TIM_CCER_CC3E
250- #define FUEL4_TIMER_DISABLE() (TIM2)->CCER &= ~TIM_CCER_CC4E
251-
252- #define IGN1_TIMER_ENABLE() (TIM3)->CCER |= TIM_CCER_CC1E
253- #define IGN2_TIMER_ENABLE() (TIM3)->CCER |= TIM_CCER_CC2E
254- #define IGN3_TIMER_ENABLE() (TIM3)->CCER |= TIM_CCER_CC3E
255- #define IGN4_TIMER_ENABLE() (TIM3)->CCER |= TIM_CCER_CC4E
256-
257- #define IGN1_TIMER_DISABLE() (TIM3)->CCER &= ~TIM_CCER_CC1E
258- #define IGN2_TIMER_DISABLE() (TIM3)->CCER &= ~TIM_CCER_CC2E
259- #define IGN3_TIMER_DISABLE() (TIM3)->CCER &= ~TIM_CCER_CC3E
260- #define IGN4_TIMER_DISABLE() (TIM3)->CCER &= ~TIM_CCER_CC4E
261-
262-#ifndef SMALL_FLASH_MODE
263- #define FUEL5_TIMER_ENABLE() (TIM5)->CCER |= TIM_CCER_CC1E
264- #define FUEL6_TIMER_ENABLE() (TIM5)->CCER |= TIM_CCER_CC2E
265- #define FUEL7_TIMER_ENABLE() (TIM5)->CCER |= TIM_CCER_CC3E
266- #define FUEL8_TIMER_ENABLE() (TIM5)->CCER |= TIM_CCER_CC4E
267-
268- #define FUEL5_TIMER_DISABLE() (TIM5)->CCER &= ~TIM_CCER_CC1E
269- #define FUEL6_TIMER_DISABLE() (TIM5)->CCER &= ~TIM_CCER_CC2E
270- #define FUEL7_TIMER_DISABLE() (TIM5)->CCER &= ~TIM_CCER_CC3E
271- #define FUEL8_TIMER_DISABLE() (TIM5)->CCER &= ~TIM_CCER_CC4E
272-
273- #define IGN5_TIMER_ENABLE() (TIM4)->CCER |= TIM_CCER_CC1E
274- #define IGN6_TIMER_ENABLE() (TIM4)->CCER |= TIM_CCER_CC2E
275- #define IGN7_TIMER_ENABLE() (TIM4)->CCER |= TIM_CCER_CC3E
276- #define IGN8_TIMER_ENABLE() (TIM4)->CCER |= TIM_CCER_CC4E
277-
278- #define IGN5_TIMER_DISABLE() (TIM4)->CCER &= ~TIM_CCER_CC1E
279- #define IGN6_TIMER_DISABLE() (TIM4)->CCER &= ~TIM_CCER_CC2E
280- #define IGN7_TIMER_DISABLE() (TIM4)->CCER &= ~TIM_CCER_CC3E
281- #define IGN8_TIMER_DISABLE() (TIM4)->CCER &= ~TIM_CCER_CC4E
282-#endif
283- #else //libmaple core aka STM32DUINO
284- #define FUEL1_COUNTER (TIMER2->regs).gen->CNT
285- #define FUEL2_COUNTER (TIMER2->regs).gen->CNT
286- #define FUEL3_COUNTER (TIMER2->regs).gen->CNT
287- #define FUEL4_COUNTER (TIMER2->regs).gen->CNT
288-
289- #define FUEL1_COMPARE (TIMER2->regs).gen->CCR1
290- #define FUEL2_COMPARE (TIMER2->regs).gen->CCR2
291- #define FUEL3_COMPARE (TIMER2->regs).gen->CCR3
292- #define FUEL4_COMPARE (TIMER2->regs).gen->CCR4
293-
294- #define IGN1_COUNTER (TIMER3->regs).gen->CNT
295- #define IGN2_COUNTER (TIMER3->regs).gen->CNT
296- #define IGN3_COUNTER (TIMER3->regs).gen->CNT
297- #define IGN4_COUNTER (TIMER3->regs).gen->CNT
298-
299- #define IGN1_COMPARE (TIMER3->regs).gen->CCR1
300- #define IGN2_COMPARE (TIMER3->regs).gen->CCR2
301- #define IGN3_COMPARE (TIMER3->regs).gen->CCR3
302- #define IGN4_COMPARE (TIMER3->regs).gen->CCR4
303-
304-#ifndef SMALL_FLASH_MODE
305- #define FUEL5_COUNTER (TIMER5->regs).gen->CNT
306- #define FUEL6_COUNTER (TIMER5->regs).gen->CNT
307- #define FUEL7_COUNTER (TIMER5->regs).gen->CNT
308- #define FUEL8_COUNTER (TIMER5->regs).gen->CNT
309-
310- #define FUEL5_COMPARE (TIMER5->regs).gen->CCR1
311- #define FUEL6_COMPARE (TIMER5->regs).gen->CCR2
312- #define FUEL7_COMPARE (TIMER5->regs).gen->CCR3
313- #define FUEL8_COMPARE (TIMER5->regs).gen->CCR4
314-
315- #define IGN5_COUNTER (TIMER4->regs).gen->CNT
316- #define IGN6_COUNTER (TIMER4->regs).gen->CNT
317- #define IGN7_COUNTER (TIMER4->regs).gen->CNT
318- #define IGN8_COUNTER (TIMER4->regs).gen->CNT
319-
320- #define IGN5_COMPARE (TIMER4->regs).gen->CCR1
321- #define IGN6_COMPARE (TIMER4->regs).gen->CCR2
322- #define IGN7_COMPARE (TIMER4->regs).gen->CCR3
323- #define IGN8_COMPARE (TIMER4->regs).gen->CCR4
324-#endif
325- //https://github.com/rogerclarkmelbourne/Arduino_STM32/blob/754bc2969921f1ef262bd69e7faca80b19db7524/STM32F1/system/libmaple/include/libmaple/timer.h#L444
326- #define FUEL1_TIMER_ENABLE() (TIMER2->regs).gen->CCER |= TIMER_CCER_CC1E
327- #define FUEL2_TIMER_ENABLE() (TIMER2->regs).gen->CCER |= TIMER_CCER_CC2E
328- #define FUEL3_TIMER_ENABLE() (TIMER2->regs).gen->CCER |= TIMER_CCER_CC3E
329- #define FUEL4_TIMER_ENABLE() (TIMER2->regs).gen->CCER |= TIMER_CCER_CC4E
330-
331- #define FUEL1_TIMER_DISABLE() (TIMER2->regs).gen->CCER &= ~TIMER_CCER_CC1E
332- #define FUEL2_TIMER_DISABLE() (TIMER2->regs).gen->CCER &= ~TIMER_CCER_CC2E
333- #define FUEL3_TIMER_DISABLE() (TIMER2->regs).gen->CCER &= ~TIMER_CCER_CC3E
334- #define FUEL4_TIMER_DISABLE() (TIMER2->regs).gen->CCER &= ~TIMER_CCER_CC4E
335-
336- #define IGN1_TIMER_DISABLE() (TIMER3->regs).gen->CCER &= ~TIMER_CCER_CC1E
337- #define IGN2_TIMER_DISABLE() (TIMER3->regs).gen->CCER &= ~TIMER_CCER_CC2E
338- #define IGN3_TIMER_DISABLE() (TIMER3->regs).gen->CCER &= ~TIMER_CCER_CC3E
339- #define IGN4_TIMER_DISABLE() (TIMER3->regs).gen->CCER &= ~TIMER_CCER_CC4E
340-
341- #define IGN1_TIMER_ENABLE() (TIMER3->regs).gen->CCER |= TIMER_CCER_CC1E
342- #define IGN2_TIMER_ENABLE() (TIMER3->regs).gen->CCER |= TIMER_CCER_CC2E
343- #define IGN3_TIMER_ENABLE() (TIMER3->regs).gen->CCER |= TIMER_CCER_CC3E
344- #define IGN4_TIMER_ENABLE() (TIMER3->regs).gen->CCER |= TIMER_CCER_CC4E
345-
346-#ifndef SMALL_FLASH_MODE
347- #define FUEL5_TIMER_ENABLE() (TIMER5->regs).gen->CCER |= TIMER_CCER_CC1E
348- #define FUEL6_TIMER_ENABLE() (TIMER5->regs).gen->CCER |= TIMER_CCER_CC2E
349- #define FUEL7_TIMER_ENABLE() (TIMER5->regs).gen->CCER |= TIMER_CCER_CC3E
350- #define FUEL8_TIMER_ENABLE() (TIMER5->regs).gen->CCER |= TIMER_CCER_CC4E
351-
352- #define IGN5_TIMER_ENABLE() (TIMER4->regs).gen->CCER |= TIMER_CCER_CC1E
353- #define IGN6_TIMER_ENABLE() (TIMER4->regs).gen->CCER |= TIMER_CCER_CC2E
354- #define IGN7_TIMER_ENABLE() (TIMER4->regs).gen->CCER |= TIMER_CCER_CC3E
355- #define IGN8_TIMER_ENABLE() (TIMER4->regs).gen->CCER |= TIMER_CCER_CC4E
356-
357- #define FUEL5_TIMER_DISABLE() (TIMER5->regs).gen->CCER &= ~TIMER_CCER_CC1E
358- #define FUEL6_TIMER_DISABLE() (TIMER5->regs).gen->CCER &= ~TIMER_CCER_CC2E
359- #define FUEL7_TIMER_DISABLE() (TIMER5->regs).gen->CCER &= ~TIMER_CCER_CC3E
360- #define FUEL8_TIMER_DISABLE() (TIMER5->regs).gen->CCER &= ~TIMER_CCER_CC4E
361-
362- #define IGN5_TIMER_DISABLE() (TIMER4->regs).gen->CCER &= ~TIMER_CCER_CC1E
363- #define IGN6_TIMER_DISABLE() (TIMER4->regs).gen->CCER &= ~TIMER_CCER_CC2E
364- #define IGN7_TIMER_DISABLE() (TIMER4->regs).gen->CCER &= ~TIMER_CCER_CC3E
365- #define IGN8_TIMER_DISABLE() (TIMER4->regs).gen->CCER &= ~TIMER_CCER_CC4E
366-#endif
367- #endif
368-#endif
369-
37031 void initialiseSchedulers();
37132 void setFuelSchedule1(unsigned long timeout, unsigned long duration);
37233 void setFuelSchedule2(unsigned long timeout, unsigned long duration);
--- branches/Ver1.00_base/speeduino/speeduino.h (revision 32)
+++ branches/Ver1.00_base/speeduino/speeduino.h (revision 33)
@@ -11,4 +11,67 @@
1111 uint16_t calculateInjector4StartAngle(unsigned int);
1212 uint16_t calculateInjector4StartAngle(unsigned int);
1313
14+struct config2 configPage2;
15+struct config4 configPage4; //Done
16+struct config6 configPage6;
17+struct config9 configPage9;
18+struct config10 configPage10;
19+
20+uint16_t req_fuel_uS, inj_opentime_uS;
21+uint16_t staged_req_fuel_mult_pri;
22+uint16_t staged_req_fuel_mult_sec;
23+
24+bool ignitionOn = false; //The current state of the ignition system
25+bool fuelOn = false; //The current state of the ignition system
26+
27+byte cltCalibrationTable[CALIBRATION_TABLE_SIZE];
28+byte iatCalibrationTable[CALIBRATION_TABLE_SIZE];
29+byte o2CalibrationTable[CALIBRATION_TABLE_SIZE];
30+
31+unsigned long counter;
32+unsigned long currentLoopTime; //The time the current loop started (uS)
33+unsigned long previousLoopTime; //The time the previous loop started (uS)
34+
35+byte maxIgnOutputs = 1; //Used for rolling rev limiter
36+byte curRollingCut = 0; //Rolling rev limiter, current ignition channel being cut
37+byte rollingCutCounter = 0; //how many times (revolutions) the ignition has been cut in a row
38+uint32_t rollingCutLastRev = 0; //Tracks whether we're on the same or a different rev for the rolling cut
39+
40+
41+unsigned long secCounter; //The next time to incremen 'runSecs' counter.
42+int channel1IgnDegrees; //The number of crank degrees until cylinder 1 is at TDC (This is obviously 0 for virtually ALL engines, but there's some weird ones)
43+int channel2IgnDegrees; //The number of crank degrees until cylinder 2 (and 5/6/7/8) is at TDC
44+int channel3IgnDegrees; //The number of crank degrees until cylinder 3 (and 5/6/7/8) is at TDC
45+int channel4IgnDegrees; //The number of crank degrees until cylinder 4 (and 5/6/7/8) is at TDC
46+int channel5IgnDegrees; //The number of crank degrees until cylinder 5 is at TDC
47+int channel6IgnDegrees; //The number of crank degrees until cylinder 6 is at TDC
48+int channel7IgnDegrees; //The number of crank degrees until cylinder 7 is at TDC
49+int channel8IgnDegrees; //The number of crank degrees until cylinder 8 is at TDC
50+int channel1InjDegrees; //The number of crank degrees until cylinder 1 is at TDC (This is obviously 0 for virtually ALL engines, but there's some weird ones)
51+int channel2InjDegrees; //The number of crank degrees until cylinder 2 (and 5/6/7/8) is at TDC
52+int channel3InjDegrees; //The number of crank degrees until cylinder 3 (and 5/6/7/8) is at TDC
53+int channel4InjDegrees; //The number of crank degrees until cylinder 4 (and 5/6/7/8) is at TDC
54+int channel5InjDegrees; //The number of crank degrees until cylinder 5 is at TDC
55+int channel6InjDegrees; //The number of crank degrees until cylinder 6 is at TDC
56+int channel7InjDegrees; //The number of crank degrees until cylinder 7 is at TDC
57+int channel8InjDegrees; //The number of crank degrees until cylinder 8 is at TDC
58+
59+//These are the functions the get called to begin and end the ignition coil charging. They are required for the various spark output modes
60+void (*ign1StartFunction)();
61+void (*ign1EndFunction)();
62+void (*ign2StartFunction)();
63+void (*ign2EndFunction)();
64+void (*ign3StartFunction)();
65+void (*ign3EndFunction)();
66+void (*ign4StartFunction)();
67+void (*ign4EndFunction)();
68+void (*ign5StartFunction)();
69+void (*ign5EndFunction)();
70+void (*ign6StartFunction)();
71+void (*ign6EndFunction)();
72+void (*ign7StartFunction)();
73+void (*ign7EndFunction)();
74+void (*ign8StartFunction)();
75+void (*ign8EndFunction)();
76+
1477 #endif
--- branches/Ver1.00_base/speeduino/src/FastCRC/FastCRC_tables.h (revision 32)
+++ branches/Ver1.00_base/speeduino/src/FastCRC/FastCRC_tables.h (revision 33)
@@ -31,7 +31,7 @@
3131 #define FastCRC_tables
3232 #include "inttypes.h"
3333
34-#if defined(__AVR__) || defined(STM32_MCU_SERIES) || defined(ARDUINO_ARCH_STM32) || defined(_VARIANT_ARDUINO_STM32_)
34+#if defined(__AVR__) || defined(STM32_MCU_SERIES) || defined(ARDUINO_ARCH_STM32) || defined(_VARIANT_ARDUINO_STM32_) || defined(__SAMD21G18A__)
3535 #include <avr/pgmspace.h>
3636 #else
3737 #include <pgmspace.h>
--- branches/Ver1.00_base/speeduino/src/FlashStorage/FlashAsEEPROM.cpp (nonexistent)
+++ branches/Ver1.00_base/speeduino/src/FlashStorage/FlashAsEEPROM.cpp (revision 33)
@@ -0,0 +1,76 @@
1+/*
2+ EEPROM like API that uses Arduino Zero's flash memory.
3+ Written by A. Christian
4+
5+ Copyright (c) 2015-2016 Arduino LLC. All right reserved.
6+
7+ This library is free software; you can redistribute it and/or
8+ modify it under the terms of the GNU Lesser General Public
9+ License as published by the Free Software Foundation; either
10+ version 2.1 of the License, or (at your option) any later version.
11+
12+ This library is distributed in the hope that it will be useful,
13+ but WITHOUT ANY WARRANTY; without even the implied warranty of
14+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
15+ See the GNU Lesser General Public License for more details.
16+
17+ You should have received a copy of the GNU Lesser General Public
18+ License along with this library; if not, write to the Free Software
19+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
20+*/
21+#if defined(__SAMD21G18A__)
22+#include "FlashAsEEPROM.h"
23+
24+FlashStorage(eeprom_storage, EEPROM_EMULATION);
25+
26+EEPROMClass::EEPROMClass(void) : _initialized(false), _dirty(false) {
27+ // Empty
28+}
29+
30+uint8_t EEPROMClass::read(int address)
31+{
32+ if (!_initialized) init();
33+ return _eeprom.data[address];
34+}
35+
36+void EEPROMClass::update(int address, uint8_t value)
37+{
38+ if (!_initialized) init();
39+ if (_eeprom.data[address] != value) {
40+ _dirty = true;
41+ _eeprom.data[address] = value;
42+ }
43+}
44+
45+void EEPROMClass::write(int address, uint8_t value)
46+{
47+ update(address, value);
48+}
49+
50+void EEPROMClass::init()
51+{
52+ _eeprom = eeprom_storage.read();
53+ if (!_eeprom.valid) {
54+ memset(_eeprom.data, 0xFF, EEPROM_EMULATION_SIZE);
55+ }
56+ _initialized = true;
57+}
58+
59+bool EEPROMClass::isValid()
60+{
61+ if (!_initialized) init();
62+ return _eeprom.valid;
63+}
64+
65+void EEPROMClass::commit()
66+{
67+ if (!_initialized) init();
68+ if (_dirty) {
69+ _eeprom.valid = true;
70+ eeprom_storage.write(_eeprom);
71+ }
72+}
73+
74+EEPROMClass EEPROM;
75+
76+#endif
\ No newline at end of file
--- branches/Ver1.00_base/speeduino/src/FlashStorage/FlashAsEEPROM.h (nonexistent)
+++ branches/Ver1.00_base/speeduino/src/FlashStorage/FlashAsEEPROM.h (revision 33)
@@ -0,0 +1,87 @@
1+/*
2+ EEPROM like API that uses Arduino Zero's flash memory.
3+ Written by A. Christian
4+
5+ Copyright (c) 2015-2016 Arduino LLC. All right reserved.
6+
7+ This library is free software; you can redistribute it and/or
8+ modify it under the terms of the GNU Lesser General Public
9+ License as published by the Free Software Foundation; either
10+ version 2.1 of the License, or (at your option) any later version.
11+
12+ This library is distributed in the hope that it will be useful,
13+ but WITHOUT ANY WARRANTY; without even the implied warranty of
14+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
15+ See the GNU Lesser General Public License for more details.
16+
17+ You should have received a copy of the GNU Lesser General Public
18+ License along with this library; if not, write to the Free Software
19+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
20+*/
21+
22+#ifndef FLASH_AS_EEPROM_h
23+#define FLASH_AS_EEPROM_h
24+
25+#include "FlashStorage.h"
26+
27+#ifndef EEPROM_EMULATION_SIZE
28+#define EEPROM_EMULATION_SIZE 1024
29+#endif
30+
31+typedef struct {
32+ byte data[EEPROM_EMULATION_SIZE];
33+ boolean valid;
34+} EEPROM_EMULATION;
35+
36+
37+class EEPROMClass {
38+
39+ public:
40+ EEPROMClass(void);
41+
42+ /**
43+ * Read an eeprom cell
44+ * @param index
45+ * @return value
46+ */
47+ uint8_t read(int);
48+
49+ /**
50+ * Write value to an eeprom cell
51+ * @param index
52+ * @param value
53+ */
54+ void write(int, uint8_t);
55+
56+ /**
57+ * Update a eeprom cell
58+ * @param index
59+ * @param value
60+ */
61+ void update(int, uint8_t);
62+
63+ /**
64+ * Check whether the eeprom data is valid
65+ * @return true, if eeprom data is valid (has been written at least once), false if not
66+ */
67+ bool isValid();
68+
69+ /**
70+ * Write previously made eeprom changes to the underlying flash storage
71+ * Use this with care: Each and every commit will harm the flash and reduce it's lifetime (like with every flash memory)
72+ */
73+ void commit();
74+
75+ uint16_t length() { return EEPROM_EMULATION_SIZE; }
76+
77+ private:
78+ void init();
79+
80+ bool _initialized;
81+ EEPROM_EMULATION _eeprom;
82+ bool _dirty;
83+};
84+
85+extern EEPROMClass EEPROM;
86+
87+#endif
--- branches/Ver1.00_base/speeduino/src/FlashStorage/FlashStorage.cpp (nonexistent)
+++ branches/Ver1.00_base/speeduino/src/FlashStorage/FlashStorage.cpp (revision 33)
@@ -0,0 +1,104 @@
1+/*
2+ Copyright (c) 2015 Arduino LLC. All right reserved.
3+ Written by Cristian Maglie
4+
5+ This library is free software; you can redistribute it and/or
6+ modify it under the terms of the GNU Lesser General Public
7+ License as published by the Free Software Foundation; either
8+ version 2.1 of the License, or (at your option) any later version.
9+
10+ This library is distributed in the hope that it will be useful,
11+ but WITHOUT ANY WARRANTY; without even the implied warranty of
12+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
13+ See the GNU Lesser General Public License for more details.
14+
15+ You should have received a copy of the GNU Lesser General Public
16+ License along with this library; if not, write to the Free Software
17+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
18+*/
19+#if defined(__SAMD21G18A__)
20+#include "FlashStorage.h"
21+
22+
23+
24+static const uint32_t pageSizes[] = { 8, 16, 32, 64, 128, 256, 512, 1024 };
25+
26+FlashClass::FlashClass(const void *flash_addr, uint32_t size) :
27+ PAGE_SIZE(pageSizes[NVMCTRL->PARAM.bit.PSZ]),
28+ PAGES(NVMCTRL->PARAM.bit.NVMP),
29+ MAX_FLASH(PAGE_SIZE * PAGES),
30+ ROW_SIZE(PAGE_SIZE * 4),
31+ flash_address((volatile void *)flash_addr),
32+ flash_size(size)
33+{
34+}
35+
36+static inline uint32_t read_unaligned_uint32(const void *data)
37+{
38+ union {
39+ uint32_t u32;
40+ uint8_t u8[4];
41+ } res;
42+ const uint8_t *d = (const uint8_t *)data;
43+ res.u8[0] = d[0];
44+ res.u8[1] = d[1];
45+ res.u8[2] = d[2];
46+ res.u8[3] = d[3];
47+ return res.u32;
48+}
49+
50+void FlashClass::write(const volatile void *flash_ptr, const void *data, uint32_t size)
51+{
52+ // Calculate data boundaries
53+ size = (size + 3) / 4;
54+ volatile uint32_t *dst_addr = (volatile uint32_t *)flash_ptr;
55+ const uint8_t *src_addr = (uint8_t *)data;
56+
57+ // Disable automatic page write
58+ NVMCTRL->CTRLB.bit.MANW = 1;
59+
60+ // Do writes in pages
61+ while (size) {
62+ // Execute "PBC" Page Buffer Clear
63+ NVMCTRL->CTRLA.reg = NVMCTRL_CTRLA_CMDEX_KEY | NVMCTRL_CTRLA_CMD_PBC;
64+ while (NVMCTRL->INTFLAG.bit.READY == 0) { }
65+
66+ // Fill page buffer
67+ uint32_t i;
68+ for (i=0; i<(PAGE_SIZE/4) && size; i++) {
69+ *dst_addr = read_unaligned_uint32(src_addr);
70+ src_addr += 4;
71+ dst_addr++;
72+ size--;
73+ }
74+
75+ // Execute "WP" Write Page
76+ NVMCTRL->CTRLA.reg = NVMCTRL_CTRLA_CMDEX_KEY | NVMCTRL_CTRLA_CMD_WP;
77+ while (NVMCTRL->INTFLAG.bit.READY == 0) { }
78+ }
79+}
80+
81+void FlashClass::erase(const volatile void *flash_ptr, uint32_t size)
82+{
83+ const uint8_t *ptr = (const uint8_t *)flash_ptr;
84+ while (size > ROW_SIZE) {
85+ erase(ptr);
86+ ptr += ROW_SIZE;
87+ size -= ROW_SIZE;
88+ }
89+ erase(ptr);
90+}
91+
92+void FlashClass::erase(const volatile void *flash_ptr)
93+{
94+ NVMCTRL->ADDR.reg = ((uint32_t)flash_ptr) / 2;
95+ NVMCTRL->CTRLA.reg = NVMCTRL_CTRLA_CMDEX_KEY | NVMCTRL_CTRLA_CMD_ER;
96+ while (!NVMCTRL->INTFLAG.bit.READY) { }
97+}
98+
99+void FlashClass::read(const volatile void *flash_ptr, void *data, uint32_t size)
100+{
101+ memcpy(data, (const void *)flash_ptr, size);
102+}
103+
104+#endif
\ No newline at end of file
--- branches/Ver1.00_base/speeduino/src/FlashStorage/FlashStorage.h (nonexistent)
+++ branches/Ver1.00_base/speeduino/src/FlashStorage/FlashStorage.h (revision 33)
@@ -0,0 +1,77 @@
1+/*
2+ Copyright (c) 2015 Arduino LLC. All right reserved.
3+ Written by Cristian Maglie
4+
5+ This library is free software; you can redistribute it and/or
6+ modify it under the terms of the GNU Lesser General Public
7+ License as published by the Free Software Foundation; either
8+ version 2.1 of the License, or (at your option) any later version.
9+
10+ This library is distributed in the hope that it will be useful,
11+ but WITHOUT ANY WARRANTY; without even the implied warranty of
12+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
13+ See the GNU Lesser General Public License for more details.
14+
15+ You should have received a copy of the GNU Lesser General Public
16+ License along with this library; if not, write to the Free Software
17+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
18+*/
19+
20+#pragma once
21+
22+#include <Arduino.h>
23+
24+// Concatenate after macro expansion
25+#define PPCAT_NX(A, B) A ## B
26+#define PPCAT(A, B) PPCAT_NX(A, B)
27+
28+#define Flash(name, size) \
29+ __attribute__((__aligned__(256))) \
30+ static const uint8_t PPCAT(_data,name)[(size+255)/256*256] = { }; \
31+ FlashClass name(PPCAT(_data,name), size);
32+
33+#define FlashStorage(name, T) \
34+ __attribute__((__aligned__(256))) \
35+ static const uint8_t PPCAT(_data,name)[(sizeof(T)+255)/256*256] = { }; \
36+ FlashStorageClass<T> name(PPCAT(_data,name));
37+
38+class FlashClass {
39+public:
40+ FlashClass(const void *flash_addr = NULL, uint32_t size = 0);
41+
42+ void write(const void *data) { write(flash_address, data, flash_size); }
43+ void erase() { erase(flash_address, flash_size); }
44+ void read(void *data) { read(flash_address, data, flash_size); }
45+
46+ void write(const volatile void *flash_ptr, const void *data, uint32_t size);
47+ void erase(const volatile void *flash_ptr, uint32_t size);
48+ void read(const volatile void *flash_ptr, void *data, uint32_t size);
49+
50+private:
51+ void erase(const volatile void *flash_ptr);
52+
53+ const uint32_t PAGE_SIZE, PAGES, MAX_FLASH, ROW_SIZE;
54+ const volatile void *flash_address;
55+ const uint32_t flash_size;
56+};
57+
58+template<class T>
59+class FlashStorageClass {
60+public:
61+ FlashStorageClass(const void *flash_addr) : flash(flash_addr, sizeof(T)) { };
62+
63+ // Write data into flash memory.
64+ // Compiler is able to optimize parameter copy.
65+ inline void write(T data) { flash.erase(); flash.write(&data); }
66+
67+ // Read data from flash into variable.
68+ inline void read(T *data) { flash.read(data); }
69+
70+ // Overloaded version of read.
71+ // Compiler is able to optimize copy-on-return.
72+ inline T read() { T data; read(&data); return data; }
73+
74+private:
75+ FlashClass flash;
76+};
77+
--- branches/Ver1.00_base/speeduino/storage.h (revision 32)
+++ branches/Ver1.00_base/speeduino/storage.h (revision 33)
@@ -1,6 +1,8 @@
11 #ifndef STORAGE_H
22 #define STORAGE_H
33
4+#include "globals.h"
5+
46 void writeAllConfig();
57 void writeConfig(byte);
68 void loadConfig();
@@ -7,6 +9,13 @@
79 void loadCalibration();
810 void writeCalibration();
911
12+//These are utility functions that prevent other files from having to use EEPROM.h directly
13+byte readLastBaro();
14+void storeLastBaro(byte);
15+void storeCalibrationValue(byte, byte);
16+byte readEEPROMVersion();
17+void storeEEPROMVersion(byte);
18+
1019 #if defined(CORE_STM32) || defined(CORE_TEENSY)
1120 #define EEPROM_MAX_WRITE_BLOCK 64 //The maximum number of write operations that will be performed in one go. If we try to write to the EEPROM too fast (Each write takes ~3ms) then the rest of the system can hang)
1221 #else
@@ -130,8 +139,8 @@
130139 #define EEPROM_CONFIG8_MAP4 1653
131140 #define EEPROM_CONFIG8_XBINS4 1689
132141 #define EEPROM_CONFIG8_YBINS4 1695
133-#define EEPROM_CONFIG9_START 1710
134-#define EEPROM_CONFIG9_END 1902
142+#define EEPROM_CONFIG9_START 1710
143+#define EEPROM_CONFIG9_END 1902
135144 #define EEPROM_CONFIG10_START 1902
136145 #define EEPROM_CONFIG10_END 2094
137146 #define EEPROM_CONFIG12_XSIZE 2094 //[PJSC]
@@ -142,7 +151,8 @@
142151 #define EEPROM_CONFIG12_END 2384 //[PJSC]
143152
144153 //Calibration data is stored at the end of the EEPROM (This is in case any further calibration tables are needed as they are large blocks)
145-#define EEPROM_LAST_BARO 2558
154+//[PJSC ver1.10]#define EEPROM_LAST_BARO 2558
155+#define EEPROM_LAST_BARO 2557 //[PJSC ver1.10]
146156 #define EEPROM_CALIBRATION_O2 2559
147157 #define EEPROM_CALIBRATION_IAT 3071
148158 #define EEPROM_CALIBRATION_CLT 3583
--- branches/Ver1.00_base/speeduino/table.h (revision 32)
+++ branches/Ver1.00_base/speeduino/table.h (revision 33)
@@ -31,7 +31,8 @@
3131 byte cacheTime; //TRacks when the last cache value was set so it can expire after x seconds. A timeout is required to pickup when a tuning value is changed, otherwise the old cached value will continue to be returned as the X value isn't changing.
3232 };
3333
34-void table2D_setSize(struct table2D targetTable, byte newSize);
34+//void table2D_setSize(struct table2D targetTable, byte newSize);
35+void table2D_setSize(struct table2D, byte);
3536
3637 struct table3D {
3738
@@ -49,7 +50,8 @@
4950 byte lastYMax, lastYMin;
5051 };
5152
52-void table3D_setSize(struct table3D *targetTable, byte newSize);
53+//void table3D_setSize(struct table3D *targetTable, byte);
54+void table3D_setSize(struct table3D *targetTable, byte);
5355
5456 /*
5557 3D Tables have an origin (0,0) in the top left hand corner. Vertical axis is expressed first.
--- branches/Ver1.00_base/speeduino/timers.h (revision 32)
+++ branches/Ver1.00_base/speeduino/timers.h (revision 33)
@@ -29,14 +29,6 @@
2929 volatile uint16_t lastRPM_100ms; //Need to record this for rpmDOT calculation
3030 volatile uint16_t last250msLoopCount = 1000; //Set to effectively random number on startup. Just need this to be different to what mainLoopCount equals initially (Probably 0)
3131
32-#if defined(TIMER5_MICROS)
33- //#define micros() (((timer5_overflow_count << 16) + TCNT5) * 4) //Fast version of micros() that uses the 4uS tick of timer5. See timers.ino for the overflow ISR of timer5
34- #define millis() (ms_counter) //Replaces the standard millis() function with this macro. It is both faster and more accurate. See timers.ino for its counter increment.
35- static inline unsigned long micros_safe(); //A version of micros() that is interrupt safe
36-#else
37- #define micros_safe() micros() //If the timer5 method is not used, the micros_safe() macro is simply an alias for the normal micros()
38-#endif
39-
4032 #if defined (CORE_TEENSY)
4133 IntervalTimer lowResTimer;
4234 void oneMSInterval();
--- branches/Ver1.00_base/speeduino/utils.h (revision 32)
+++ branches/Ver1.00_base/speeduino/utils.h (revision 33)
@@ -6,49 +6,8 @@
66
77 #include <Arduino.h>
88
9-uint16_t freeRam ();
10-void setPinMapping(byte boardID);
11-void initialiseTriggers();
9+void setResetControlPinState();
10+byte pinTranslate(byte);
1211
13-//This is dumb, but it'll do for now to get things compiling
14-#if defined(CORE_STM32)
15- //STM32F1/variants/.../board.cpp
16- #if defined (STM32F4)
17- #define A0 PA0
18- #define A1 PA1
19- #define A2 PA2
20- #define A3 PA3
21- #define A4 PA4
22- #define A5 PA5
23- #define A6 PA6
24- #define A7 PA7
25- #define A8 PB0
26- #define A9 PB1
27- #define A10 PC0
28- #define A11 PC1
29- #define A12 PC2
30- #define A13 PC3
31- #define A14 PC4
32- #define A15 PC5
33- #else
34- #define A0 PB0
35- #define A1 PA7
36- #define A2 PA6
37- #define A3 PA5
38- #define A4 PA4
39- #define A5 PA3
40- #define A6 PA2
41- #define A7 PA1
42- #define A8 PA0
43- //STM32F1 have only 9 12bit adc
44- #define A9 PB0
45- #define A10 PA7
46- #define A11 PA6
47- #define A12 PA5
48- #define A13 PA4
49- #define A14 PA3
50- #define A15 PA2
51- #endif
52-#endif
5312
5413 #endif // UTILS_H