J1939 CAN Bit Timing
Мне нужна помощь в настройке определения J1939 для синхронизации по битам CAN. Я использую микроконтроллер PIC18LF26K80 с тактовой частотой 8 МГц. У меня возникли проблемы при попытке выяснить, как рассчитать различные биты для регистров CAN.
Прямо сейчас в моем файле J1939.def у меня есть это, но это для часов 16 МГц
#define ECAN_RX_INTERRUPT_PRIORITY 0x00
#define ECAN_TX_INTERRUPT_PRIORITY 0x00
#define ECAN_INTERRUPT_PRIORITY (ECAN_RX_INTERRUPT_PRIORITY | ECAN_TX_INTERRUPT_PRIORITY)
#define ECAN_LEGACY_MODE J1939_TRUE
#define ECAN_EXTRA_RX_BUFFERS 3
#define ECAN_SJW 2
#define ECAN_BRP 1
#define ECAN_BRGCON1 (((ECAN_SJW-1)<<6) | (ECAN_BRP-1))
#define ECAN_SEG2PHTS 0x80
#define ECAN_SAM 0x00
#define ECAN_SEG1PH 6
#define ECAN_PRSEG 6
#define ECAN_BRGCON2 (ECAN_SEG2PHTS | ECAN_SAM | ((ECAN_SEG1PH-1)<<3) | (ECAN_PRSEG-1))
#define ECAN_WAKDIS 0x80
#define ECAN_WAKFIL 0x00
#define ECAN_SEG2PH 3
#define ECAN_BRGCON3 (ECAN_WAKDIS | ECAN_WAKFIL | (ECAN_SEG2PH-1))
Я посмотрел в документации для моего микроконтроллера, и она показывает, как установить биты, но я до сих пор не понимаю, как использовать эту информацию для расчета для тактовой частоты 8 МГц.
1 ответ
Понял. С учетом того, что время и частота должны быть идентичны тем, которые я использовал при использовании 16-МГц тактового генератора, 8-МГц тактовый генератор означал, что все займет вдвое больше времени. Таким образом, все, что мне нужно было сделать, это изменить значение ECAN_BRP с 2 на 1, потому что это представляет длину кванта времени (tq). Разделив tq пополам, он, по сути, удваивает синхронизацию, заставляя синхронизацию работать так же, как и с тактовой частотой 16 МГц.
Мое объяснение может на самом деле не иметь смысла, но это то, что имеет смысл для меня в моей голове, ха-ха, и это ответ на мой вопрос, так что это то, с чем я иду.