Hallo zusammen
ich versuche gerade ein paar Funktionen zusammenzustellen, die es mir
auf einem AT91SAM7S256 erlauben, ins interne Flash zu schreiben. Habe
dafür zuerst mal das Kapitel über den Embedded Flash Controller (EFC)
gelesen und mich dann ans Programmieren gemacht. Was dabei rausgekommen
ist, könnt ihr im Anhang sehen (zumindest das C Source File).
Nur leider funktioniert das noch nicht so ganz, wie ich gerne möchte.
Irgendwie springt der Programmverlauf aus der IntFlash_Write() Funktion
immer zur Adresse 0x0 und kommt dann halt wieder in die main() Funktion
(Soft Reset sozusagen). Ich habe dann mal angefangen die Quelle des
Übels zu suchen und hab mich durch die Funktion durchgesteppt.... und
lustigerweise lief dabei alles einwandfrei, ich konnte problemlos
mehrere Pages des internen Flashs beschreiben. Ein bisschen verwirrt hab
ich das Programm nochmals komplett (ohne Steps und Breakpoints)
durchlaufen lassen und da ist es sofort wieder "abgestürzt". Durch
setzen verschiedener Breakpoints konnte ich das Problem dann auf die
_IntFlash_Ready() Funktion reduzieren (Zeile 73):
1 | // Warten bis Schreib-Routine fertig
|
2 | statreg = _IntFlash_Ready();
|
Solange ich VOR dem Ausführen dieser Funktionen einen Breakpoint setze,
funktioniert alles einwandfrei. Nehme ich den Breakpoint raus, springt
er von dort zu 0x0.
Hat jemand einen Hinweis, woran das liegen könnte? Ich nehme mal an,
dass meine _IntFlash_Ready() Funktion zu wenig lange wartet und der
Prozessor eigentlich noch am Schreiben der Daten ist. Durch den
Breakpoint hat er jedoch genug Zeit den Schreib-Vorgang zu beenden. Ist
sowas möglich? Und wenn ja wie bzw was mache ich falsch? Ich prüfe
eigentlich einfach das Ready-Flag im Status-Register des EFCs (da ich
keine Interrupts zur Verfügung habe).
Falls zusätzliche Informationen zum Umfeld oder zu Code-Ausschnitten
benötigt werden, sagt einfach Bescheid. Bin für jeden Tipp und jede
Hilfe sehr dankbar!
Grüsse
Sidd