Доброго дня.
Есть вопрос по CAN на dsPIC33.
Имею два контроллера на dsPIC33, которые соединены шиной CAN.
Один девайс принимает сообщения CAN, а другой передает только одно сообщение.
Для передающего устройства взял Example 21-1(см. документ DS70353C- описание ECAN page 21-35),
где показан порядок настройки аппаратуры передатчика для формирования одного сообщения c использованием буфера 0.
В последней строке примера в тело while(1); добавил:
- паузу в 1сек.
- /* Request message buffer 0 transmission */
C1TR01CONbits.TXREQ0 = 0x1;
- while(C1TR01CONbits.TXREQ0 == 1);
В этом случае нет никаких вопросов по работе передатчика. Осциллографом вижу формирование своего сообщения один раз в секунду.
При замене буфера 0 на любой другой, например буфер 1, возникают непонятности.
Раз в секунду продолжает формироваться одно сообщение, но при этом кроме моего сообщения,
которое я видел в предыдущем эксперименте, стабильно возникает сообщение с SID отличным от моего.
В чем тут может быть причина?
В ходе экспериментов вышел на такой вариант. Если в тело while(1); после паузы в 1сек (перед запросом на передачу) добавить такой код:
C2CTRL1bits.REQOP = 4;
while(C2CTRL1bits.OPMODE != 4);
C2CTRL1bits.WIN = 0;
C2CTRL1bits.REQOP = 0;
while(C2CTRL1bits.OPMODE != 0) , то все работает как в исходном варианте с буфером 0.
Почему для нормальной работы с буфером отличным от 0 мне пришлось делать, на мой взгляд, ненужные вещи?
В чем может быть причина такой странной работы передатчика CAN?
Спасибо.