Hallo
Habe eine Displayeinheit wo die Daten von 6 Knoten ausgwertet werden.
Habe aber das problem das ich beim Auslesen des Registers 0x2d immer das
Bit 6 RX0OVR aktiv ist ich setzte es zurück und bekomme immer wieder
einen Overflow auf Buffer0
obwohl ich nurch setzten des Bits BULK=1 den MCP sage das wenn Buffer0
voll ist auf Buffer 1 zugeriffen wird.
Der Code ist von hier
http://www.kreatives-chaos.com/artikel/ansteuerung-eines-mcp2515
wie kann man den Buffer0 Overflow beseitigen.
Bus läuft mit 250kbit.
MCP alle mit 16Mhz SPI Takt 8Mhz.
void mcp2515_init(void)
{
// MCP2515 per Software Reset zuruecksetzten,
// danach ist der MCP2515 im Configuration Mode
CAN_cs_low();
spi_putc( SPI_RESET );
_delay_ms(1);
CAN_cs_high();
// etwas warten bis sich der MCP2515 zurueckgesetzt hat
_delay_ms(10);
mcp2515_write_register( CNF1, 0x01 );
mcp2515_write_register( CNF2, 0xB8);
mcp2515_write_register( CNF3, 0x05 );
mcp2515_write_register( CANINTE, (1<<RX1IE)|(1<<RX0IE) );
// Buffer 0 : Empfangen aller Nachrichten
mcp2515_write_register( RXB0CTRL, (1<<RXM1)|(1<<RXM0)|(1<<BUKT) );
// Buffer 1 : Empfangen aller Nachrichten
mcp2515_write_register( RXB1CTRL, (1<<RXM1)|(1<<RXM0) );
// Alle Bits der Empfangsmaske loeschen,
// damit werden alle Nachrichten empfangen
mcp2515_write_register( RXM0SIDH, 0 );
mcp2515_write_register( RXM0SIDL, 0 );
mcp2515_write_register( RXM0EID8, 0 );
mcp2515_write_register( RXM0EID0, 0 );
mcp2515_write_register( RXM1SIDH, 0 );
mcp2515_write_register( RXM1SIDL, 0 );
mcp2515_write_register( RXM1EID8, 0 );
mcp2515_write_register( RXM1EID0, 0 );
// Deaktivieren der Pins RXnBF Pins (High Impedance State)
mcp2515_write_register( BFPCTRL, 0 );
// TXnRTS Bits als Inputs schalten
mcp2515_write_register( TXRTSCTRL, 0 );
// Device zurueck in den normalen Modus versetzten
mcp2515_bit_modify( CANCTRL, 0xE0, 0);
}
Danke
Gruß
ANdy