Blackfin 592 Interrupts

Gast #2536898
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
Gast #2541485
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
#2545010
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

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 14 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.