|
|
  |
LPC2378 CAN |
|
|
|
Jan 14 2008, 12:49
|
Группа: Новичок
Сообщений: 6
Регистрация: 11-01-08
Пользователь №: 33 986

|
Не удается запустьтить 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
|
|
|
|
|
Jan 14 2008, 13:16
|
Участник

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

|
Цитата(Vladimir Baryshnikov @ Jan 14 2008, 15:49)  C1BTR = CAN0BRP | (CAN0SJV<<14) |(CAN0TSEG1<<16) | (CAN0TSEG2<<20); А значения соответствуют бодрейту на на USB to CAN?
|
|
|
|
|
Jan 14 2008, 13:39
|
Группа: Новичок
Сообщений: 6
Регистрация: 11-01-08
Пользователь №: 33 986

|
Цитата(deadman @ Jan 14 2008, 16:16)  А значения соответствуют бодрейту на на USB to CAN? Да соответствуют, пакеты которые я отправляю, я вижу в MiniMon (софтина такая совместно с USB/CAN в комплекте продовалась). Обратно шлю - ноль...
|
|
|
|
|
Jan 15 2008, 06:01
|
Группа: Новичок
Сообщений: 6
Регистрация: 11-01-08
Пользователь №: 33 986

|
Еще одна особенность, пакеты реально принимаются вот только прерывания не возникает и не выставляется флаг RBS (в GSR) не возникает ошибок шины. Весьма странно, таких проблем небыло на LPC2194. Может быть кто сталкивался с подобным?
Сообщение отредактировал Vladimir Baryshnikov - Jan 15 2008, 06:06
|
|
|
|
|
Jan 15 2008, 07:04
|
Участник

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

|
Просмотрел, сорри. У Вас похоже нет строчки типа AFMR = 0x02;
При сбросе Acceptance filter mode register в "Acceptance filter Off mode" (0x01), т.е. контроллер ничего не принимает. Затем конфигурируем фильтры, если надо, и меняем режим работы фильтра либо в "bypass"(принимаем все, 0x02) или "Operating Mode and FullCAN Mode" (0x00)
Вам похоже подойдет bypass.
Сообщение отредактировал deadman - Jan 15 2008, 07:05
|
|
|
|
|
Jan 15 2008, 09:30
|
Группа: Новичок
Сообщений: 6
Регистрация: 11-01-08
Пользователь №: 33 986

|
Цитата(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 это работало. Спасибо за подсказку.
|
|
|
|
|
Aug 29 2008, 09:49
|
Участник

Группа: Свой
Сообщений: 55
Регистрация: 6-04-06
Из: Москва, Зеленоград
Пользователь №: 15 863

|
Цитата(TanT @ Aug 28 2008, 12:10)  Здравствуйте, если не сложно можно пояснить, что и как надо сконфигурировать, чтобы настроит мой CAN на скорость 100 кб/с? Понятно, что нужно использовать регистр CANBTR или я ещё что-то упустил?  Вариант 1. (самый правильный) Прочитать UM. Там вполне доступно все описано. Вариант 2. В LPC2000_CAN_Driver_Demo (на сайте NXP) берешь LPC2000_CAN.h. Там есть табличка Bit Timing Values для разных скоростей и разных тактировок.
|
|
|
|
|
Sep 1 2008, 04:36
|

Участник

Группа: Участник
Сообщений: 61
Регистрация: 22-11-05
Из: Россия->Омск
Пользователь №: 11 210

|
Спасибо. UM читал, сложного действительно нет. Одно не учёл, что тактовая частота устанавливается в чужом куске кода, пока её не уточнил, задавал глупые вопросы.
--------------------
Если вы не можете объяснить что-то шестилетнему ребенку, значит, вы сами этого не понимаете. Альберт Эйнштейн
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|