реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> LPC21xx: CAN ID Ready Interrupt
baddream
сообщение Feb 5 2007, 12:09
Сообщение #1





Группа: Новичок
Сообщений: 3
Регистрация: 21-07-06
Пользователь №: 18 989



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

Сообщение отредактировал baddream - Feb 5 2007, 12:10
Go to the top of the page
 
+Quote Post
Alex03
сообщение Feb 5 2007, 16:09
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 359
Регистрация: 9-12-05
Пользователь №: 12 034



Цитата(baddream @ Feb 5 2007, 14:09) *
Кто-нибудь знает, что это за прерывание и в каких случаях его следует использовать?

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

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


Предположу, что это прерывание "съедается" у Вас прерыванием передачи.
По крайней мере у меня с EI было так. Если переупорядочить их в VIC то не пропадает (но видимо пропадает прерывание передачи smile.gif ).
Поэтому я из обработчиков передачи и ошибок вызываю общий обработчик с номером CAN шины и состоянием CANICR (при чтении которого биты прерываний очищаются).
Прерывания приёма отдельные.
Go to the top of the page
 
+Quote Post
baddream
сообщение Feb 6 2007, 11:33
Сообщение #3





Группа: Новичок
Сообщений: 3
Регистрация: 21-07-06
Пользователь №: 18 989



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

Тогда ответный вопрос: как в прерывании ошибок узнать, на каком канале произошла эта ошибка (в случае прерываний приема и передачи все понятно, т.к. они имеют свои номера в VIC для каждого канала, а вот все прерывания ошибки для всех каналов вешаются на один номер прерывания)?
Go to the top of the page
 
+Quote Post
Alex03
сообщение Feb 6 2007, 12:29
Сообщение #4


Местный
***

Группа: Свой
Сообщений: 359
Регистрация: 9-12-05
Пользователь №: 12 034



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

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

Кстати по поводу первого вопроса про CANICR.IDI. Есть подозрения что он относится к ACCEPTANCE FILTER и FullCAN. Но точного подтверждения я не нашел, да и FullCAN не пользую по 2-м причинам. Во первых маловато 11-битного ID, во вторых errata не даёт. smile.gif
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 19th July 2025 - 20:54
Рейтинг@Mail.ru


Страница сгенерированна за 0.01366 секунд с 7
ELECTRONIX ©2004-2016