Estoy intentando que funcione un detector de bus CAN, basado en LPC2368 . Sigo recibiendo una interrupción de error de bus, de tipo "error de formulario". Sospecho de mi configuración de tiempo. Verifiqué que la parte emisora está transmitiendo a 125 kbit / s (8 bits de duración de bit). Aquí está mi configuración para un reloj de CPU de 72 MHz y una velocidad de bus de 125 kbit / s:
#define PULSE_BEFORE_SAMPLE 8
#define PULSE_AFTER_SAMPLE 3
#define PULSE_PER_BIT (PULSE_BEFORE_SAMPLE + PULSE_AFTER_SAMPLE + 1)
#define TSEG1 (PULSE_BEFORE_SAMPLE - 1)
#define TSEG2 (PULSE_AFTER_SAMPLE - 1)
#define SJW 3 //sync jump width
#define SAM 0 //sampling 0=single sample 1=triple sample
#define CAN_PRESCALER 7 //((CPU_CLK_HZ / PCLK_DIVIDER / CAN1_BAUDRATE / PULSE_PER_BIT) - 1 )
...
PCLKSEL0 |= PCLK_CAN1 << 26; //clock source = CCLK/6
...
CAN1BTR = (CAN_PRESCALER | (SJW << 14) | (TSEG1 << 16) | (TSEG2 << 20) | (SAM << 23));
¿Estoy cometiendo un error obvio aquí? El controlador se ejecuta en modo de solo escucha, todos los demás bits de modo se establecen en 0.