2014-12-04 22 views
0

CAN 비트 타이밍에 대한 J1939 정의를 설정하는 데 도움이 필요합니다. 나는 8 MHz 클록으로 PIC18LF26K80 마이크로 컨트롤러를 사용하고있다. CAN 레지스터의 다른 비트를 계산하는 방법을 파악하는 데 문제가 있습니다.J1939 CAN 비트 타이밍

지금 내 J1939.def 파일에 난이 있지만 그것은 내 마이크로 컨트롤러의 문서를 검토 한 결과

#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)) 

16 MHz의 클럭이며 비트하지만 난을 설정하는 방법을 보여줍니다 여전히 8 MHz 클록을 계산하기 위해 해당 정보를 사용하는 방법을 이해하지 못합니다.

답변

1

알 수 있습니다. 16MHz 클럭을 사용할 때와 동일한 타이밍 및 속도를 가진 모든 것이 있기 때문에, 8MHz 클록은 모든 것이 2 배의 시간이 걸릴 것이라는 것을 의미했습니다. 그래서 ECAN_BRP 값을 2에서 1로 변경하는 것은 시간 퀀텀 (tq)의 길이를 나타 내기 때문입니다. tq를 절반으로 나누면 본질적으로 타이밍이 두 배가되어 16MHz 클럭과 동일한 타이밍이 작동합니다.

내 설명이 실제로 이해가되지 않을 수도 있지만 그것은 내 머리에 하하가 내게 의미가있는 것입니다. 그리고 그것은 내 질문에 대한 답변이므로 내가 그렇게 할 것입니다.