Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: LPC21xx: CAN ID Ready Interrupt
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
baddream
Кто-нибудь знает, что это за прерывание и в каких случаях его следует использовать?
И еще вопрос: в даташите к LPC21xx написано, что Error Warning Interrupt и Error Passive Interrupt происходят при переходе счетчиков ошибок через соответствующие уровни В ЛЮБОМ НАПРАВЛЕНИИ, но на практике наблюдаю, что прерывание происходит только когда счетчик становится больше уровня прерывания, но не обратно. Почему так происходит?
Alex03
Цитата(baddream @ Feb 5 2007, 14:09) *
Кто-нибудь знает, что это за прерывание и в каких случаях его следует использовать?

Тут не скажу. Както оно не прозрачно написано, я не пользую.

Цитата
И еще вопрос: в даташите к LPC21xx написано, что Error Warning Interrupt и Error Passive Interrupt происходят при переходе счетчиков ошибок через соответствующие уровни В ЛЮБОМ НАПРАВЛЕНИИ, но на практике наблюдаю, что прерывание происходит только когда счетчик становится больше уровня прерывания, но не обратно. Почему так происходит?


Предположу, что это прерывание "съедается" у Вас прерыванием передачи.
По крайней мере у меня с EI было так. Если переупорядочить их в VIC то не пропадает (но видимо пропадает прерывание передачи smile.gif ).
Поэтому я из обработчиков передачи и ошибок вызываю общий обработчик с номером CAN шины и состоянием CANICR (при чтении которого биты прерываний очищаются).
Прерывания приёма отдельные.
baddream
Цитата(Alex03 @ Feb 5 2007, 19:09) *
Поэтому я из обработчиков передачи и ошибок вызываю общий обработчик с номером CAN шины и состоянием CANICR (при чтении которого биты прерываний очищаются).
Прерывания приёма отдельные.

Тогда ответный вопрос: как в прерывании ошибок узнать, на каком канале произошла эта ошибка (в случае прерываний приема и передачи все понятно, т.к. они имеют свои номера в VIC для каждого канала, а вот все прерывания ошибки для всех каналов вешаются на один номер прерывания)?
Alex03
Цитата(baddream @ Feb 6 2007, 13:33) *
Тогда ответный вопрос: как в прерывании ошибок узнать, на каком канале произошла эта ошибка (в случае прерываний приема и передачи все понятно, т.к. они имеют свои номера в VIC для каждого канала, а вот все прерывания ошибки для всех каналов вешаются на один номер прерывания)?

Я ничего лучшего чем банальный цикл по всем CAN-ам не придумал.
В цикле сначала проверяется используется ли данный CAN (в моей структурке), потом читается соответствующий CANICR, и если установлены биты передачи/ошибок, то вызывается общий обработчик, в который передаётся это прочитанное значение CANICR.

Кстати по поводу первого вопроса про CANICR.IDI. Есть подозрения что он относится к ACCEPTANCE FILTER и FullCAN. Но точного подтверждения я не нашел, да и FullCAN не пользую по 2-м причинам. Во первых маловато 11-битного ID, во вторых errata не даёт. smile.gif
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.