Hallo,
ich hab einen kleinen "Bootloader" geschrieben, welcher im Dataflash
gespeichert ist. Nach dem Prozessorstart AT91RM9200 wird der Bootloader
in den internen RAM 0x0 geladen und ausgeführt. Unter anderem ladet
dieser Bootloader das Userprogramm welches ebenfalls im Dataflash
abgelegt ist (offset 0x4200) in den SDRAM
Zum Schluss möchte ich gern dieses Userprogramm starten und springe an
die Startaddresse vom SDRAM (an der sich auch das Userprogramm
befindet). Zwar wird der Sprung ausgeführt, allerdings erfolgt auch
innerhalb des Startup-Codes wieder ein Rücksprung auf 0x0, so dass das
Boot-Programm immer wieder ausgeführt wird.
1 | typedef void (*fnc)(void);
|
2 | const fnc AppEntry = (fnc) 0x20000000;
|
3 |
|
4 | int main(void)
|
5 | {
|
6 |
|
7 | led();
|
8 |
|
9 | //cpy prog from df to sdram
|
10 | memcpy((char *)0x20000000, (char *)0x00004200, size);
|
11 |
|
12 | //start app
|
13 | AppEntry();
|
14 |
|
15 | return(0);
|
16 |
|
17 | }
|
Gruß
Bernd