Hallo,
ich habe ein Problem beim Senden von CAN-Daten mit dem Infineon XC167.
Die DAVE Funktion CAN_vLoadData() scheint nicht korrekt zu arbeiten,
denn die Daten, die per CAN gesendet werden, entsprechen nicht den Daten
aus meinen Sendearrays. Im Memory Fenster habe ich die entsprechenden
CAN-Data Register angeschaut und gesehen, daß der Fehler bereits hier,
also beim Beschreiben dieser auftritt. Seltsamerweise funktioniert der
Vorgang korrekt, wenn ich die Funktion im Single Step debugge.
void CAN_vLoadData(ubyte ubObjNr, ubyte *pubData)
{
ubyte i;
CAN_HWOBJ[ubObjNr].uwMSGCTR = 0xfaff; // set CPUUPD and NEWDAT
for(i = 0; i < (CAN_HWOBJ[ubObjNr].uwMSGCFG & 0xf0) >> 4; i++)
{
CAN_HWOBJ[ubObjNr].ubData[i] = *(pubData++);
}
CAN_HWOBJ[ubObjNr].uwMSGCTR = 0xf7ff; // reset CPUUPD
} // End of function CAN_vLoadData
Testhalber habe ich in die for-Schleife einige nop() Anweisungen
eingefügt und siehe da, das Verhalten hat sich deutlich gebessert. Zuvor
wurden nur unspezifische Daten gesendet, jetzt stimmen die Daten in 9
von 10 Telegrammen. Ein Versuch, die Einstellungen des TCONCS7 zu
ändern, hat nichts gebracht.
In einer anderen Software mit derselben Hardware funktioniert das
Senden, weshalb ich hier bereits "querverglichen" und leider keinen
Fehler gefunden habe:
- CAN-Init identisch
- DAVE Codegenerator derselbe
- Startup Codes identisch
- Daten werden in beiden Anwendungen aus dem iram-Bereich geladen
Das Empfangen per CAN funktioniert einwandfrei.
Hat jemand ähnliche Erfahrungen bzw. eine Idee?
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.