Forum: Digitale Signalverarbeitung / DSP / Machine Learning Blackfin 592 Interrupts


von serg (Gast)


Lesenswert?

Hallo zusammen DSPler,

hab hier ein Projekt was mit VisualDSP++ erstellt wurde, nun versuche 
ich dieses Projekt auf die GNU Toolchain zu portieren und stoße auf 
einige Fehler. In dem Projekt werden einige Interrupt Quellen definiert.
1
register_handler(ik_ivg9, Sport0_RX_ISR);
2
register_handler(ik_ivg11, Switch_ISR);
3
register_handler(ik_ivg12, Timer_ISR);

Eigentlich klappt alles nur bei den drei Funktionen verschluckt sich der 
Compiler und liefert diese Fehlermeldung.
1
/tmp/cclM2Efk.o: In function `_Init_Interrupts':
2
Audio Talkthrough.c:(.text+0x396): undefined reference to `_register_handler'
3
Audio Talkthrough.c:(.text+0x3a4): undefined reference to `_register_handler'
4
Audio Talkthrough.c:(.text+0x3b2): undefined reference to `_register_handler'
5
collect2: ld gab 1 als Ende-Status zurück

Das ganze compiliere ich mit "bfin-elf-gcc -mcpu=bf592" und inkludiere 
auch die exception.h in der die Definition der register_handler 
enthalten ist. Kennt irgend einer eine Lösung für das Problem oder wie 
löst ihr das Thema Interrupts in euren Projekten, über jegliche 
Denkanstöße und Hilfe würde ich mich freuen.

mfg

Serg

von Strubi (Gast)


Lesenswert?

Moin,

die register_handler() ist, wenn ich mich recht erinnere, 
VDK-Bibliothekskram. Musst Du leider wohl selbst schreiben.
Abgucken kannste dir aber einiges aus der 'standalone shell', siehe 
irq.c:

http://section5.ch/dsp/blackfin/shell-1.1eval.tgz

Leider gibts noch keinen Port für den 592, aber vielleicht magst Du den 
ja beisteuern..

Gruss,

- Strubi

von serg (Gast)


Lesenswert?

Hallo Strubi,

sorry hat es was länger gedauert. Bin leider etwas unbedarft in dem 
Thema Blackfin und Interrupts (GNU Toolchain) habe erst angefangen, bin 
aber begierig dazu zu lernen. Könntest du mir ein paar Tips geben wie 
ich konkrett vorgehen soll.

gruß

Serg

von Martin S. (strubi)


Lesenswert?

Hi Serg,

hast Du dir mal die Hardware-Referenz angeschaut?
Die Interrupt-Moeglichkeiten sind beim Blackfin recht komplex.
Gibt ja den System Interrupt Controller (SIC), der periphere Ereignisse 
auswertet, diese wiederum werden den einzelnen Kanaelen zugeordnet 
(siehe SIC_IARx register).
Die Funktionen in irq.c machen das soweit alles für verschiedene 
Blackfin-Derivate, der 592 fehlt nur noch.
Ob ein Interrupt geklingelt hat, kann man ja immer prima per Monitoring 
der *IPEND register ermitteln, oder Breakpoint auf IRQ-Handler setzen. 
Die eigentlichen Handler sitzen in irqhandler.asm. Leider ist das 
'interrupt'-Attribut in einigen Releases des C-Compiler 'kaputt', drum 
empfiehlt es sich, die Handler in Assembler zu schreiben.

Grüsse,

- Strubi

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.