Gast
#1115603
Hallo zusammen! Ich versuche gerade einen Sende-FIFO für CAN-Nachrichten auf einem XC886 zu implementieren. Dazu habe ich die 32 Message Objekte des XC886 wie folgt aufgeteilt: 0-7: Transmit-FIFO (Base Object: 0) 8-31: Receive-FIFO (Base Object: 8) Zudem habe ich mir von Dave die Funktion CAN_ubWriteFIFO() generieren lassen. Diese Funktion rufe ich in folgender Funktion auf, welche das senden einer CAN-Nachricht kapselt:
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
16 | |
17 | |
18 | |
19 | |
20 | |
21 | |
22 | |
23 | |
24 | |
25 | |
26 | |
27 | |
28 | |
29 | |
Nun habe ich das Problem, dass der Controller 8 CAN-Nachrichten sendet und danach nichts mehr. Also einmal wird jedes der 8 Message-Objekt des Transmit-FIFO zum senden genutzt und sobald der CUR-Zeiger wieder auf das erste Message Objekt zeigt, sendet der Controller nichts mehr. Die Funktion CAN_ubWriteFIFO() gibt aber weiterhin ein 1 zurück (was eigentlich auf korrekte Funktion deuten sollte). Ich habe die Vermutung, dass ich nach dem Senden irgendwas an den Message-Objekten "umkonfigurieren" oder zurücksetzen muss. Leider bin ich mit Debugging und so weiter noch nicht dahinter gekommen, was das ist... In einem Beispiel-Code (ich glaube von Infineon) wird aber auch nichts anderes gemacht, als die Funktion CAN_ubWriteFIFO() aufzurufen (konnte ich leider nicht testen, da ich die Hardware dafür nicht habe). Wenn ich den Aufruf von CAN_ubWriteFIFO() auskommentiere und statt dessen die zwei Zeilen darüber reinnehme, funktioniert das Senden dauerhaft (allerdings ohne FIFO). Vielleicht hat ja jemand eine Idee, woran das FIFO-Problem liegen könnte? Evtl. auch ein Fehler in der Funktion CAN_ubWriteFIFO()? Viele Grüße, Daniel