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 BOARD_MAX_ADC_PINS 26 //Number of analog pins
48#ifdef USE_SPI_EEPROM
49 #define EEPROM_LIB_H "src/SPIAsEEPROM/SPIAsEEPROM.h"
50 class SPI_EEPROM_Class;
51 using EEPROM_t = SPI_EEPROM_Class;
52#else
53 #define EEPROM_LIB_H <EEPROM.h>
54 class EEPROMClass;
55 using EEPROM_t = EEPROMClass;
56#endif
57#define RTC_ENABLED
58#define RTC_LIB_H "TimeLib.h"
59#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
60constexpr uint16_t BLOCKING_FACTOR = 251;
61constexpr uint16_t TABLE_BLOCKING_FACTOR = 256;
62
63#define PWM_FAN_AVAILABLE
64static inline bool pinIsReserved(uint8_t pin) {
65 return (pin == 0U)
66 || (pin == 1U)
67 || (pin == 3U)
68 || (pin == 4U)
69 ;
70}
71#define INJ_CHANNELS 8
72#define IGN_CHANNELS 8
73
74/*
75***********************************************************************************************************
76* Schedules
77*/
78//shawnhymel.com/661/learning-the-teensy-lc-interrupt-service-routines/
79#define FUEL1_COUNTER FTM0_CNT
80#define FUEL2_COUNTER FTM0_CNT
81#define FUEL3_COUNTER FTM0_CNT
82#define FUEL4_COUNTER FTM0_CNT
83#define FUEL5_COUNTER FTM3_CNT
84#define FUEL6_COUNTER FTM3_CNT
85#define FUEL7_COUNTER FTM3_CNT
86#define FUEL8_COUNTER FTM3_CNT
87
88#define IGN1_COUNTER FTM0_CNT
89#define IGN2_COUNTER FTM0_CNT
90#define IGN3_COUNTER FTM0_CNT
91#define IGN4_COUNTER FTM0_CNT
92#define IGN5_COUNTER FTM3_CNT
93#define IGN6_COUNTER FTM3_CNT
94#define IGN7_COUNTER FTM3_CNT
95#define IGN8_COUNTER FTM3_CNT
96
97#define FUEL1_COMPARE FTM0_C0V
98#define FUEL2_COMPARE FTM0_C1V
99#define FUEL3_COMPARE FTM0_C2V
100#define FUEL4_COMPARE FTM0_C3V
101#define FUEL5_COMPARE FTM3_C0V
102#define FUEL6_COMPARE FTM3_C1V
103#define FUEL7_COMPARE FTM3_C2V
104#define FUEL8_COMPARE FTM3_C3V
105
106#define IGN1_COMPARE FTM0_C4V
107#define IGN2_COMPARE FTM0_C5V
108#define IGN3_COMPARE FTM0_C6V
109#define IGN4_COMPARE FTM0_C7V
110#define IGN5_COMPARE FTM3_C4V
111#define IGN6_COMPARE FTM3_C5V
112#define IGN7_COMPARE FTM3_C6V
113#define IGN8_COMPARE FTM3_C7V
114
115static 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
116static inline void FUEL2_TIMER_ENABLE(void) {FTM0_C1SC |= FTM_CSC_CHIE;}
117static inline void FUEL3_TIMER_ENABLE(void) {FTM0_C2SC |= FTM_CSC_CHIE;}
118static inline void FUEL4_TIMER_ENABLE(void) {FTM0_C3SC |= FTM_CSC_CHIE;}
119static inline void FUEL5_TIMER_ENABLE(void) {FTM3_C0SC |= FTM_CSC_CHIE;}
120static inline void FUEL6_TIMER_ENABLE(void) {FTM3_C1SC |= FTM_CSC_CHIE;}
121static inline void FUEL7_TIMER_ENABLE(void) {FTM3_C2SC |= FTM_CSC_CHIE;}
122static inline void FUEL8_TIMER_ENABLE(void) {FTM3_C3SC |= FTM_CSC_CHIE;}
123
124static 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
125static inline void FUEL2_TIMER_DISABLE(void) {FTM0_C1SC &= ~FTM_CSC_CHIE;}
126static inline void FUEL3_TIMER_DISABLE(void) {FTM0_C2SC &= ~FTM_CSC_CHIE;}
127static inline void FUEL4_TIMER_DISABLE(void) {FTM0_C3SC &= ~FTM_CSC_CHIE;}
128static 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
129static inline void FUEL6_TIMER_DISABLE(void) {FTM3_C1SC &= ~FTM_CSC_CHIE;}
130static inline void FUEL7_TIMER_DISABLE(void) {FTM3_C2SC &= ~FTM_CSC_CHIE;}
131static inline void FUEL8_TIMER_DISABLE(void) {FTM3_C3SC &= ~FTM_CSC_CHIE;}
132
133static inline void IGN1_TIMER_ENABLE(void) {FTM0_C4SC |= FTM_CSC_CHIE;}
134static inline void IGN2_TIMER_ENABLE(void) {FTM0_C5SC |= FTM_CSC_CHIE;}
135static inline void IGN3_TIMER_ENABLE(void) {FTM0_C6SC |= FTM_CSC_CHIE;}
136static inline void IGN4_TIMER_ENABLE(void) {FTM0_C7SC |= FTM_CSC_CHIE;}
137static inline void IGN5_TIMER_ENABLE(void) {FTM3_C4SC |= FTM_CSC_CHIE;}
138static inline void IGN6_TIMER_ENABLE(void) {FTM3_C5SC |= FTM_CSC_CHIE;}
139static inline void IGN7_TIMER_ENABLE(void) {FTM3_C6SC |= FTM_CSC_CHIE;}
140static inline void IGN8_TIMER_ENABLE(void) {FTM3_C7SC |= FTM_CSC_CHIE;}
141
142static inline void IGN1_TIMER_DISABLE(void) {FTM0_C4SC &= ~FTM_CSC_CHIE;}
143static inline void IGN2_TIMER_DISABLE(void) {FTM0_C5SC &= ~FTM_CSC_CHIE;}
144static inline void IGN3_TIMER_DISABLE(void) {FTM0_C6SC &= ~FTM_CSC_CHIE;}
145static inline void IGN4_TIMER_DISABLE(void) {FTM0_C7SC &= ~FTM_CSC_CHIE;}
146static inline void IGN5_TIMER_DISABLE(void) {FTM3_C4SC &= ~FTM_CSC_CHIE;}
147static inline void IGN6_TIMER_DISABLE(void) {FTM3_C5SC &= ~FTM_CSC_CHIE;}
148static inline void IGN7_TIMER_DISABLE(void) {FTM3_C6SC &= ~FTM_CSC_CHIE;}
149static inline void IGN8_TIMER_DISABLE(void) {FTM3_C7SC &= ~FTM_CSC_CHIE;}
150
151/*
152***********************************************************************************************************
153* Auxiliaries
154*/
155#define ENABLE_BOOST_TIMER() FTM1_C0SC |= FTM_CSC_CHIE
156#define DISABLE_BOOST_TIMER() FTM1_C0SC &= ~FTM_CSC_CHIE
157
158#define ENABLE_VVT_TIMER() FTM1_C1SC |= FTM_CSC_CHIE
159#define DISABLE_VVT_TIMER() FTM1_C1SC &= ~FTM_CSC_CHIE
160
161#define ENABLE_FAN_TIMER() FTM2_C1SC |= FTM_CSC_CHIE
162#define DISABLE_FAN_TIMER() FTM2_C1SC &= ~FTM_CSC_CHIE
163
164#define BOOST_TIMER_COMPARE FTM1_C0V
165#define BOOST_TIMER_COUNTER FTM1_CNT
166#define VVT_TIMER_COMPARE FTM1_C1V
167#define VVT_TIMER_COUNTER FTM1_CNT
168#define FAN_TIMER_COMPARE FTM2_C1V
169#define FAN_TIMER_COUNTER FTM2_CNT
170
171/*
172***********************************************************************************************************
173* Idle
174*/
175#define IDLE_COUNTER FTM2_CNT
176#define IDLE_COMPARE FTM2_C0V
177
178#define IDLE_TIMER_ENABLE() FTM2_C0SC |= FTM_CSC_CHIE
179#define IDLE_TIMER_DISABLE() FTM2_C0SC &= ~FTM_CSC_CHIE
180
181/*
182***********************************************************************************************************
183* CAN / Second serial
184*/
185#define SECONDARY_SERIAL_T HardwareSerial
186
187#include <FlexCAN_T4.h>
188#define NATIVE_CAN_AVAILABLE
EEPROMClass EEPROM_t
Definition board_avr2560.h:63
uint16_t COMPARE_TYPE
The timer overflow type.
Definition board_avr2560.h:33
static void IGN1_TIMER_ENABLE(void)
Definition board_teensy35.h:133
static void IGN3_TIMER_DISABLE(void)
Definition board_teensy35.h:144
static void IGN1_TIMER_DISABLE(void)
Definition board_teensy35.h:142
static void FUEL2_TIMER_ENABLE(void)
Definition board_teensy35.h:116
static void FUEL1_TIMER_DISABLE(void)
Definition board_teensy35.h:124
static void FUEL4_TIMER_DISABLE(void)
Definition board_teensy35.h:127
static void IGN3_TIMER_ENABLE(void)
Definition board_teensy35.h:135
static void FUEL4_TIMER_ENABLE(void)
Definition board_teensy35.h:118
static void FUEL5_TIMER_DISABLE(void)
Definition board_teensy35.h:128
static void FUEL2_TIMER_DISABLE(void)
Definition board_teensy35.h:125
static void FUEL3_TIMER_DISABLE(void)
Definition board_teensy35.h:126
static void IGN5_TIMER_ENABLE(void)
Definition board_teensy35.h:137
static bool pinIsReserved(uint8_t pin)
Definition board_teensy35.h:64
static void FUEL7_TIMER_DISABLE(void)
Definition board_teensy35.h:130
constexpr uint16_t BLOCKING_FACTOR
Definition board_teensy35.h:60
static void FUEL7_TIMER_ENABLE(void)
Definition board_teensy35.h:121
static void FUEL3_TIMER_ENABLE(void)
Definition board_teensy35.h:117
static void FUEL6_TIMER_ENABLE(void)
Definition board_teensy35.h:120
static void IGN6_TIMER_DISABLE(void)
Definition board_teensy35.h:147
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:129
static void IGN7_TIMER_DISABLE(void)
Definition board_teensy35.h:148
static void IGN2_TIMER_DISABLE(void)
Definition board_teensy35.h:143
static void IGN8_TIMER_DISABLE(void)
Definition board_teensy35.h:149
static void IGN6_TIMER_ENABLE(void)
Definition board_teensy35.h:138
static void IGN2_TIMER_ENABLE(void)
Definition board_teensy35.h:134
static void IGN8_TIMER_ENABLE(void)
Definition board_teensy35.h:140
static void FUEL8_TIMER_DISABLE(void)
Definition board_teensy35.h:131
static void IGN4_TIMER_ENABLE(void)
Definition board_teensy35.h:136
static void IGN7_TIMER_ENABLE(void)
Definition board_teensy35.h:139
static void IGN5_TIMER_DISABLE(void)
Definition board_teensy35.h:146
static void IGN4_TIMER_DISABLE(void)
Definition board_teensy35.h:145
static void FUEL1_TIMER_ENABLE(void)
Definition board_teensy35.h:115
static void FUEL8_TIMER_ENABLE(void)
Definition board_teensy35.h:122
static void FUEL5_TIMER_ENABLE(void)
Definition board_teensy35.h:119
constexpr uint16_t TABLE_BLOCKING_FACTOR
Definition board_teensy35.h:61
static constexpr COMPARE_TYPE uS_TO_TIMER_COMPARE(uint32_t micros)
Convert µS to timer ticks.
Definition board_teensy35.h:29