|
|
  |
AT90CAN128, Вопрос по CAN интерфейсу |
|
|
|
Jun 13 2007, 08:02
|
Участник

Группа: Участник
Сообщений: 19
Регистрация: 22-12-06
Пользователь №: 23 780

|
Здравствуйте! Вопрос по фильтрации принимаемых сообщений. В даташите на микроконтроллер на стр. 243 описана работа фильтра. Если я правильно понимаю, если к примеру я запишу в регистр CANIDM первого канала маску 0x007, а регистр CANIDM второго канала маску 0x0FF, то при приеме сообщения с идентификатором 0x0FF оно может быть принято как фильтром первого так фильтром второго каналов. Если так, то получается, что все сообщения с идентификатором большим 0x007 будут приниматься первым каналом и он будет постоянно загружен. Тогда не понятно в чем смысл такой фильтрации. Нельзя ли так организовать фильтрацию, чтобы первым каналом принимались сообщения с идентификатором в диапазоне 0x007 ... 0x0FE, а вторым каналом сообщения с идентификатором 0x0FF и больше. Или я не верно разобрался с фильтрацией.
|
|
|
|
|
Jun 13 2007, 08:26
|

Профессионал
    
Группа: Модераторы
Сообщений: 1 951
Регистрация: 27-08-04
Из: Санкт-Петербург
Пользователь №: 555

|
Цитата(AlexPT @ Jun 13 2007, 12:02)  Здравствуйте! Вопрос по фильтрации принимаемых сообщений. В даташите на микроконтроллер на стр. 243 описана работа фильтра. Если я правильно понимаю, если к примеру я запишу в регистр CANIDM первого канала маску 0x007, а регистр CANIDM второго канала маску 0x0FF, то при приеме сообщения с идентификатором 0x0FF оно может быть принято как фильтром первого так фильтром второго каналов. Если так, то получается, что все сообщения с идентификатором большим 0x007 будут приниматься первым каналом и он будет постоянно загружен. Тогда не понятно в чем смысл такой фильтрации. Нельзя ли так организовать фильтрацию, чтобы первым каналом принимались сообщения с идентификатором в диапазоне 0x007 ... 0x0FE, а вторым каналом сообщения с идентификатором 0x0FF и больше. Или я не верно разобрался с фильтрацией. У CAN128 фильтр основан на маске, а не на диапазоне. Можно настротить фильтр что бы в 1 mailbox принимались фреймы с id от 0 до 0xff, а во второй все остальные. т.е в 1 mailbox поставить маску 0x7F0 tag 0x000 а в 2 mailbox маску 0 и любой tag Как вариант можно добавить еще один mailbox, который принимает только 0xff, тогда получится 1 mailbox принимает 0xff второй от 0 до 0xfe третий все остальное
Сообщение отредактировал KRS - Jun 13 2007, 09:03
|
|
|
|
|
Jun 13 2007, 12:59
|

Ambidexter
    
Группа: Свой
Сообщений: 1 589
Регистрация: 22-06-06
Из: Oxford, UK
Пользователь №: 18 282

|
Цитата(KRS @ Jun 13 2007, 11:36)  Да точно! Слишком много 1 поставил (привык к extended 29 bit id) маска нужна 0x700 Ну, это ладно. Но автор темы мечтал принять 0х007-0х0FE в один бокс, я никак не пойму, как сделать? Ну, например, ставим сначала бокс0 на прием 0х000-0х004, бокс 2 на 0х005, бокс 3 на 0х006 и бокс 4 на 0х007, и наконец бокс 5 на 0х008-0хFF. По-другому не придумывается... и как обойти адрес 0хFF, непонятно.
--------------------
Делай сразу хорошо, плохо само получится
|
|
|
|
|
Jun 13 2007, 14:17
|

Профессионал
    
Группа: Модераторы
Сообщений: 1 951
Регистрация: 27-08-04
Из: Санкт-Петербург
Пользователь №: 555

|
Цитата(=GM= @ Jun 13 2007, 16:59)  Ну, это ладно. Но автор темы мечтал принять 0х007-0х0FE в один бокс, я никак не пойму, как сделать?
Ну, например, ставим сначала бокс0 на прием 0х000-0х004, бокс 2 на 0х005, бокс 3 на 0х006 и бокс 4 на 0х007, и наконец бокс 5 на 0х008-0хFF. По-другому не придумывается... и как обойти адрес 0хFF, непонятно. Так надо бокс 0 настроить только на прием 0xFF Бокс 1 от 0 до 0xFF Бокс 2 все остальное Получится что пакет с 0xff будет попадать в 0 бокс, поеэтому в бокс1 будут попадать пакеты от 0 до 0xFE, а все остальные во 2ой
|
|
|
|
|
Jun 13 2007, 14:46
|

Профессионал
    
Группа: Модераторы
Сообщений: 1 951
Регистрация: 27-08-04
Из: Санкт-Петербург
Пользователь №: 555

|
Цитата(=GM= @ Jun 13 2007, 18:35)  А что делать с пакетами 0х000-0х006? Их же не надо принимать. А тоже самое один майлбокс на прием только 7, другой от 0 до 7 в итоге получится Код Бокс Маска Tag 0 0x7FF 0x007 только id = 7 1 0x7F8 0x000 id от 0 до 7 ( но 7 идет в 0 бокс) 2 0x7FF 0x0FF только id = 0xFF 3 0x700 0x000 id от 0 до 0xff ( но от 0 до 7 и FF идут в другие боксы) 4 0x000 0x000 все остальные
|
|
|
|
|
Jun 14 2007, 10:47
|
Участник

Группа: Участник
Сообщений: 19
Регистрация: 22-12-06
Пользователь №: 23 780

|
Большое всем спасибо за помощь. Буду думать дальше.
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|