Forum: Compiler & IDEs Cortex M3 nested IRQs?


von Olaf (Gast)


Lesenswert?

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

von Bauform B. (bauformb)


Lesenswert?

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.

von Olaf (Gast)


Lesenswert?

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