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#define COMPARE_TYPE uint16_t
14#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)
15#define FPU_MAX_SIZE 32 //Size of the FPU buffer. 0 means no FPU.
16#define SD_LOGGING //SD logging enabled by default for Teensy 3.5 as it has the slot built in
17#define BOARD_MAX_DIGITAL_PINS 57
18#define BOARD_MAX_IO_PINS 57
19#define BOARD_MAX_ADC_PINS 26 //Number of analog pins
20#ifdef USE_SPI_EEPROM
21 #define EEPROM_LIB_H "src/SPIAsEEPROM/SPIAsEEPROM.h"
22 typedef uint16_t eeprom_address_t;
23#else
24 #define EEPROM_LIB_H <EEPROM.h>
25 typedef int eeprom_address_t;
26#endif
27#define RTC_ENABLED
28#define RTC_LIB_H "TimeLib.h"
29#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
30constexpr uint16_t BLOCKING_FACTOR = 251;
31constexpr uint16_t TABLE_BLOCKING_FACTOR = 256;
32
33#define PWM_FAN_AVAILABLE
34static inline bool pinIsReserved(uint8_t pin) {
35 return (pin == 0U)
36 || (pin == 1U)
37 || (pin == 3U)
38 || (pin == 4U)
39 ;
40}
41#define INJ_CHANNELS 8
42#define IGN_CHANNELS 8
43
44/*
45***********************************************************************************************************
46* Schedules
47*/
48//shawnhymel.com/661/learning-the-teensy-lc-interrupt-service-routines/
49#define FUEL1_COUNTER FTM0_CNT
50#define FUEL2_COUNTER FTM0_CNT
51#define FUEL3_COUNTER FTM0_CNT
52#define FUEL4_COUNTER FTM0_CNT
53#define FUEL5_COUNTER FTM3_CNT
54#define FUEL6_COUNTER FTM3_CNT
55#define FUEL7_COUNTER FTM3_CNT
56#define FUEL8_COUNTER FTM3_CNT
57
58#define IGN1_COUNTER FTM0_CNT
59#define IGN2_COUNTER FTM0_CNT
60#define IGN3_COUNTER FTM0_CNT
61#define IGN4_COUNTER FTM0_CNT
62#define IGN5_COUNTER FTM3_CNT
63#define IGN6_COUNTER FTM3_CNT
64#define IGN7_COUNTER FTM3_CNT
65#define IGN8_COUNTER FTM3_CNT
66
67#define FUEL1_COMPARE FTM0_C0V
68#define FUEL2_COMPARE FTM0_C1V
69#define FUEL3_COMPARE FTM0_C2V
70#define FUEL4_COMPARE FTM0_C3V
71#define FUEL5_COMPARE FTM3_C0V
72#define FUEL6_COMPARE FTM3_C1V
73#define FUEL7_COMPARE FTM3_C2V
74#define FUEL8_COMPARE FTM3_C3V
75
76#define IGN1_COMPARE FTM0_C4V
77#define IGN2_COMPARE FTM0_C5V
78#define IGN3_COMPARE FTM0_C6V
79#define IGN4_COMPARE FTM0_C7V
80#define IGN5_COMPARE FTM3_C4V
81#define IGN6_COMPARE FTM3_C5V
82#define IGN7_COMPARE FTM3_C6V
83#define IGN8_COMPARE FTM3_C7V
84
85static 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
86static inline void FUEL2_TIMER_ENABLE(void) {FTM0_C1SC |= FTM_CSC_CHIE;}
87static inline void FUEL3_TIMER_ENABLE(void) {FTM0_C2SC |= FTM_CSC_CHIE;}
88static inline void FUEL4_TIMER_ENABLE(void) {FTM0_C3SC |= FTM_CSC_CHIE;}
89static inline void FUEL5_TIMER_ENABLE(void) {FTM3_C0SC |= FTM_CSC_CHIE;}
90static inline void FUEL6_TIMER_ENABLE(void) {FTM3_C1SC |= FTM_CSC_CHIE;}
91static inline void FUEL7_TIMER_ENABLE(void) {FTM3_C2SC |= FTM_CSC_CHIE;}
92static inline void FUEL8_TIMER_ENABLE(void) {FTM3_C3SC |= FTM_CSC_CHIE;}
93
94static 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
95static inline void FUEL2_TIMER_DISABLE(void) {FTM0_C1SC &= ~FTM_CSC_CHIE;}
96static inline void FUEL3_TIMER_DISABLE(void) {FTM0_C2SC &= ~FTM_CSC_CHIE;}
97static inline void FUEL4_TIMER_DISABLE(void) {FTM0_C3SC &= ~FTM_CSC_CHIE;}
98static 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
99static inline void FUEL6_TIMER_DISABLE(void) {FTM3_C1SC &= ~FTM_CSC_CHIE;}
100static inline void FUEL7_TIMER_DISABLE(void) {FTM3_C2SC &= ~FTM_CSC_CHIE;}
101static inline void FUEL8_TIMER_DISABLE(void) {FTM3_C3SC &= ~FTM_CSC_CHIE;}
102
103static inline void IGN1_TIMER_ENABLE(void) {FTM0_C4SC |= FTM_CSC_CHIE;}
104static inline void IGN2_TIMER_ENABLE(void) {FTM0_C5SC |= FTM_CSC_CHIE;}
105static inline void IGN3_TIMER_ENABLE(void) {FTM0_C6SC |= FTM_CSC_CHIE;}
106static inline void IGN4_TIMER_ENABLE(void) {FTM0_C7SC |= FTM_CSC_CHIE;}
107static inline void IGN5_TIMER_ENABLE(void) {FTM3_C4SC |= FTM_CSC_CHIE;}
108static inline void IGN6_TIMER_ENABLE(void) {FTM3_C5SC |= FTM_CSC_CHIE;}
109static inline void IGN7_TIMER_ENABLE(void) {FTM3_C6SC |= FTM_CSC_CHIE;}
110static inline void IGN8_TIMER_ENABLE(void) {FTM3_C7SC |= FTM_CSC_CHIE;}
111
112static inline void IGN1_TIMER_DISABLE(void) {FTM0_C4SC &= ~FTM_CSC_CHIE;}
113static inline void IGN2_TIMER_DISABLE(void) {FTM0_C5SC &= ~FTM_CSC_CHIE;}
114static inline void IGN3_TIMER_DISABLE(void) {FTM0_C6SC &= ~FTM_CSC_CHIE;}
115static inline void IGN4_TIMER_DISABLE(void) {FTM0_C7SC &= ~FTM_CSC_CHIE;}
116static inline void IGN5_TIMER_DISABLE(void) {FTM3_C4SC &= ~FTM_CSC_CHIE;}
117static inline void IGN6_TIMER_DISABLE(void) {FTM3_C5SC &= ~FTM_CSC_CHIE;}
118static inline void IGN7_TIMER_DISABLE(void) {FTM3_C6SC &= ~FTM_CSC_CHIE;}
119static inline void IGN8_TIMER_DISABLE(void) {FTM3_C7SC &= ~FTM_CSC_CHIE;}
120
121#define MAX_TIMER_PERIOD 139808UL // 2.13333333uS * 65535
122#define uS_TO_TIMER_COMPARE(uS) (COMPARE_TYPE)(((uS) * 15U) >> 5U) //Converts a given number of uS into the required number of timer ticks until that time has passed.
123
124/*
125***********************************************************************************************************
126* Auxiliaries
127*/
128#define ENABLE_BOOST_TIMER() FTM1_C0SC |= FTM_CSC_CHIE
129#define DISABLE_BOOST_TIMER() FTM1_C0SC &= ~FTM_CSC_CHIE
130
131#define ENABLE_VVT_TIMER() FTM1_C1SC |= FTM_CSC_CHIE
132#define DISABLE_VVT_TIMER() FTM1_C1SC &= ~FTM_CSC_CHIE
133
134#define ENABLE_FAN_TIMER() FTM2_C1SC |= FTM_CSC_CHIE
135#define DISABLE_FAN_TIMER() FTM2_C1SC &= ~FTM_CSC_CHIE
136
137#define BOOST_TIMER_COMPARE FTM1_C0V
138#define BOOST_TIMER_COUNTER FTM1_CNT
139#define VVT_TIMER_COMPARE FTM1_C1V
140#define VVT_TIMER_COUNTER FTM1_CNT
141#define FAN_TIMER_COMPARE FTM2_C1V
142#define FAN_TIMER_COUNTER FTM2_CNT
143
144/*
145***********************************************************************************************************
146* Idle
147*/
148#define IDLE_COUNTER FTM2_CNT
149#define IDLE_COMPARE FTM2_C0V
150
151#define IDLE_TIMER_ENABLE() FTM2_C0SC |= FTM_CSC_CHIE
152#define IDLE_TIMER_DISABLE() FTM2_C0SC &= ~FTM_CSC_CHIE
153
154/*
155***********************************************************************************************************
156* CAN / Second serial
157*/
158#define SECONDARY_SERIAL_T HardwareSerial
159
160#include <FlexCAN_T4.h>
161#define NATIVE_CAN_AVAILABLE
static void IGN1_TIMER_ENABLE(void)
Definition board_teensy35.h:103
static void IGN3_TIMER_DISABLE(void)
Definition board_teensy35.h:114
static void IGN1_TIMER_DISABLE(void)
Definition board_teensy35.h:112
static void FUEL2_TIMER_ENABLE(void)
Definition board_teensy35.h:86
static void FUEL1_TIMER_DISABLE(void)
Definition board_teensy35.h:94
static void FUEL4_TIMER_DISABLE(void)
Definition board_teensy35.h:97
static void IGN3_TIMER_ENABLE(void)
Definition board_teensy35.h:105
static void FUEL4_TIMER_ENABLE(void)
Definition board_teensy35.h:88
int eeprom_address_t
Definition board_teensy35.h:25
static void FUEL5_TIMER_DISABLE(void)
Definition board_teensy35.h:98
static void FUEL2_TIMER_DISABLE(void)
Definition board_teensy35.h:95
static void FUEL3_TIMER_DISABLE(void)
Definition board_teensy35.h:96
static void IGN5_TIMER_ENABLE(void)
Definition board_teensy35.h:107
static bool pinIsReserved(uint8_t pin)
Definition board_teensy35.h:34
static void FUEL7_TIMER_DISABLE(void)
Definition board_teensy35.h:100
constexpr uint16_t BLOCKING_FACTOR
Definition board_teensy35.h:30
static void FUEL7_TIMER_ENABLE(void)
Definition board_teensy35.h:91
static void FUEL3_TIMER_ENABLE(void)
Definition board_teensy35.h:87
static void FUEL6_TIMER_ENABLE(void)
Definition board_teensy35.h:90
static void IGN6_TIMER_DISABLE(void)
Definition board_teensy35.h:117
static void FUEL6_TIMER_DISABLE(void)
Definition board_teensy35.h:99
static void IGN7_TIMER_DISABLE(void)
Definition board_teensy35.h:118
static void IGN2_TIMER_DISABLE(void)
Definition board_teensy35.h:113
static void IGN8_TIMER_DISABLE(void)
Definition board_teensy35.h:119
static void IGN6_TIMER_ENABLE(void)
Definition board_teensy35.h:108
static void IGN2_TIMER_ENABLE(void)
Definition board_teensy35.h:104
static void IGN8_TIMER_ENABLE(void)
Definition board_teensy35.h:110
static void FUEL8_TIMER_DISABLE(void)
Definition board_teensy35.h:101
static void IGN4_TIMER_ENABLE(void)
Definition board_teensy35.h:106
static void IGN7_TIMER_ENABLE(void)
Definition board_teensy35.h:109
static void IGN5_TIMER_DISABLE(void)
Definition board_teensy35.h:116
static void IGN4_TIMER_DISABLE(void)
Definition board_teensy35.h:115
static void FUEL1_TIMER_ENABLE(void)
Definition board_teensy35.h:85
static void FUEL8_TIMER_ENABLE(void)
Definition board_teensy35.h:92
static void FUEL5_TIMER_ENABLE(void)
Definition board_teensy35.h:89
constexpr uint16_t TABLE_BLOCKING_FACTOR
Definition board_teensy35.h:31