我需要一些帮助来设置我的J1939 CAN位定时定义。我使用的是具有8 MHz时钟的PIC18LF26K80微控制器。我无法弄清楚如何计算CAN寄存器的不同位。
现在在我的J1939.def文件中我有这个,但它是16 MHz时钟
#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 MHz时钟。
答案 0 :(得分:1)
知道了。由于所有时间和速率都应该与我使用16MHz时钟时相同,因此8MHz时钟意味着所有内容都需要两倍的时间。因此,我所要做的就是将ECAN_BRP值从2更改为1,因为这表示时间量程(tq)的长度。通过将tq除以一半,它基本上使时序加倍,使得时序与16MHz时钟相同。
我的解释实际上可能没有意义,但这对我来说是有道理的哈哈,这是我的问题的答案,所以这就是我的目标。