|
|
|
#pragma once
|
|
|
|
|
|
|
|
#include "core_pins.h"
|
|
|
|
#include <cstdio>
|
|
|
|
|
|
|
|
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
|