Hallo Zusammen,
ich bin grad dabei, mein Stellaris Evalboard (EK-LM3S9B96) mit dem
J-Link/Edu in Betrieb zu nehmen. Als Umgebung habe ich die Yagarto-Tools
installiert und soweit auch zum laufen gebracht. Ich kann mittlerweile
mein Blinkprogramm erstellen, runterladen und auch zum Teil Debuggen.
Soweit, so gut. Jetzt fängt aber der Ärger an. Mein Programm kann nicht
alle Register im Prozessor adressieren. Meinen Port F für die Ethernet
LEDs kann ich so belegen, dass ich die LEDs anschalten kann.
Wenn ich das gleiche beim Port D mache, springt das Programm in den
Fehlerinterrupt FaultISR. Mit Eclipse und dem JLink habe ich die
Möglichkeit, mit der Positionierung des Cursors über einem Register den
Wert auszulesen. Das habe ich mal für einige Registerblöcke gemacht und
festgestellt, dass die bei den meisten Registern mit
1
WARNING: Failed to read cacheable memory @ address
Kann mir hier jemand einen Hinweis geben, wo ich hier mit suchen
weitermachen könnte? Die Registerbelegung und die Memorymap scheinen zu
stimmen. Ein System konnte ich noch nicht ausmache, außer das alle
relevanten Adressen im Block einer IO-Einheit (z.B. für PortF die
Register DIR, IS etc.), zu lesen und zu schreiben sind. Bei Port D als
Beispiel ist dagegen gar keine Adresse lesbar.
Kurzer Codeauszug
1
GPIO_PORTF_DIR_R=0x08;
2
GPIO_PORTF_DEN_R=0x08;
3
4
GPIO_PORTF_DIR_R|=0x04;
5
GPIO_PORTF_DEN_R|=0x04;
6
7
8
GPIO_PORTD_DIR_R=0x01;
Auszug aus dem Headerfile
1
#define GPIO_PORTF_DATA_R (*((volatile unsigned long *)0x400253FC))
2
#define GPIO_PORTF_DIR_R (*((volatile unsigned long *)0x40025400))
3
#define GPIO_PORTF_IS_R (*((volatile unsigned long *)0x40025404))
4
#define GPIO_PORTF_IBE_R (*((volatile unsigned long *)0x40025408))
5
6
#define GPIO_PORTD_DATA_BITS_R ((volatile unsigned long *)0x40007000)
7
#define GPIO_PORTD_DATA_R (*((volatile unsigned long *)0x400073FC))
8
#define GPIO_PORTD_DIR_R (*((volatile unsigned long *)0x40007400))
9
#define GPIO_PORTD_IS_R (*((volatile unsigned long *)0x40007404))
Mehr Ideen habe ich im Moment auch nicht mehr. Ich hoffe, hier kann mir
jemand den entscheidenden Tip geben.
Hallo,
ist der Port enabled?
Benutzt du die Driverlib von Stellaris?
Dort sind die meinsten Befehle scho integriert und brauchst dich nicht
durch alle Register kämpfen.
War bei mir immer ein Problem wenn der port nicht enabled war, dann
wirft der Controller eine exeption (FaultIsr).
Hallo,
Also ich mache ja nichts anderes als beim Port F auch. Und da geht es
ja. Damit scheint es aber nichts zu tun zu haben. Ich kann ja im
Debugmodus wie oben gesagt, den Registerinhalt anzeigen lassen. Da wo es
nicht geht, kommmt die "WARNING: Failed to read cacheable memory @
address xxx".
Ich versuche heute mal, die ROM-internen Funktionen zu nutzen. Mal
sehen, wie es da geht.
Grüße,
Jan
Hallo,
Als kurze Anmerkung möchte ich noch hinzufügen, dass ich mit der
Driverlib, mit den ROM-Funktionen sowie mit der Keil-Umgebung zum
gleichen Ergebnis komme. Ich bekomme keinen anderweitigen
Speicherzugriff außer auf die Basisadresse vom Port F + 4096Byte. Warum
und Wieso -> ????
Jan
Auf meinem EVA Board ist ein recht altes Derivate. Daher ist
TARGET_IS_TEMPEST_RB1=1
zu setzen. Hier mußt Du ggf. im Prozessor nachsehen.
Dies hat Einfluß darauf, ob die ROM-Funktionen genutzt werden oder
"gleichwertige" im Flash. (In Rev. B waren einige im ROM buggy.)
Damit ein Port benutztbar ist, muß auch diese auch aktiv sein:
MAP_SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOD);
GPIO sollte zwar default sein, aber wer weiß. Pass auf, dass Du keine
Alternate Functions aktiviert hast.
GPIOPinConfigure(...);
Ist zwar default, doch Du gibst leider nicht an, was Du alles machst:
- GPIO Digital Enable (GPIODEN) muß aktiv sein
Der Vollständigkeit halber: Greifst Du über den APB oder AHB Bus zu?
Zu einem Fault düfte meiner Meinung nach nur der fehlende Takt oder eine
falsche Adresse führen.
Hallo Steffen,
um den Thread mal abzuschließen, hier noch meine gefundene Antwort. Die
Lösung war das obige SYSCTRL-Register.
Eigentlich war das schon im Demoprogramm mit drin, bei Dir oben auch,
SYSCTL_RCGC2_R = SYSCTL_RCGC2_GPIOD;
Mit dem Eintrag schaltet man erst einmal den Takt an die entsprechenden
GPIO-Register. Sinn des Register ist die Zuschaltung vom Takt zwecks
Stromsparoption. Das war mir so noch nicht ganz klar. Aber ohne den Takt
ist das Register bzw. der Registerblock wohl ganz tot.
Mal sehen, wie weit ich nun komme ;-)
Schöne Feiertage,
Jan
Hallo!
ich bin auch gerade am Aufsetzen meiner Toolchain zur Entwicklung auf
meinem LM3S9D96 (also nur doppelter Flash vgl. mit B96).
Habe jetzt die folgendes installiert; Yagarto + Eclipse + StellarisWare
Packet.
Nun möchte ich von Grund auf ein einfaches 'Blink' runterspielen und
debuggen (Code ist ja von TI schon vorhanden), jedoch schaffe ich es
nicht, die Toolchain einzurichten, damit alles funktioniert.
Ich vermute, ich habe noch mehrere Probleme: also mit Makefile,
Einstellungen in Eclipse, Linkerscript, (Brauche ich das Scatterfile?)
Könntest du mir ein paar tips geben, wie und was ich wo einstellen muss?
Oder eventuell ein kleines Beispielprojekt schicken, dann kann ich mir
anschauen, wie man das alles richtig konfiguriert!
Vielen Dank schon im vorraus!!
Grüße,
Stefan
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.