Forum: FPGA, VHDL & Co. Zugriff auf MSR-Register PowerPC


von Martin (Gast)


Lesenswert?

Hallo Leute!

Ich möchte gerne die IRQ-Leitung des Power-PC-Prozessors des Virtex4 
einschalten.
In der Doku steht MSR[EE]=1; // External Interrupts

Tolle Sache, nur funktioniert das nicht. Muss ich hierfür etwas
spezielles einbinden?

Danke für eure Hilfe!

Tschüss
Martin

von adpat (Gast)


Lesenswert?

Gibt es vielleicht noch ein übergeordnetes globales 
Interrupt-Enable-Bit?

von Bluehorn (Gast)


Lesenswert?

Wie meinen, das funktioniert nicht? In welchem Kontext?

> MSR[EE]=1; // External Interrupts

Das klingt nicht nach plausiblem Quellcode - ich hoffe, niemand 
definiert ein Makro mit dem Namen "EE", das ist viel zu gefährlich 
(m.E.). Das sieht eher so aus, als wenn das eine kurze Beschreibung ist, 
dass das Master Status Register ein External Enable Flag hat, das man 
auf '1' setzen muss.

Welches BSP verwendest Du? Wenn standalone, guck Dir mal das Makro 
XExc_mEnableExceptions in xexception_l.h an. Mit folgendem Code solltest 
Du externe Interrupts bekommen:
1
#include <xexception_l.h>
2
3
int main(void)
4
{
5
    ...
6
    XExc_mEnableExceptions(XEXC_ALL);
7
    ...
8
}

Ansonsten guck mal auf der Xilinx-Seite, die strotzt von Dokumentation, 
unter anderem: http://www.xilinx.com/bvdocs/appnotes/xapp778.pdf

von Martin (Gast)


Lesenswert?

Danke Bluehorn!

Ich habe mich jetzt Ewigkeiten rumgespielt und bin fast verzweifelt.

Das Prozessorsystem wurde fehlerfrei erstellt und auch die ganzen
Initialisierungen im C-Code sind korrekt gewesen.
Natürlich, wenn das ganze System jedesmal abstürzt, wenn man den
Bitstream downloadet bzw. wenn der erste IRQ ausgelöst wird, dann 
kontrolliert man alles doppelt und dreifach.
Gott sei Dank habe ich ein funktionierendes Beispiel gefunden.

Alle Unterschiede des Beispiel und meines Projektes wurde penibel genau
untersucht.

Und ich kam dahinter was es war nach 8 Stunden:
Wenn man auf Applications klickt: Projekt mit der rechten Maus:
Set Compiler Options: - War "Use Custom Linker Script"
standardmäßig angekreuzt.

Damit aber die ganze Hütte bei einem Auftritt eines IRQs
nicht abstürzt muss man das Häkchen "Use Default Linker Script"
auswählen.

Nun habe ich bitte zwei Fragen:
Wozu dient diese Einstellung und warum ist sie falsch eingestellt!?!
Ich habe nämlich zusätzlich ein Microblaze-Projekt, wo auch "Use Custom 
Linker Script" eingestellt ist. Dort funktionieren die IRQs auch mit 
dieser Einstellung.

Danke
Tschüss
Martin

von Bluehorn (Gast)


Lesenswert?

> Und ich kam dahinter was es war nach 8 Stunden:
> Wenn man auf Applications klickt: Projekt mit der rechten Maus:
> Set Compiler Options: - War "Use Custom Linker Script"
> standardmäßig angekreuzt.

Nun ja, das ist eigentlich kein Problem. Habe bisher immer ein "custom 
linker script" benutzt. Sonst generiert er wohl irgendwo eins und wer 
weiss, wann sich das durch ein WebUpdate o.ä. mal ändert.

Es gibt irgendwo einen Menüpunkt, wo Du Dir das Linkerscript generieren 
kannst. Dann mal kurz rüberschauen, ob es Sinn macht und abhaken :)

Zur Syntax der Linkerscripts siehe 
http://sourceware.org/binutils/docs-2.17/ld/Scripts.html

Besagt eigentlich nur, auf welche Adressen der Code letztendlich 
geschoben wird. Auf "herkömmlichen" Systemen kann man eigentlich immer 
mit dem gleichen Script fahren, aber auf FPGAs ist ein bisschen viel 
Bewegung im Design möglich...

Grützi, Torsten

von Martin (Gast)


Lesenswert?

Danke Bluehorn!

Ich verwende das ML403-Board.
Ein einfaches System kann ich schon bauen.

Doch jetzt wollte ich den DDR_SDRAM für das Programm
und für Daten nutzen.
Das Linker Script ist entsprechend den Default-Einstellungen
eingestellt.

Wenn ich jetzt downloaden möchte, dann erhalte ich folgende
Fehlermeldung:
Error: Data2MEM: 33 - Matching ADDRESS_SPACE for code segment #3 not 
found in 'implementation\system_bd.bmm'.
Code segment #3 occupies [0x24000408:0x24000437]

