ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Воскресенье
24 ноября
27829
VVB (03.05.2005 15:43, просмотров: 386)
Вопрос по работе с контроллером 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 находится верное значение .... } Если кто-то сталкивался с таким странным поведением, поделитесь соображениями по этому поводу. Почему некорректно (не всегда) считывается регистр прерываний? Всё остальное в контроллере работает как написано в документации.