/* * 90CAN_Test.c * */ #include // Einbinden der Bibliothek #include // Einbinden der Bibliothek volatile uint8_t ms_tick = 0; // wird alle 10ms aufgerufen ISR (TIMER3_COMPA_vect) // Interrupt aufruf { ms_tick = 42; } void timer3_init(void) { // EMPFANGEN VON DATEN // Timer3 - 10ms bei 2 Mhz TCCR3B = 0x00; // Stop ---> timer/counter control register //TCCR3A = 0x00; //TCCR3C = 0x00; OCR3A = 19999; // TOP - Timer zählt bis zum maximalen wert von 19999 und gibt einen Interrupt aus (Seite 140 im Datenblatt) TIMSK3 |= (1< can general control register (Seite 252 im Datenblatt) // reset all message objekts for (i=0; i<15; i++) // Schleife { CANPAGE = (i<<4); // select message objekt CANCDMOB = 0x00; // disable message objekt CANSTMOB = 0x00; // Statusregister zurücksetzen // clear CAN identifier tag registers (Seite 263 im Datenblatt) CANIDT1 = 0x00; // Register 1 zurücksetzen CANIDT2 = 0x00; // Register 2 zurücksetzen CANIDT3 = 0x00; // Register 3 zurücksetzen CANIDT4 = 0x00; // Register 4 zurücksetzen // clear CAN identifier mask registers (Seite 265 im Datenblatt) CANIDM1 = 0x00; // Register 1 zurücksetzen CANIDM2 = 0x00; // Register 2 zurücksetzen CANIDM3 = 0x00; // Register 3 zurücksetzen CANIDM4 = 0x00; // Register 4 zurücksetzen // clear CAN data message register (Seite 266 im Datenblatt) for (j=0; j<8; j++) { CANMSG = 0x00; // Register 1 zurücksetzen } } // Einstellung für eine 250 kBit/s Baudrate mit 16 MHz Quarzoszillator (Seite 267 im Datenblatt) //CÁN bit timing register CANBT1 = 0x06; // Register 1 CANBT2 = 0x0C; // Register 2 CANBT3 = 0x37; // Register 3 CANGCON = (1< 99) { can_delay = 0; CANPAGE = (1<<4); // Auswählen des MOB1 if(CANSTMOB & (1<