ifrythings
Member
I have a CAN bus project (in Arduino) that I need the Teensy to go to sleep, I found the snooze library and believe I have it setup right, I can get the Teensy to sleep but never wakes up, I'm using the RX pins as the wake up interrupts. Can the CAN RX pins be used as wake interrupt pins? I did scope all three CAN RX pins and I'm getting valid CAN data to them while in sleep so they should be triggering the wake up.
Any help is appreciated, here is my sleep testing sketch
Any help is appreciated, here is my sleep testing sketch
Code:
#include <FlexCAN_T4.h>
#include <Snooze.h>
#define CAN1_STB 7 // Transceiver Standby Pin
#define CAN2_STB 12 // Transceiver Standby Pin
#define CAN3_STB 13 // Transceiver Standby Pin
#define CAN1_RX 23 // Transceiver RX Pin
#define CAN2_RX 0 // Transceiver RX Pin
#define CAN3_RX 30 // Transceiver RX Pin
SnoozeDigital digital;
SnoozeBlock config(digital);
FlexCAN_T4<CAN1, RX_SIZE_256, TX_SIZE_16> CAN_1;
FlexCAN_T4<CAN2, RX_SIZE_256, TX_SIZE_16> CAN_2;
FlexCAN_T4<CAN3, RX_SIZE_256, TX_SIZE_16> CAN_3;
uint32_t awake;
void setup() {
pinMode(CAN1_STB, OUTPUT);
pinMode(CAN2_STB, OUTPUT);
pinMode(CAN3_STB, OUTPUT);
digital.pinMode(CAN1_RX, INPUT, FALLING);
digital.pinMode(CAN2_RX, INPUT, FALLING);
digital.pinMode(CAN3_RX, INPUT, FALLING);
// Setup CAN_1
CAN_1.begin();
CAN_1.setClock(CLK_60MHz);
CAN_1.setBaudRate(500000);
CAN_1.enableFIFO();
CAN_1.enableFIFOInterrupt();
CAN_1.onReceive(CAN1_receive);
// Setup CAN_2
CAN_2.begin();
CAN_2.setClock(CLK_60MHz);
CAN_2.setBaudRate(500000);
CAN_2.enableFIFO();
CAN_2.enableFIFOInterrupt();
CAN_2.onReceive(CAN2_receive);
// Setup CAN_3
CAN_3.begin();
CAN_3.setClock(CLK_60MHz);
CAN_3.setBaudRate(500000);
CAN_3.enableFIFO();
CAN_3.enableFIFOInterrupt();
CAN_3.onReceive(CAN3_receive);
}
void CAN1_receive(const CAN_message_t &msg){
awake = millis();
}
void CAN2_receive(const CAN_message_t &msg){
awake = millis();
}
void CAN3_receive(const CAN_message_t &msg){
awake = millis();
}
void loop() {
if(millis() - awake >= 1000){
digitalWrite(CAN1_STB, HIGH);
digitalWrite(CAN2_STB, HIGH);
digitalWrite(CAN3_STB, HIGH);
int who = Snooze.deepSleep(config);
digitalWrite(CAN1_STB, LOW);
digitalWrite(CAN2_STB, LOW);
digitalWrite(CAN3_STB, LOW);
}
CAN_1.events();
CAN_2.events();
CAN_3.events();
}