UC3C CAN Inbetriebnahme

#3364616
Lesenswert?

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
Gast #3368892
Lesenswert?

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
#3368906
Lesenswert?

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?
#3383540
Lesenswert?

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?

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren