Hallo,
ich kämpfe gerade etwas mit dem ECAN-Modul des dsPIC33F...
Als Grundlage dient die AN1249 von Microchip (hier Beschreibung und
Code)
http://ww1.microchip.com/downloads/en/AppNotes/01249A.pdf
http://ww1.microchip.com/downloads/en/AppNotes/AN1249%20Source%20Code.zip
Die AN beschreibt die Konfiguration für 4 ECAN-Buffer: 1x Sendepuffer
(buffer-0) und 3x Empfangspuffer (buffer-1..3).
Für meine Anwendung möchte ich mehrere Sendepuffer haben, also wurde die
Anzahl der Buffer auf 8 geändert:
'ecan.h'
1 | #define ECAN1_MSG_BUF_LENGTH 8
|
und 'ecan.c' Funktion 'initECAN'
1 | C1FCTRLbits.DMABS = 0b010; // 8 CAN Messages to be buffered in DMA RAM
|
2 | ...
|
3 | _TXEN4 = 1; // ECAN1 Buffer 4 is a Tx Buffer
|
4 | _TXEN5 = 1; // ECAN1 Buffer 5 is a Tx Buffer
|
5 | _TXEN6 = 1; // ECAN1 Buffer 6 is a Tx Buffer
|
6 | _TXEN7 = 1; // ECAN1 Buffer 7 is a Tx Buffer
|
(Die Prioritäten für die Sendepuffer seien mal vernachlässigt)
Jetzt tritt nun folgender Effekt auf:
- Sende ich eine Botschaft mit Buffer-0 ('ursprünglicher' Tx-Buffer)
dann funktioniert die Geschichte wunderbar
- Sende ich jedoch mit einem meiner 'neuen' Buffer senden, also Buf4..7,
dann funktioniert dies NICHT zuverlässig.
Es wird nur etwa jede 5te Botschaft richtig abgesendet - bei den 4
fehlerhaften stimmt zwar die Länge und die Nutzdaten, jedoch wird ein
standard Identifier (11-bit) mit 0x00 0x00 0x00 0x00 verschickt und
NICHT die eigentliche Msg-ID der Nachricht.
So, nun die eigentliche Frage;
Ist das ein generelles Problem, oder habe ich 'nur' eine wichtige
Konfiguration vergessen?
Was mich an der Sache so stört ist, dass es mit der ID ja ab und zu
funktioniert, dann wieder nicht - jedoch DLC und Nutzdaten IMMER passen.
Gruß