|
|
|
|
|
|
|
|
#include "IntervalTimer.h" |
|
|
#include "IntervalTimer.h" |
|
|
#include "debug/printf.h" |
|
|
#include "debug/printf.h" |
|
|
|
|
|
|
|
|
static void dummy_funct(void); |
|
|
|
|
|
static void pit_isr(void); |
|
|
static void pit_isr(void); |
|
|
|
|
|
|
|
|
#define NUM_CHANNELS 4 |
|
|
#define NUM_CHANNELS 4 |
|
|
static void (*funct_table[4])(void) __attribute((aligned(32))) = {dummy_funct, dummy_funct, dummy_funct, dummy_funct}; |
|
|
|
|
|
|
|
|
static void (*funct_table[4])(void) __attribute((aligned(32))) = {nullptr, nullptr, nullptr, nullptr}; |
|
|
uint8_t IntervalTimer::nvic_priorites[4] = {255, 255, 255, 255}; |
|
|
uint8_t IntervalTimer::nvic_priorites[4] = {255, 255, 255, 255}; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (channel) { |
|
|
if (channel) { |
|
|
int index = channel - IMXRT_PIT_CHANNELS; |
|
|
int index = channel - IMXRT_PIT_CHANNELS; |
|
|
// TODO: disable IRQ_PIT, but only if all instances ended |
|
|
// TODO: disable IRQ_PIT, but only if all instances ended |
|
|
funct_table[index] = dummy_funct; |
|
|
|
|
|
|
|
|
funct_table[index] = nullptr; |
|
|
channel->TCTRL = 0; |
|
|
channel->TCTRL = 0; |
|
|
nvic_priorites[index] = 255; |
|
|
nvic_priorites[index] = 255; |
|
|
uint8_t top_priority = 255; |
|
|
uint8_t top_priority = 255; |
|
|
|
|
|
|
|
|
//FASTRUN |
|
|
//FASTRUN |
|
|
static void pit_isr() |
|
|
static void pit_isr() |
|
|
{ |
|
|
{ |
|
|
|
|
|
#if 0 |
|
|
for (int i=0; i < NUM_CHANNELS; i++) { |
|
|
for (int i=0; i < NUM_CHANNELS; i++) { |
|
|
IMXRT_PIT_CHANNEL_t *channel = IMXRT_PIT_CHANNELS + i; |
|
|
IMXRT_PIT_CHANNEL_t *channel = IMXRT_PIT_CHANNELS + i; |
|
|
if (channel->TFLG) { |
|
|
|
|
|
|
|
|
if (funct_table[0] && channel->TFLG) { |
|
|
channel->TFLG = 1; |
|
|
channel->TFLG = 1; |
|
|
funct_table[i](); |
|
|
funct_table[i](); |
|
|
|
|
|
|
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
|
|
|
#else |
|
|
|
|
|
IMXRT_PIT_CHANNEL_t *channel= IMXRT_PIT_CHANNELS; |
|
|
|
|
|
if (funct_table[0] != nullptr && channel->TFLG) {channel->TFLG = 1;funct_table[0]();} |
|
|
|
|
|
channel++; |
|
|
|
|
|
if (funct_table[1] != nullptr && channel->TFLG) {channel->TFLG = 1;funct_table[1]();} |
|
|
|
|
|
channel++; |
|
|
|
|
|
if (funct_table[2] != nullptr && channel->TFLG) {channel->TFLG = 1;funct_table[2]();} |
|
|
|
|
|
channel++; |
|
|
|
|
|
if (funct_table[3] != nullptr && channel->TFLG) {channel->TFLG = 1;funct_table[3]();} |
|
|
|
|
|
#endif |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
static void dummy_funct(void) |
|
|
|
|
|
{ |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|