Hallo da draussen, Ich brauch mal etwas Erleuchtung. Prozessor: EFM32GG230 = Cortex-M3 Compiler: gcc Ich habe einen Systick IRQ mit 1ms laufen. Der macht nichts besonderes ausser eine Variable fuer eine delay Funktion runter zu zaehlen. Funktioniert bestens. Ich habe eine Funktion fuer I2C-Bus uebertragung unter Verwendung von I2C0_IRQn. Funktioniert auch bestens. Ich kann damit z.B problemlos ein uebliches SSD1306 Oled ansprechen. Sobald ich eine der I2C-Bus Funktionen innerhalb des Systicks aufrufe steht mein System. Der Versuch auch nur ein Byte zu senden haelt alles an. Es sieht so aus als wenn der I2C0_IRQn innerhald des Systick alles anhaelt. Probiert habe ich schon die IRQ-Prioritaeten festzulegen. (Systick auf niedrige Prioritaet, i2c0 auf hoch) Hat aber nichts geaendert. Hab ich was uebersehen? Olaf
Olaf schrieb: > Ich habe einen Systick IRQ mit 1ms laufen. In 1ms kannst du max. 10 Byte per I2C senden (bei 100kHz). > Sobald ich eine der I2C-Bus Funktionen innerhalb des Systicks aufrufe > steht mein System. Das ganze System oder wartet nur die I2C-Funktion auf den Interrupt? Oder gibt es einen Fault? > Probiert habe ich schon die IRQ-Prioritaeten festzulegen. (Systick auf > niedrige Prioritaet, i2c0 auf hoch) Hat aber nichts geaendert. Das muss auch sein. Der I2C-Interrupt müsste eine höhere Priorität haben als der systick, gleiche Priorität reicht nicht. Also muss im NVIC->IP[I2C_IRQn] eine kleinere Zahl stehen als im SCB für den systick. Die nächste Schikane: nur die höchsten Bits dieser Register sind implementiert, typisch 3 oder 4. Die Priorität muss also entsprechend verschoben werden.
> In 1ms kannst du max. 10 Byte per I2C senden (bei 100kHz).
Das ist nicht das Problem. Einen Tickern von 1ms heisst ja nicht das
ich darin nicht noch langsamere Prozesse laufen lassen kann.
Das Problem war eher das ich nicht alles mit dieser Gruppenbildung
verstanden hatte. Genauer gesagt frage ich mich jetzt noch was der kack
ueberhaubt soll.
Aber jetzt laeuft alles so wie ich mir das vorstelle.
Olaf
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.