Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: AT90CAN128
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > AVR
AlexPT
Здравствуйте!
Вопрос по фильтрации принимаемых сообщений. В даташите на микроконтроллер на стр. 243 описана работа фильтра. Если я правильно понимаю, если к примеру я запишу в регистр CANIDM первого канала маску 0x007, а регистр CANIDM второго канала маску 0x0FF, то при приеме сообщения с идентификатором 0x0FF оно может быть принято как фильтром первого так фильтром второго каналов. Если так, то получается, что все сообщения с идентификатором большим 0x007 будут приниматься первым каналом и он будет постоянно загружен. Тогда не понятно в чем смысл такой фильтрации. Нельзя ли так организовать фильтрацию, чтобы первым каналом принимались сообщения с идентификатором в диапазоне 0x007 ... 0x0FE, а вторым каналом сообщения с идентификатором 0x0FF и больше. Или я не верно разобрался с фильтрацией.
KRS
Цитата(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 третий все остальное
=GM=
Цитата(KRS @ Jun 13 2007, 07:26) *
У CAN128 фильтр основан на маске, а не на диапазоне. Можно настроить фильтр что бы в 1 mailbox принимались фреймы с id от 0 до 0xff, а во второй все остальные.
т.е в 1 mailbox поставить маску 0x7F0 tag 0x000
а в 2 mailbox маску 0 и любой tag

По-моему неверно, тогда в первом боксе вы примете только фреймы с ид от 0х000 до 0х00F, а во втором все фреймы.
KRS
Цитата(=GM= @ Jun 13 2007, 15:27) *
По-моему неверно, тогда в первом боксе вы примете только фреймы с ид от 0х000 до 0х00F, а во втором все фреймы.

Да точно! Слишком много 1 поставил (привык к extended 29 bit id)
маска нужна 0x700
=GM=
Цитата(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, непонятно.
KRS
Цитата(=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ой
=GM=
Цитата(KRS @ Jun 13 2007, 13:17) *
Так надо бокс 0 настроить только на прием 0xFF
Бокс 1 от 0 до 0xFF
Бокс 2 все остальное

Получится, что пакет с 0xff будет попадать в 0 бокс, поэтому в бокс1 будут попадать пакеты от 0 до 0xFE, а все остальные во 2ой

А что делать с пакетами 0х000-0х006? Их же не надо принимать.
KRS
Цитата(=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 все остальные
AlexPT
Большое всем спасибо за помощь. Буду думать дальше.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.