Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: LPC2378 CAN
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
Vladimir Baryshnikov
Не удается запустьтить CAN на LPC2378. Передача идет (генерятся прерывания, пакеты идут в сеть), приема нет. Тетовые пакеты генерю с помощью USB->CAN. Пакеты реально идут (смотрел осцилографом). Вот кусок кода инициализации:

#define CANINTNUM 23
#if PROCESSOR == LPC23xx // øî ïèïåö çàäîëáàëà ìåíÿ ýòà êðîñïëàòôîðìåíîñòü

#ifdef USECAN0
PINSEL0 &= (0x0F);
PINSEL0 |= (0x05);
PCONP |= (1 << 13); // Enable clock to the peripheral

C1MOD = 0x01;
C1BTR = CAN0BRP | (CAN0SJV<<14) |(CAN0TSEG1<<16) | (CAN0TSEG2<<20);
C1IER |= (1<<9)|(1<<10)|(1<<1)|1|(1<<7);
C1GSR = 0;

SetInt(1, CANINTNUM, (DWORD) CANIntHandler);
EnableInt(CANINTNUM);
C1MOD = 0x00;

#endif // #ifdef USECAN0
deadman
Цитата(Vladimir Baryshnikov @ Jan 14 2008, 15:49) *
C1BTR = CAN0BRP | (CAN0SJV<<14) |(CAN0TSEG1<<16) | (CAN0TSEG2<<20);


А значения соответствуют бодрейту на на USB to CAN?
Vladimir Baryshnikov
Цитата(deadman @ Jan 14 2008, 16:16) *
А значения соответствуют бодрейту на на USB to CAN?


Да соответствуют, пакеты которые я отправляю, я вижу в MiniMon (софтина такая совместно с USB/CAN в комплекте продовалась). Обратно шлю - ноль... sad.gif
Vladimir Baryshnikov
Еще одна особенность, пакеты реально принимаются вот только прерывания не возникает и не выставляется флаг RBS (в GSR) не возникает ошибок шины. Весьма странно, таких проблем небыло на LPC2194. Может быть кто сталкивался с подобным?
deadman
Просмотрел, сорри. У Вас похоже нет строчки типа
AFMR = 0x02;

При сбросе Acceptance filter mode register в "Acceptance filter Off mode" (0x01), т.е. контроллер ничего не принимает.
Затем конфигурируем фильтры, если надо, и меняем режим работы фильтра либо в "bypass"(принимаем все, 0x02) или "Operating Mode and FullCAN Mode" (0x00)

Вам похоже подойдет bypass.
Vladimir Baryshnikov
Цитата(deadman @ Jan 15 2008, 10:04) *
Просмотрел, сорри. У Вас похоже нет строчки типа
AFMR = 0x02;

При сбросе Acceptance filter mode register в "Acceptance filter Off mode" (0x01), т.е. контроллер ничего не принимает.
Затем конфигурируем фильтры, если надо, и меняем режим работы фильтра либо в "bypass"(принимаем все, 0x02) или "Operating Mode and FullCAN Mode" (0x00)

Вам похоже подойдет bypass.


Да, вы действительно правы.
Точнее, эта строчка есть но значительно выше этого кода который я приводил, т.о. CAN контроллер еще небыл включен ("PCONP |= (1 << 13)"), и соответственно режим работы небыл задан корректно. На LPC2194 это работало.
Спасибо за подсказку.
TanT
Здравствуйте, если не сложно можно пояснить, что и как надо сконфигурировать, чтобы настроит мой CAN на скорость 100 кб/с? Понятно, что нужно использовать регистр CANBTR или я ещё что-то упустил? wassat.gif
SeregaB
Цитата(TanT @ Aug 28 2008, 12:10) *
Здравствуйте, если не сложно можно пояснить, что и как надо сконфигурировать, чтобы настроит мой CAN на скорость 100 кб/с? Понятно, что нужно использовать регистр CANBTR или я ещё что-то упустил? wassat.gif

Вариант 1. (самый правильный) Прочитать UM. Там вполне доступно все описано.
Вариант 2. В LPC2000_CAN_Driver_Demo (на сайте NXP) берешь LPC2000_CAN.h. Там есть табличка Bit Timing Values для разных скоростей и разных тактировок.
TanT
Спасибо. UM читал, сложного действительно нет. Одно не учёл, что тактовая частота устанавливается в чужом куске кода, пока её не уточнил, задавал глупые вопросы.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.