skyvmicro 0 13 января, 2014 Опубликовано 13 января, 2014 · Жалоба Доброго дня. Есть вопрос по 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? Спасибо. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться