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
|
endet.
1 | Read 4 bytes @ address 0x00000174 (Data = 0x43A8F44F)
|
2 | Removing breakpoint @ address 0x00000158, Size = 2
|
3 | Read 4 bytes @ address 0x4002551C (Data = 0x00000008)
|
4 | Read 4 bytes @ address 0x40025400 (Data = 0x00000008)
|
5 | Read 4 bytes @ address 0x4002551C (Data = 0x00000008)
|
6 | Read 4 bytes @ address 0x40025400 (Data = 0x00000008)
|
7 | WARNING: Failed to read cacheable memory @ address 0x40007400
|
8 | Read 4 bytes @ address 0x40007400 (Data = 0x00000008)
|
9 | WARNING: Failed to read cacheable memory @ address 0x40006404
|
10 | Read 4 bytes @ address 0x40006404 (Data = 0x00000008)
|
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.