Hallo Leute, ich muss die beiden CAN Interfaces eines UC3C in Betrieb nehmen. Ich habe zuvor keine Erfahrung mit AVR32 Controllern gemacht und bin von der Fülle der Funktionen ziemlich erschlagen. Ich arbeite nun schon einige Tage die Beispiele aus dem ASF durch, diese sind jedoch nur rudimentär dokumentiert und kompliziert nachzuvollziehen. Das AVR32 Wiki ist auf den ersten Blick vielversprechend, besteht jedoch nur aus ~5 Seiten... Literatur habe ich zu AVR32-Controllern auch nicht wirklich gefunden. Was mir nun fehlt, ist eine einfache Grundkonfiguration für den UC3C, in dem wirklich nur die die Funktionen stecken, die eine erste Kommunikation per CAN ermöglichen (allerdings mit beiden Interfaces). Am Besten in der Art der CAN-Lib von kreatives-chaos.com. Wie soll ich nun vorgehen? Vielen Dank schon mal, dionysos328
im Atmel Studio 6 gibt es für das Evalkit 3 Beispiele für eine CAN Implementierung, hast du sie dir schonmal angeschaut? Einen CAN Stack zu Implementieren ist auch kein Plug&Play, genauso wenig wie TCPIP oder USB Stack. Ich meine die Beispiele sind gut genug um das Konzept zu erlernen
Ja, das Beispiel aus dem ASF habe ich mir natürlich zuerst angesehen. Ich kannte Kommunikation per CAN bisher nur vom MCP2515 mit einem 8bit-µC, jetzt mit einem AVR32 ist das ungemein komplizierter. Die Beispiele aus dem ASF sind meiner Meinung stellenweise unnötig verschachtelt. Gibt es denn nicht irgendwo eine Einbindung des CAN-Interfaces eines AVR32 die anders gelöst wurde?
ich bin jetzt dabei, mir meine eigenen Sende- und Empfangsfunktionen zu gestalten. Was ich aber in den Atmel Beispielen nicht ganz verstehe, ist das Empfangen von Nachrichten. Mit einem MCP2515 kannte ich dass so: Wenn eine Nachricht eingetroffen ist, wurde ein Interrupt ausgelöst. Innerhalb dieser ISR wurde die Nachricht abgeholt. z.B. im ASF CAN_Example21 ist das nun so: Wenn die Statemachine im "Reception Mode" ist, wird eine Funktion can_example_prepare_data(1); aufgerufen. Dahinter verbirgt sich folgendes: else if (mode == 1) { can_init(0, ((U32)&mob_ram_ch0[0]), CANIF_CHANNEL_MODE_NORMAL, can_out_callback_channe0); // Allocate one mob for RX appli_rx_msg.handle = can_mob_alloc(0); can_rx(0, appli_rx_msg.handle, appli_rx_msg.req_type, appli_rx_msg.can_msg); } Es wird also eine Initialisierung des Can vorgenommen, im Mode "Normal". Anschließend wird ein MOB alloziert und die can_rx aufgerufen. Meine Frage ist nun, wo signalisiert wird, dass eine Nachricht eingetroffen ist. Die Funktion wartet doch nicht in einer Schleife aus das Eintreffen einer Nachricht, oder?
:
Bearbeitet durch User
Habe gerade das gleiche Anliegen wie du... Hast du schon etwas gefunden bzw. selbst gebaut? Würde mich auch über eine Starthilfe freuen... lg
Ich bin schon etwas weiter, d.h. ich kann mit beiden Kanälen senden und empfangen. Allerdings hängt sich mein Programm nach einer bestimmten Anzahl Messages auf. Thread und Quellcode hier: Beitrag "UC3C Problem mit 2. CAN-Kanal"
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.