Вопрос по работе с контроллером CAN i82527, подключенным через SPI Есть одна особенность работы с данным контроллером CAN, которая проявляется, если контроллер подключается через SPI.
Ниже дан кусок исходного кода подпрограммы обработки прерывания от CAN. Только форматирование может съехать.
__interrupt void canISR(void)
{
i=canReadREG(Interrupt_Register); // считываем регистр прерываний
s=canReadREG(Status_Register); // считываем регистр статуса
i=canReadREG(Interrupt_Register); // считываем регистр прерываний
// Примечание. Я до конца не разобрался (странное поведение контроллера CAN при некоторых ситуациях)
// Считывание регистра статуса не является необходимым, при возникновении прерывания надо считать
// регистр прерываний (всего одно чтение вместо 3).
// Проблема в том, что часто (не всегда) в первом считываемом регистре прерываний находится 0, а не
// код прерывания. Но если я сначала считываю регистр прерываний, затем регистр статуса, затем регистр прерываний,
// то в переменных s и i находится верное значение
....
}
Если кто-то сталкивался с таким странным поведением, поделитесь соображениями по этому поводу. Почему некорректно (не всегда) считывается регистр прерываний? Всё остальное в контроллере работает как написано в документации.