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