#pragma once #include "core_pins.h" #include struct PWM_TimerInfo_t { inline PWM_TimerInfo_t(unsigned _pin = 0); unsigned type; unsigned module; char name[20]; }; //=========================================================================================================== #if defined(ARDUINO_TEENSY40) || defined(ARDUINO_TEENSY41) || defined(ARDUINO_TEENSY_MICROMOD) // holds core info about used pwm timers. Struct is defined in pwm.c. // There is no header declaring it. So, we need to do this here: struct pwm_pin_info_struct { uint8_t type; // 0=no pwm, 1=flexpwm, 2=quad uint8_t module; // 0-3, 0-3 uint8_t channel; // 0=X, 1=A, 2=B uint8_t muxval; // }; extern pwm_pin_info_struct pwm_pin_info[]; // This array holds the pwm timer info PWM_TimerInfo_t::PWM_TimerInfo_t(unsigned pin) { constexpr char timerNames[][9] = {"FLEX_PWM", "QUAD"}; type = pwm_pin_info[pin].type; module = (pwm_pin_info[pin].module >> 4) + 1; if (type != 0) snprintf(name, 20, "%s%d", timerNames[type - 1], module); else snprintf(name, 20, "no pwm"); } //=========================================================================================================== #elif defined(ARDUINO_TEENSYLC) || \ defined(ARDUINO_TEENSY30) || defined(ARDUINO_TEENSY32) || \ defined(ARDUINO_TEENSY35) || defined(ARDUINO_TEENSY36) extern "C" const int PwmTimerModule[CORE_NUM_DIGITAL]; extern "C" const int PwmTimerType[CORE_NUM_DIGITAL]; PWM_TimerInfo_t::PWM_TimerInfo_t(unsigned pin) { constexpr char timerNames[][9] = {"FTM", "TPM"}; type = PwmTimerType[pin]; module = PwmTimerModule[pin]; if (type != 0) snprintf(name, 20, "%s%d", timerNames[type - 1], module); else snprintf(name, 20, "none"); } #endif