Forum: Mikrocontroller und Digitale Elektronik ASF I2C Dummy_Handler


von F. K. (superpcfan)


Angehängte Dateien:

Lesenswert?

Hallo Forum,

ich verwende das Atmel Studio 7 um einen ATSAMC20J18 auf einer 
selbstdesingten Platine zu programmieren. Das Programm verwendet die 
Libs des ASF.

Mein Problem ist, dass ich nicht verstehe, warum die ASF I2C Lib 
"plötzlich" seinen internen Callback Handler nicht mehr korrekt 
registriert.

Ich hatte bereits diverse Peripherie Module (TC0, TC2, TCC0, TCC2, 
SERCOM3, EINT, DMA, usw) am laufen. Dann habe ich das Modul SERCOM0 als 
I2C ebenfalls zum Laufen gebracht. Ich konnte fehlerfrei die Zeit aus 
der angeschlossenen RTC DS1337 auslesen.

Danach habe ich mit der Implementierung des Modules SERCOM2 
weitergemacht und dabei ist das Problem aufgetreten. Beim Debuggen des 
SERCOM2 hängte sich plötzlich das ganzes Programm auf. Der CallStack hat 
gezeigt, dass das Modul SERCOM0 (das eigentlich schon funktionierende 
I2C) plötzlich den Dummy_Handler aus startup_samc20.c aufruft und dort 
hängen bleibt.

Nachdem ich alle Implementierungen zum SERCOM2 wieder entfernt hatte, 
bliebt das Problem trotzdem bestehen.
Dann habe ich alles aus dem Programm entfernt, was nicht unbedingt für 
die I2C RTC benötigt wird und das Problem bleibt trotzdem immernoch 
bestehen.
Diese "minimal" main.c befindet sich im Anhang.

Ich finde in meinem Programm nichts mehr, was dafür verantwortlich sein 
könnte, dass die I2C Lib ihre +internen+ Callbacks nicht mehr 
registriert.
Diese Lib-interne Funktion hatte bereits funktioniert und ich habe in 
der Lib nichts verändert.

Ich habe sogar ein neues Projekt erzeugt und lediglich die Inhalte von 
main.c dort hinein kopiert. Das Problem ist wieder aufgetreten.

Daher vermute ich, dass ich irgendein Verhalten des ASF nicht verstehe.

Hat jemand eine Idee oder einen Tip?

von F. K. (superpcfan)


Lesenswert?

Ich schubs den Post mal nach oben.

Ich habe zwar ein wenig weiter rumprobiert, aber noch nicht die zündende 
Idee oder das Problem gefunden.

Eventuell findet sich ja noch jemand, der einen heißen Tip hat.

von F. K. (superpcfan)


Lesenswert?

Ich habe das Problem gefunden.

Als ich das Minimal-main.c langsam Schritt für Schritt ausgeführt habe, 
ist die Lib nicht mehr in den Dummy-Handler abgebogen.

Die ASF I2C Lib scheint ein Timing Problem zu haben, in das ich beim 
Debuggen "reingerutscht" bin. Dieses Timing-Problem kommt dann zum 
Tragen, wenn man die Statusrückmeldung der "Job-Start-Methode" verwendet 
und gleichzeitig versucht einen neuen Job startet.
Eigentlich sollte das der Beschreibung der "Job-Start-Methode" nach 
möglich sein.

Dies führt zum Timing Fehler:
1
if (i2c_master_read_packet_job(&i2c_master_inst_rtc, &i2c_master_read_packet_rtc_time) == STATUS_OK){
2
    iRTC_ControlStep = 3;
3
}

Dies funktioniert:
1
if (i2c_master_get_job_status(&i2c_master_inst_rtc) == STATUS_OK){
2
    i2c_master_read_packet_job(&i2c_master_inst_rtc, &i2c_master_read_packet_rtc_time);
3
    iRTC_ControlStep = 3;
4
}

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
Noch kein Account? Hier anmelden.