Ljutik1 (26.11.2015 20:22, просмотров: 173) ответил goddev на Ну это если ждете в программе установки флага окончания передачи или освобождения передающего MailBox.
Вот как у меня организована передача. повторюсь, при работающем соединении все замечательно.
CANEN2=0b00001111;
CANGIE &= ~(1<<ENRX); //Запретить прерывание по приему
CANPAGE = (n<<4); //Выбрать n-й канал, автоинкремент, местоположение байта данных в FIFO
CANCDMOB = 0x58; //???? - не понимаю, зачем это нужно. атавизм какой-то
CANSTMOB = (1<<TXOK); //???? - не понимаю, зачем это нужно. атавизм какой-то
if (CANSTMOB & (1<<TXOK)) //Если бит TXOK регистра CANSTMOB установлен в 1
{
CANSTMOB &= 0;
for(i = 0; i < 8; i++)
{
CANMSG = datatx_buf[i]; //Запись данных в регистр данных CAN
}
CANCDMOB = 0x58; //Разрешение передачи,длина данных 8 байт
}
CANCDMOB = CANCDMOB_RX_SET; // запрещение передачи, разрешение приема
i = CANEN2;
CANEN2=0b00001111;
CANGIE |=(1<<ENRX); //Разрешить прерывание по приему