2019-01-18 02:15:27 -08:00
# ifndef TEENSY35_H
# define TEENSY35_H
2019-08-20 06:45:29 -07:00
# if defined(CORE_TEENSY) && defined(CORE_TEENSY35)
2019-01-18 02:15:27 -08:00
/*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* General
*/
2019-01-19 19:13:24 -08:00
void initBoard ( ) ;
2019-01-21 13:56:25 -08:00
uint16_t freeRam ( ) ;
2020-12-02 14:24:15 -08:00
void doSystemReset ( ) ;
void jumpToBootloader ( ) ;
2021-10-12 17:53:46 -07:00
time_t getTeensy3Time ( ) ;
2019-01-18 02:15:27 -08:00
# define PORT_TYPE uint8_t //Size of the port variables
2019-03-03 14:15:57 -08:00
# define PINMASK_TYPE uint8_t
2019-08-20 22:15:19 -07:00
# define COMPARE_TYPE uint16_t
# define COUNTER_TYPE uint16_t
2021-11-19 13:29:11 -08:00
# define 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)
2022-08-09 19:12:42 -07:00
# define FPU_MAX_SIZE 32 //Size of the FPU buffer. 0 means no FPU.
2021-11-19 13:39:38 -08:00
# define SD_LOGGING //SD logging enabled by default for Teensy 3.5 as it has the slot built in
2021-02-01 15:00:04 -08:00
# define BOARD_MAX_DIGITAL_PINS 34
# define BOARD_MAX_IO_PINS 34 //digital pins + analog channels + 1
2020-01-12 18:14:00 -08:00
# ifdef USE_SPI_EEPROM
# define EEPROM_LIB_H "src / SPIAsEEPROM / SPIAsEEPROM.h"
2021-09-13 23:51:26 -07:00
typedef uint16_t eeprom_address_t ;
2020-01-12 18:14:00 -08:00
# else
# define EEPROM_LIB_H <EEPROM.h>
2021-09-13 23:51:26 -07:00
typedef int eeprom_address_t ;
2020-01-12 18:14:00 -08:00
# endif
2021-01-21 21:16:30 -08:00
# define RTC_ENABLED
# define RTC_LIB_H "TimeLib.h"
2021-10-03 06:09:53 -07:00
# 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
2019-01-22 15:04:54 -08:00
# 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()
2021-11-23 17:18:41 -08:00
# define PWM_FAN_AVAILABLE
2022-04-10 17:49:58 -07:00
# define pinIsReserved(pin) ( ((pin) == 0) || ((pin) == 1) || ((pin) == 3) || ((pin) == 4) ) //Forbidden pins like USB
2019-01-18 02:15:27 -08:00
/*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* Schedules
*/
2019-10-21 18:49:07 -07:00
//shawnhymel.com/661/learning-the-teensy-lc-interrupt-service-routines/
2019-01-18 02:15:27 -08:00
# define FUEL1_COUNTER FTM0_CNT
# define FUEL2_COUNTER FTM0_CNT
# define FUEL3_COUNTER FTM0_CNT
# define FUEL4_COUNTER FTM0_CNT
# define FUEL5_COUNTER FTM3_CNT
# define FUEL6_COUNTER FTM3_CNT
# define FUEL7_COUNTER FTM3_CNT
# define FUEL8_COUNTER FTM3_CNT
# define IGN1_COUNTER FTM0_CNT
# define IGN2_COUNTER FTM0_CNT
# define IGN3_COUNTER FTM0_CNT
# define IGN4_COUNTER FTM0_CNT
# define IGN5_COUNTER FTM3_CNT
# define IGN6_COUNTER FTM3_CNT
# define IGN7_COUNTER FTM3_CNT
# define IGN8_COUNTER FTM3_CNT
# define FUEL1_COMPARE FTM0_C0V
# define FUEL2_COMPARE FTM0_C1V
# define FUEL3_COMPARE FTM0_C2V
# define FUEL4_COMPARE FTM0_C3V
# define FUEL5_COMPARE FTM3_C0V
# define FUEL6_COMPARE FTM3_C1V
# define FUEL7_COMPARE FTM3_C2V
# define FUEL8_COMPARE FTM3_C3V
# define IGN1_COMPARE FTM0_C4V
# define IGN2_COMPARE FTM0_C5V
# define IGN3_COMPARE FTM0_C6V
# define IGN4_COMPARE FTM0_C7V
# define IGN5_COMPARE FTM3_C4V
# define IGN6_COMPARE FTM3_C5V
# define IGN7_COMPARE FTM3_C6V
# define IGN8_COMPARE FTM3_C7V
2023-10-06 14:25:26 -07:00
static 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
static inline void FUEL2_TIMER_ENABLE ( void ) { FTM0_C1SC | = FTM_CSC_CHIE ; }
static inline void FUEL3_TIMER_ENABLE ( void ) { FTM0_C2SC | = FTM_CSC_CHIE ; }
static inline void FUEL4_TIMER_ENABLE ( void ) { FTM0_C3SC | = FTM_CSC_CHIE ; }
static inline void FUEL5_TIMER_ENABLE ( void ) { FTM3_C0SC | = FTM_CSC_CHIE ; }
static inline void FUEL6_TIMER_ENABLE ( void ) { FTM3_C1SC | = FTM_CSC_CHIE ; }
static inline void FUEL7_TIMER_ENABLE ( void ) { FTM3_C2SC | = FTM_CSC_CHIE ; }
static inline void FUEL8_TIMER_ENABLE ( void ) { FTM3_C3SC | = FTM_CSC_CHIE ; }
2019-01-18 02:15:27 -08:00
2023-10-06 14:25:26 -07:00
static 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
static inline void FUEL2_TIMER_DISABLE ( void ) { FTM0_C1SC & = ~ FTM_CSC_CHIE ; }
static inline void FUEL3_TIMER_DISABLE ( void ) { FTM0_C2SC & = ~ FTM_CSC_CHIE ; }
static inline void FUEL4_TIMER_DISABLE ( void ) { FTM0_C3SC & = ~ FTM_CSC_CHIE ; }
static 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
static inline void FUEL6_TIMER_DISABLE ( void ) { FTM3_C1SC & = ~ FTM_CSC_CHIE ; }
static inline void FUEL7_TIMER_DISABLE ( void ) { FTM3_C2SC & = ~ FTM_CSC_CHIE ; }
static inline void FUEL8_TIMER_DISABLE ( void ) { FTM3_C3SC & = ~ FTM_CSC_CHIE ; }
2019-01-18 02:15:27 -08:00
2023-10-06 14:25:26 -07:00
static inline void IGN1_TIMER_ENABLE ( void ) { FTM0_C4SC | = FTM_CSC_CHIE ; }
static inline void IGN2_TIMER_ENABLE ( void ) { FTM0_C5SC | = FTM_CSC_CHIE ; }
static inline void IGN3_TIMER_ENABLE ( void ) { FTM0_C6SC | = FTM_CSC_CHIE ; }
static inline void IGN4_TIMER_ENABLE ( void ) { FTM0_C7SC | = FTM_CSC_CHIE ; }
static inline void IGN5_TIMER_ENABLE ( void ) { FTM3_C4SC | = FTM_CSC_CHIE ; }
static inline void IGN6_TIMER_ENABLE ( void ) { FTM3_C5SC | = FTM_CSC_CHIE ; }
static inline void IGN7_TIMER_ENABLE ( void ) { FTM3_C6SC | = FTM_CSC_CHIE ; }
static inline void IGN8_TIMER_ENABLE ( void ) { FTM3_C7SC | = FTM_CSC_CHIE ; }
2019-01-18 02:15:27 -08:00
2023-10-06 14:25:26 -07:00
static inline void IGN1_TIMER_DISABLE ( void ) { FTM0_C4SC & = ~ FTM_CSC_CHIE ; }
static inline void IGN2_TIMER_DISABLE ( void ) { FTM0_C5SC & = ~ FTM_CSC_CHIE ; }
static inline void IGN3_TIMER_DISABLE ( void ) { FTM0_C6SC & = ~ FTM_CSC_CHIE ; }
static inline void IGN4_TIMER_DISABLE ( void ) { FTM0_C7SC & = ~ FTM_CSC_CHIE ; }
static inline void IGN5_TIMER_DISABLE ( void ) { FTM3_C4SC & = ~ FTM_CSC_CHIE ; }
static inline void IGN6_TIMER_DISABLE ( void ) { FTM3_C5SC & = ~ FTM_CSC_CHIE ; }
static inline void IGN7_TIMER_DISABLE ( void ) { FTM3_C6SC & = ~ FTM_CSC_CHIE ; }
static inline void IGN8_TIMER_DISABLE ( void ) { FTM3_C7SC & = ~ FTM_CSC_CHIE ; }
2019-01-18 02:15:27 -08:00
# define MAX_TIMER_PERIOD 139808 // 2.13333333uS * 65535
# 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.
/*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
2022-04-10 17:49:58 -07:00
* Auxiliaries
2019-01-18 02:15:27 -08:00
*/
# define ENABLE_BOOST_TIMER() FTM1_C0SC |= FTM_CSC_CHIE
# define DISABLE_BOOST_TIMER() FTM1_C0SC &= ~FTM_CSC_CHIE
# define ENABLE_VVT_TIMER() FTM1_C1SC |= FTM_CSC_CHIE
# define DISABLE_VVT_TIMER() FTM1_C1SC &= ~FTM_CSC_CHIE
2021-11-23 17:18:41 -08:00
# define ENABLE_FAN_TIMER() FTM2_C1SC |= FTM_CSC_CHIE
# define DISABLE_FAN_TIMER() FTM2_C1SC &= ~FTM_CSC_CHIE
2019-01-18 02:15:27 -08:00
# define BOOST_TIMER_COMPARE FTM1_C0V
# define BOOST_TIMER_COUNTER FTM1_CNT
# define VVT_TIMER_COMPARE FTM1_C1V
# define VVT_TIMER_COUNTER FTM1_CNT
2021-11-23 17:18:41 -08:00
# define FAN_TIMER_COMPARE FTM2_C1V
# define FAN_TIMER_COUNTER FTM2_CNT
2019-01-18 02:15:27 -08:00
2021-04-21 05:24:35 -07:00
void boostInterrupt ( ) ;
void vvtInterrupt ( ) ;
2021-11-23 17:18:41 -08:00
void fanInterrupt ( ) ;
2019-01-18 02:15:27 -08:00
/*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* Idle
*/
# define IDLE_COUNTER FTM2_CNT
# define IDLE_COMPARE FTM2_C0V
# define IDLE_TIMER_ENABLE() FTM2_C0SC |= FTM_CSC_CHIE
# define IDLE_TIMER_DISABLE() FTM2_C0SC &= ~FTM_CSC_CHIE
2021-04-21 05:24:35 -07:00
void idleInterrupt ( ) ;
2019-01-18 02:15:27 -08:00
/*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* CAN / Second serial
*/
2023-11-20 21:47:24 -08:00
# define USE_SERIAL3 // Secondary serial port to use
# define secondarySerial_AVAILABLE
# define SECONDARY_SERIAL_T HardwareSerial
2020-02-27 15:18:37 -08:00
# include <FlexCAN_T4.h>
# if defined(__MK64FX512__) // use for Teensy 3.5 only
2021-04-20 21:36:27 -07:00
extern FlexCAN_T4 < CAN0 , RX_SIZE_256 , TX_SIZE_16 > Can0 ;
2020-02-27 15:18:37 -08:00
# elif defined(__MK66FX1M0__) // use for Teensy 3.6 only
2021-04-20 21:36:27 -07:00
extern FlexCAN_T4 < CAN0 , RX_SIZE_256 , TX_SIZE_16 > Can0 ;
extern FlexCAN_T4 < CAN1 , RX_SIZE_256 , TX_SIZE_16 > Can1 ;
2020-02-27 15:18:37 -08:00
# endif
2020-12-07 05:43:01 -08:00
# define NATIVE_CAN_AVAILABLE
2019-01-18 02:15:27 -08:00
# endif //CORE_TEENSY
2022-04-10 17:49:58 -07:00
# endif //TEENSY35_H