ERROR:MDT - Data2Mem gnerated errors during execution


Ich habe nachgesehen und in diesem besagten File steht nur was von BRAM.

Wie kann ich diesen Fehler umgehen?
Wie kann ich das User-Progamm im DDR-SDRAM laufen lassen?

Ich bin für jeden kleinen Hinweis dankbar.

Danke.

Tschüss
Martin

von Bluehorn (Gast)


Lesenswert?

> Wenn ich jetzt downloaden möchte, dann erhalte ich folgende
> Fehlermeldung:
> Error: Data2MEM: 33 - Matching ADDRESS_SPACE for code segment #3 not
> found in 'implementation\system_bd.bmm'.
> Code segment #3 occupies [0x24000408:0x24000437]

Dann passt das Linkerskript nicht zu Deiner BMM, oder Du hast von Hand 
die Adresse angegeben (nehme ich mal nicht an).

Du kannst Dir ein neues Linkerscript bauen, indem Du im EDK den 
Menüpunkt Software->Generate Linker Script aufrufst, IIRC kommt dann ein 
Wizard, wo Du einiges einstellen kannst.

Gruss, Torsten

von Martin (Gast)


Lesenswert?

Ich habe folgendes eingestellt:
Im Wizard beim Erstellen des Projektes habe ich den 64Mx32 DDR_SDRAM 
ausgewählt.

Das Programm MemoryTest wähle ich aus und lege Instruction, Data und 
Stack/Heap in den DDR_DSRAM.

Dann stelle ich das Projekt fertig und versuche es downzuloaden und
jetzt erhalte ich den oben beschriebenen Fehler.

Wenn ich aber auf Generate Linker Script gehe und alles auf BRAM 
umändere, dann funktioniert alles, aber das will ich nicht, denn wenn 
die Applikation einmal größer wird oder ich größere Felder anlegen 
möchte, dann hätte ich die gerne im DDR_DSRAM.

Danke für eure Mühe.

Tschüss
Martin

von Bluehorn (Gast)


Lesenswert?

> Wenn ich aber auf Generate Linker Script gehe und alles auf BRAM
> umändere, dann funktioniert alles, aber das will ich nicht, denn wenn
> die Applikation einmal größer wird oder ich größere Felder anlegen
> möchte, dann hätte ich die gerne im DDR_DSRAM.

Wieso änderst Du dann alles auf BRAM um? Die obige Fehlermeldung tritt 
normalerweise auf, wenn das Linker-Script nicht zur Memory Map (BMM) 
passt. Nach Generate Linker Script sollten die beiden wieder zueinander 
passen (auch, wenn Du den Kram in den SDRAM legst).

Keine Ahnung, wie der Fehler überhaupt zustande kommt, aber die 
Stabilität der Xilinx-Software ist nicht gerade rekordreif.

Gruss, Torsten

von Martin (Gast)


Lesenswert?

Wem sagst du das.

Man sitzt dann oft Stunden an einem kleinen Fehler, welcher von der 
EDK-Software verursacht wird.
Es beginnt bei Fehlern im IRQ-System von IP-Cores, Fehlern bei der
Initialisierung von Treibern, Fehlern im Linker-Script.
usw.

Ist die 9.1 Version besser oder hat die auch wieder so 
vieeieieieieieieeieieieieieieieiiele Bugs?


@Bluehorn
Wenn ich nun alle Einstellungen auf DDR-Ram ändere (bei generate linker 
script), dann erhalte ich sofort wieder den altbekannte Fehlermeldung.


Tschüss
Martin

von Bluehorn (Gast)


Lesenswert?

> Wenn ich nun alle Einstellungen auf DDR-Ram ändere (bei generate linker
> script), dann erhalte ich sofort wieder den altbekannte Fehlermeldung.

Ohne weitere Info tappe ich da genauso im Dunkeln, wie Du. Schick mal 
das Linkerscript, die .BMM-Datei und am Besten die .MHS-Datei.

Gruss, Torsten

von sepp (Gast)


Lesenswert?

>Ist die 9.1 Version besser oder hat die auch wieder so
>vieeieieieieieieeieieieieieieieiiele Bugs?

Ich habe schon zwei Bugs im SDK(9.1) gefunden. Immerhin hat Xilinx 
innerhalb von zwei Wochen ein Patch gemacht. Soweit ich weiss soll das 
EDK 9.2 im September kommen.

von David (Gast)


Lesenswert?

Hallo,

ich habe die selbe Problemme hier. Ich habe eine Applikation die sehr 
Groß ist, und dann muss ich legen fast alles um die RAM an. Ich habe 
auch eingestellt die Linker_script von EDK Wizard. Ich habe keine Ahnung 
vor was mache ich nachste.

Wenn Jemand mir helfen können, dann würde ich sehr froh zu sein :)

Viele grüße

--
David

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.