Speeduino
Loading...
Searching...
No Matches
board_teensy35.h
Go to the documentation of this file.
1#pragma once
2
5#include <Arduino.h>
6#include "src/pins/inputPin.h"
7#include "src/pins/outputPin.h"
8
9#define CORE_TEENSY35
10
11/*
12***********************************************************************************************************
13* General
14*/
15
20using COMPARE_TYPE = uint16_t;
21
22namespace {
24 constexpr auto TICK_RESOLUTION = 2.13333333333333;
25
27 constexpr uint32_t TICK_CONVERTER_PRECISION = 8UL;
28}
29
31static constexpr COMPARE_TYPE uS_TO_TIMER_COMPARE(uint32_t micros)
32{
33 constexpr uint32_t MULTIPLIER = (uint32_t)((1UL<<TICK_CONVERTER_PRECISION)/TICK_RESOLUTION);
34 return (COMPARE_TYPE)((micros * MULTIPLIER) >> TICK_CONVERTER_PRECISION);
35}
36
38static constexpr uint32_t ticksToMicros(COMPARE_TYPE ticks)
39{
40 constexpr uint32_t MULTIPLIER = (uint32_t)((1UL<<TICK_CONVERTER_PRECISION)*TICK_RESOLUTION);
41 return (ticks * MULTIPLIER) >> TICK_CONVERTER_PRECISION;
42}
43
44#define TS_SERIAL_BUFFER_SIZE 517 //Size of the serial buffer used by new comms protocol. For SD transfers this must be at least 512 + 1 (flag) + 4 (sector)
45#define FPU_MAX_SIZE 32 //Size of the FPU buffer. 0 means no FPU.
46#define SD_LOGGING //SD logging enabled by default for Teensy 3.5 as it has the slot built in
47#define BOARD_MAX_DIGITAL_PINS 57
48#define BOARD_MAX_IO_PINS 57
49#define RTC_ENABLED
50#define RTC_LIB_H "TimeLib.h"
51#define SD_CONFIG SdioConfig(FIFO_SDIO) //Set Teensy to use SDIO in FIFO mode. This is the fastest SD mode on Teensy as it offloads most of the writes
52constexpr uint16_t BLOCKING_FACTOR = 251;
53constexpr uint16_t TABLE_BLOCKING_FACTOR = 256;
54
55#define PWM_FAN_AVAILABLE
56static inline bool pinIsReserved(uint8_t pin) {
57 return (pin == 0U)
58 || (pin == 1U)
59 || (pin == 3U)
60 || (pin == 4U)
61 ;
62}
63#define INJ_CHANNELS 8
64#define IGN_CHANNELS 8
65
66/*
67***********************************************************************************************************
68* Schedules
69*/
70//shawnhymel.com/661/learning-the-teensy-lc-interrupt-service-routines/
71#define FUEL1_COUNTER FTM0_CNT
72#define FUEL2_COUNTER FTM0_CNT
73#define FUEL3_COUNTER FTM0_CNT
74#define FUEL4_COUNTER FTM0_CNT
75#define FUEL5_COUNTER FTM3_CNT
76#define FUEL6_COUNTER FTM3_CNT
77#define FUEL7_COUNTER FTM3_CNT
78#define FUEL8_COUNTER FTM3_CNT
79
80#define IGN1_COUNTER FTM0_CNT
81#define IGN2_COUNTER FTM0_CNT
82#define IGN3_COUNTER FTM0_CNT
83#define IGN4_COUNTER FTM0_CNT
84#define IGN5_COUNTER FTM3_CNT
85#define IGN6_COUNTER FTM3_CNT
86#define IGN7_COUNTER FTM3_CNT
87#define IGN8_COUNTER FTM3_CNT
88
89#define FUEL1_COMPARE FTM0_C0V
90#define FUEL2_COMPARE FTM0_C1V
91#define FUEL3_COMPARE FTM0_C2V
92#define FUEL4_COMPARE FTM0_C3V
93#define FUEL5_COMPARE FTM3_C0V
94#define FUEL6_COMPARE FTM3_C1V
95#define FUEL7_COMPARE FTM3_C2V
96#define FUEL8_COMPARE FTM3_C3V
97
98#define IGN1_COMPARE FTM0_C4V
99#define IGN2_COMPARE FTM0_C5V
100#define IGN3_COMPARE FTM0_C6V
101#define IGN4_COMPARE FTM0_C7V
102#define IGN5_COMPARE FTM3_C4V
103#define IGN6_COMPARE FTM3_C5V
104#define IGN7_COMPARE FTM3_C6V
105#define IGN8_COMPARE FTM3_C7V
106
107static inline void FUEL1_TIMER_ENABLE(void) {FTM0_C0SC |= FTM_CSC_CHIE;} //Write 1 to the CHIE (Channel Interrupt Enable) bit of channel 0 Status/Control
108static inline void FUEL2_TIMER_ENABLE(void) {FTM0_C1SC |= FTM_CSC_CHIE;}
109static inline void FUEL3_TIMER_ENABLE(void) {FTM0_C2SC |= FTM_CSC_CHIE;}
110static inline void FUEL4_TIMER_ENABLE(void) {FTM0_C3SC |= FTM_CSC_CHIE;}
111static inline void FUEL5_TIMER_ENABLE(void) {FTM3_C0SC |= FTM_CSC_CHIE;}
112static inline void FUEL6_TIMER_ENABLE(void) {FTM3_C1SC |= FTM_CSC_CHIE;}
113static inline void FUEL7_TIMER_ENABLE(void) {FTM3_C2SC |= FTM_CSC_CHIE;}
114static inline void FUEL8_TIMER_ENABLE(void) {FTM3_C3SC |= FTM_CSC_CHIE;}
115
116static inline void FUEL1_TIMER_DISABLE(void) {FTM0_C0SC &= ~FTM_CSC_CHIE;} //Write 0 to the CHIE (Channel Interrupt Enable) bit of channel 0 Status/Control
117static inline void FUEL2_TIMER_DISABLE(void) {FTM0_C1SC &= ~FTM_CSC_CHIE;}
118static inline void FUEL3_TIMER_DISABLE(void) {FTM0_C2SC &= ~FTM_CSC_CHIE;}
119static inline void FUEL4_TIMER_DISABLE(void) {FTM0_C3SC &= ~FTM_CSC_CHIE;}
120static inline void FUEL5_TIMER_DISABLE(void) {FTM3_C0SC &= ~FTM_CSC_CHIE;} //Write 0 to the CHIE (Channel Interrupt Enable) bit of channel 0 Status/Control
121static inline void FUEL6_TIMER_DISABLE(void) {FTM3_C1SC &= ~FTM_CSC_CHIE;}
122static inline void FUEL7_TIMER_DISABLE(void) {FTM3_C2SC &= ~FTM_CSC_CHIE;}
123static inline void FUEL8_TIMER_DISABLE(void) {FTM3_C3SC &= ~FTM_CSC_CHIE;}
124
125static inline void IGN1_TIMER_ENABLE(void) {FTM0_C4SC |= FTM_CSC_CHIE;}
126static inline void IGN2_TIMER_ENABLE(void) {FTM0_C5SC |= FTM_CSC_CHIE;}
127static inline void IGN3_TIMER_ENABLE(void) {FTM0_C6SC |= FTM_CSC_CHIE;}
128static inline void IGN4_TIMER_ENABLE(void) {FTM0_C7SC |= FTM_CSC_CHIE;}
129static inline void IGN5_TIMER_ENABLE(void) {FTM3_C4SC |= FTM_CSC_CHIE;}
130static inline void IGN6_TIMER_ENABLE(void) {FTM3_C5SC |= FTM_CSC_CHIE;}
131static inline void IGN7_TIMER_ENABLE(void) {FTM3_C6SC |= FTM_CSC_CHIE;}
132static inline void IGN8_TIMER_ENABLE(void) {FTM3_C7SC |= FTM_CSC_CHIE;}
133
134static inline void IGN1_TIMER_DISABLE(void) {FTM0_C4SC &= ~FTM_CSC_CHIE;}
135static inline void IGN2_TIMER_DISABLE(void) {FTM0_C5SC &= ~FTM_CSC_CHIE;}
136static inline void IGN3_TIMER_DISABLE(void) {FTM0_C6SC &= ~FTM_CSC_CHIE;}
137static inline void IGN4_TIMER_DISABLE(void) {FTM0_C7SC &= ~FTM_CSC_CHIE;}
138static inline void IGN5_TIMER_DISABLE(void) {FTM3_C4SC &= ~FTM_CSC_CHIE;}
139static inline void IGN6_TIMER_DISABLE(void) {FTM3_C5SC &= ~FTM_CSC_CHIE;}
140static inline void IGN7_TIMER_DISABLE(void) {FTM3_C6SC &= ~FTM_CSC_CHIE;}
141static inline void IGN8_TIMER_DISABLE(void) {FTM3_C7SC &= ~FTM_CSC_CHIE;}
142
143/*
144***********************************************************************************************************
145* Auxiliaries
146*/
147#define ENABLE_BOOST_TIMER() FTM1_C0SC |= FTM_CSC_CHIE
148#define DISABLE_BOOST_TIMER() FTM1_C0SC &= ~FTM_CSC_CHIE
149
150#define ENABLE_VVT_TIMER() FTM1_C1SC |= FTM_CSC_CHIE
151#define DISABLE_VVT_TIMER() FTM1_C1SC &= ~FTM_CSC_CHIE
152
153#define ENABLE_FAN_TIMER() FTM2_C1SC |= FTM_CSC_CHIE
154#define DISABLE_FAN_TIMER() FTM2_C1SC &= ~FTM_CSC_CHIE
155
156#define BOOST_TIMER_COMPARE FTM1_C0V
157#define BOOST_TIMER_COUNTER FTM1_CNT
158#define VVT_TIMER_COMPARE FTM1_C1V
159#define VVT_TIMER_COUNTER FTM1_CNT
160#define FAN_TIMER_COMPARE FTM2_C1V
161#define FAN_TIMER_COUNTER FTM2_CNT
162
163/*
164***********************************************************************************************************
165* Idle
166*/
167#define IDLE_COUNTER FTM2_CNT
168#define IDLE_COMPARE FTM2_C0V
169
170#define IDLE_TIMER_ENABLE() FTM2_C0SC |= FTM_CSC_CHIE
171#define IDLE_TIMER_DISABLE() FTM2_C0SC &= ~FTM_CSC_CHIE
172
173/*
174***********************************************************************************************************
175* CAN / Second serial
176*/
177#define SECONDARY_SERIAL_T HardwareSerial
178
179#include <FlexCAN_T4.h>
180#define NATIVE_CAN_AVAILABLE
181
182using boardInputPin_t = inputPin_t;
183using boardOutputPin_t = outputPin_t;
184
186constexpr uint8_t ANALOG_PINS[] = { _ANALOG_PINS_A0_A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25 };
uint16_t COMPARE_TYPE
The timer overflow type.
Definition board_avr2560.h:34
fastInputPin_t boardInputPin_t
Definition board_avr2560.h:175
fastOutputPin_t boardOutputPin_t
Definition board_avr2560.h:176
static void IGN1_TIMER_ENABLE(void)
Definition board_teensy35.h:125
static void IGN3_TIMER_DISABLE(void)
Definition board_teensy35.h:136
static void IGN1_TIMER_DISABLE(void)
Definition board_teensy35.h:134
static void FUEL2_TIMER_ENABLE(void)
Definition board_teensy35.h:108
static void FUEL1_TIMER_DISABLE(void)
Definition board_teensy35.h:116
static void FUEL4_TIMER_DISABLE(void)
Definition board_teensy35.h:119
static void IGN3_TIMER_ENABLE(void)
Definition board_teensy35.h:127
static void FUEL4_TIMER_ENABLE(void)
Definition board_teensy35.h:110
static void FUEL5_TIMER_DISABLE(void)
Definition board_teensy35.h:120
static void FUEL2_TIMER_DISABLE(void)
Definition board_teensy35.h:117
static void FUEL3_TIMER_DISABLE(void)
Definition board_teensy35.h:118
static void IGN5_TIMER_ENABLE(void)
Definition board_teensy35.h:129
static bool pinIsReserved(uint8_t pin)
Definition board_teensy35.h:56
static void FUEL7_TIMER_DISABLE(void)
Definition board_teensy35.h:122
constexpr uint16_t BLOCKING_FACTOR
Definition board_teensy35.h:52
static void FUEL7_TIMER_ENABLE(void)
Definition board_teensy35.h:113
static void FUEL3_TIMER_ENABLE(void)
Definition board_teensy35.h:109
static void FUEL6_TIMER_ENABLE(void)
Definition board_teensy35.h:112
static void IGN6_TIMER_DISABLE(void)
Definition board_teensy35.h:139
static constexpr uint32_t ticksToMicros(COMPARE_TYPE ticks)
Convert timer ticks to µS.
Definition board_teensy35.h:38
static void FUEL6_TIMER_DISABLE(void)
Definition board_teensy35.h:121
static void IGN7_TIMER_DISABLE(void)
Definition board_teensy35.h:140
static void IGN2_TIMER_DISABLE(void)
Definition board_teensy35.h:135
static void IGN8_TIMER_DISABLE(void)
Definition board_teensy35.h:141
static void IGN6_TIMER_ENABLE(void)
Definition board_teensy35.h:130
static void IGN2_TIMER_ENABLE(void)
Definition board_teensy35.h:126
static void IGN8_TIMER_ENABLE(void)
Definition board_teensy35.h:132
static void FUEL8_TIMER_DISABLE(void)
Definition board_teensy35.h:123
static void IGN4_TIMER_ENABLE(void)
Definition board_teensy35.h:128
static void IGN7_TIMER_ENABLE(void)
Definition board_teensy35.h:131
static void IGN5_TIMER_DISABLE(void)
Definition board_teensy35.h:138
static void IGN4_TIMER_DISABLE(void)
Definition board_teensy35.h:137
static void FUEL1_TIMER_ENABLE(void)
Definition board_teensy35.h:107
static void FUEL8_TIMER_ENABLE(void)
Definition board_teensy35.h:114
static void FUEL5_TIMER_ENABLE(void)
Definition board_teensy35.h:111
constexpr uint8_t ANALOG_PINS[]
Analog pin mapping.
Definition board_teensy35.h:186
constexpr uint16_t TABLE_BLOCKING_FACTOR
Definition board_teensy35.h:53
static constexpr COMPARE_TYPE uS_TO_TIMER_COMPARE(uint32_t micros)
Convert µS to timer ticks.
Definition board_teensy35.h:31