Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

SPI usingInterrupt not updated for Teensy 3.5 / 3.6 #35

Open
pierremolinaro opened this issue Oct 13, 2018 · 0 comments
Open

SPI usingInterrupt not updated for Teensy 3.5 / 3.6 #35

pierremolinaro opened this issue Oct 13, 2018 · 0 comments

Comments

@pierremolinaro
Copy link

pierremolinaro commented Oct 13, 2018

I use a Teensy 3.5 with Teensyduino 1.44, and I am currently writing a driver for a MCP2517FD CAN controller. The INT pin of MCP2517FD is connected to pin #38. I have written that the SPI is using that pin with SPI1.usingInterrupt (38). But I think that this line has no effect.

I have examined the SPI.h file and I found the usingInterrupt function (from line 468). I think this function is valid for Teensy 3.1/3.2, but has not been updated for Teensy 3.5 / 3.6. Adding "|| n == 38" at the end of line 473 solved my issue (#38 is PTC11).

I suggest the following replacement for this function:

#if defined(__MK20DX128__) || defined(__MK20DX256__)
void usingInterrupt(uint8_t n) {
if (n == 3 || n == 4 || n == 24 || n == 33) {
usingInterrupt(IRQ_PORTA);
} else if (n == 0 || n == 1 || (n >= 16 && n <= 19) || n == 25 || n == 32) {
usingInterrupt(IRQ_PORTB);
} else if ((n >= 9 && n <= 13) || n == 15 || n == 22 || n == 23
|| (n >= 27 && n <= 30)) {
usingInterrupt(IRQ_PORTC);
} else if (n == 2 || (n >= 5 && n <= 8) || n == 14 || n == 20 || n == 21) {
usingInterrupt(IRQ_PORTD);
} else if (n == 26 || n == 31) {
usingInterrupt(IRQ_PORTE);
}
}
#elif defined(__MK64FX512__) || defined(__MK66FX1M0__)
void usingInterrupt(uint8_t n) {
if (n == 3 || n == 4 || (n >= 25 && n <= 28) || (n >= 39 && n <= 42)) {
usingInterrupt(IRQ_PORTA);
} else if (n == 0 || n == 1 || (n >= 16 && n <= 19) || (n >= 29 && n <= 32) || (n >= 43 && n <= 46) || n == 49 || n == 50) {
usingInterrupt(IRQ_PORTB);
} else if ((n >= 9 && n <= 13) || n == 15 || n == 22 || n == 23 || (n >= 35 && n <= 38)) {
usingInterrupt(IRQ_PORTC);
} else if (n == 2 || (n >= 5 && n <= 8) || n == 14 || n == 20 || n == 21 || n == 47 || n == 48 || (n >= 51 && n <= 55)) {
usingInterrupt(IRQ_PORTD);
} else if (n == 24 || n == 33 || n == 36 || n == 56 || n == 57) {
usingInterrupt(IRQ_PORTE);
}
}
#endif

Best regards,

Pierre Molinaro

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant