Цитата(alogvinov @ Jan 15 2007, 12:43)

Написал обработчик, который должен обрабатывать как приём, так и передачу.
Может стоит разнести для начала. (а то и навсегда)
Цитата
Приём обрабатывается как положено. А вот прерываний по передаче не происходит.
Пытаюсь вызвать прерывания следующим образом:
1. записываю данные в очередь
2. жду, пока обнулится бит TBS1 в регистре CANSR
3. разрешаю прерывания ( устанавливаю бит TIE1 в регистре CANIER ).
Какая то странная последовательность.
Что есть "записываю данные в очередь" и "жду, пока обнулится бит TBS1 в регистре CANSR"
Обычно сначала прерывания разрешают.
Потом в случае единичного TBSx в регистре CANSR начинаете отправлять пакет.
Как у вас посылается я не знаю, но не забудьте помимо записи CANTFI, CANTID, CANTDA и CANTDB ещё и инициировать отсылку пакета
Код
/* ERRATA CAN.7
pCR->CMR = CANCMR_TR | CANCMR_STB1;
*/
pCR->CMR = CANCMR_SRR | CANCMR_STB1;
А уж потом ждите прерывания, точнее лучше их ждать всегда.
Цитата
Что есть "жду, пока обнулится бит TBS1 в регистре CANSR" -
Если это пустой цикл, без прочей работы проги, то можете не дождаться. (Если пакет ушел, или принялся к передаче)
ИМХО надо не проверять флаг занятости передатчика после отправки пакета, а проверять флаг возможности отправки (проверять на 1) перед отправкой.
Ну и еррату почитайте, там много про КАН понаписано!