Hallo, Ich versuche gerade erfolglos den Receiver Interrupt des AT90CAN128 auszulösen. Ich nutze den ImageCraft Compiler und die Library die ich gerade in der Codesammlung gepostet habe. Sonst klappt bis jetzt schon einiges ;) Ich schicke kontinuierlich mit einem Dongle Daten an den Controller. Jedoch wird die ISR nicht aufgerufen. Das einzigste was passiert das meine Tx Funktion gestört wird seit dem. Die CAN IDs werden verfälscht. Initialisierung: CANGIE = 0x00100000; ISR: #pragma interrupt_handler can_transfer_complete_isr:19 void can_transfer_complete_isr(void) { PORTA++; } Gruß und Danke, Christian
Hallo. Das soll auch gar nicht die ganze Initialisierung sein. Das ist ein nur ein Ausschnitt was ich nun speziell für den Interrupt enable ausprobiere. Der Rest klappt alles soweit. Die Funktionen für den Empfang per Abfrage oder zum versenden klappen schon gut. Ich weiß bloß gerade hierbei nicht weiter. Welche anderen Einstellungen muss ich denn da noch beachten? Was kommt mir da sonst in die quere? Gruß Christian
Übrigens, falls das weiter hilft Ich habe nebenbei noch den Timer0, ADC und die UART am laufen. Gibt es da komplikationen? Christian
wenn ich das recht in Erinnerung habe musst du mindestens 2 oder 3 Register beschreiben um einen Interrupt zuzulassen, und es braucht ein paar schleifen um die für alle Mailboxen zu aktivieren.
Hallo, etwas spät... aber Ich habe nun wieder Zeit dafür gefunden :-) Ich probiere es zur Zeit so aus, und es klappt immer noch kein bisschen. Leider weiß Ich da auch nun nicht mehr weiter. Die ganzen CAN Register im Datenblatt machen mich noch zu schaffen ;) Init: CANGIE = (1<<ENIT) | (1<<ENRX); //enable receive interrupt CANIE1 = 0; CANIE2 = (1<<0); //enable MOb0 interrupt CANSIT1 = 0; CANSIT2 = 0; ISR: #pragma interrupt_handler can_transfer_complete_isr:19 void can_transfer_complete_isr(void) { PORTA++; CANSTMOB &= ~(1<<RXOK); //clear interrupt flag } Wäre echt super wenn mir da jemand noch helfen könnte. Schönen Tag euch, Christian
Bei Atmel gibts Codebeispiele für die CAN-Controller, allerdings nur für die 8051er Serie (t89c51cc01). Da ist auch eins fürs Interrupt-Handling dabei. http://www.atmel.com/dyn/products/tools_card.asp?tool_id=3440 Die CAN-Controller der beiden uC sind annähernd identisch!
Vielen Dank Ingo, irgendwie hat mich das nun dazu geleitet das richtige auszuprobieren und es geht nun :-) Es waren ein paar dumme fehler noch drin... Danke, Christian
Hallo Christian, kannst Du mir bitte sagen wie Du dein Problem gelöst hast. Ich kämpfe schon seit 3 Wochen mit CAN und suche vergeblich nach dem Fehler. Das Sende- und Empfangsprogramm geht bis der Warteschleife und bleibt da hängen, da RXOK und TXOK nie auf eins gesetzt werden. Seit zwei Wochen suche ich vergeblich, wo das Problem liegt und kann immer noch nicht den Fehler einzugrenzen. Ich habe 2 Boards mit je einem AT90CAN128, wobei einer Sender und der andere Empfänger ist. Baudrate ist 250 kbit/s. Bit Timing habe ich nicht selbst gerechnet sondern aus dem Datenblatt genommen. Weiss nicht, ob es stimmt. Auch mit anderen Baudraten habe ich ausgetestet. Im Internet habe ich einige Beispiele gefunden und habe da nichts anderes gefunden. Die habe ich auch getestet. Geht auch nicht. Hardwarefehler? Aber es ist alles richtig angeschlossen. Ich benutze zwei Drähte je 2m mit 120 Ohm Abschlusswiderständen. Hast Du GND auch benutzt? Braucht man den unbedingt? Welche Kabel hast Du angewendet? Mich interessiert vor allem, ob Du mit AT90CAN128 die CAN-Nachrichten senden und empfangen kannst? Wießt Du vielleicht, wo kann bei mir der Fehler liegen? Mit freundlichen Grüssen Jon
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.