Пытаюсь настроить фильтр сообщений CAN-контроллера в LPC1754.
Деляю это после настройки CAN-контроллера.
CODE
//-------------------------------------
#define CAN1_ID (1<<29) //CAN-контроллер 1
#define CAN2_ID (2<<29) //CAN-контроллер 2
__root __no_init unsigned int AF_TABLE[AF_SIZE] @0xE0038000;
#define EFF_SA_NUM 16 //кол-во расширенных индивидуальных идентификаторов
//процедура настройки AF
void canInitAF(void)
{
AFMR = AFMR_ACCOFF; //переводим фильтр в off для конфигурирования
//таблица настроек фильтра
unsigned int id_table[3] = {CAN1_ID|1, CAN1_ID|2, CAN1_ID|78};
unsigned int id_nums = sizeof(id_table)/sizeof(unsigned int);
//заносим данные в таблицу идентификаторов, стандартные идентификаторы не используем поэтому с 0
for(unsigned int i=0; i<id_nums; i++)
{
AF_TABLE[i] = id_table[i];
}
//расставляем индексы
SFF_SA = (0)<<2; //start addres of the table of the individual Standart Identifiers
SFF_GRP_SA = (0)<<2; //start addres of the table of the grouped Standart Identifiers
EFF_SA = (0)<<2; //start addres of the table of the individual Extended Identifiers
EFF_GRP_SA = (EFF_SA_NUM)<<2; //start addres of the table of the grouped Extended Identifiers
ENDOFTABLE = (EFF_SA_NUM)<<2; //end of table
AFMR = 0; //разрешаем режим фильтрации
}
//-------------------------------------
#define CAN1_ID (1<<29) //CAN-контроллер 1
#define CAN2_ID (2<<29) //CAN-контроллер 2
__root __no_init unsigned int AF_TABLE[AF_SIZE] @0xE0038000;
#define EFF_SA_NUM 16 //кол-во расширенных индивидуальных идентификаторов
//процедура настройки AF
void canInitAF(void)
{
AFMR = AFMR_ACCOFF; //переводим фильтр в off для конфигурирования
//таблица настроек фильтра
unsigned int id_table[3] = {CAN1_ID|1, CAN1_ID|2, CAN1_ID|78};
unsigned int id_nums = sizeof(id_table)/sizeof(unsigned int);
//заносим данные в таблицу идентификаторов, стандартные идентификаторы не используем поэтому с 0
for(unsigned int i=0; i<id_nums; i++)
{
AF_TABLE[i] = id_table[i];
}
//расставляем индексы
SFF_SA = (0)<<2; //start addres of the table of the individual Standart Identifiers
SFF_GRP_SA = (0)<<2; //start addres of the table of the grouped Standart Identifiers
EFF_SA = (0)<<2; //start addres of the table of the individual Extended Identifiers
EFF_GRP_SA = (EFF_SA_NUM)<<2; //start addres of the table of the grouped Extended Identifiers
ENDOFTABLE = (EFF_SA_NUM)<<2; //end of table
AFMR = 0; //разрешаем режим фильтрации
}
//-------------------------------------
Прогнал процедуру через симулятор. Все регистры настраиваются как положено. AF_TABLE расположена в памяти по верному адресу и нормально инициализируется. Ограничений на индексы для регистров настройки границ идентификаторов я не увидел в документации. Поэтому первые три границы == 0, EFF_GRP_SA и ENDOFTABLE соответственно == 16 (кол-во расширенных идентификаторов).
После включения фильтрации AFMR = 0; вижу что сообщения отправляются, но не не вижу прерываний по приёму.
Если включить режим байпасс AFMR = AFMR_ACCOBP; то вижу и отправленные сообщения, и принятые (выводится информация об ID).
Тестирую контроллер в режиме self-test за неимением второй платы для тестов.
Может кто подскажет в чём я ошибаюсь при настройке фильтрации сообщений?
Спасибо.