Temat tego postu jest po części rozwiązany, ale mimo to chciałbym zapytać o przyczynę zaistaniałego problemu.
Otóż jestem posiadaczem płytki sam7-EX256 Olimex i zaczynając przygode z programowaniem ARM-ów wykorzystuje darmowy kompilator GNUARM.
Przy poszukiwaniu przykładowych programów wykorzystuje example z katalogu C:\WinARM\examples\at91sam7s64_Atmel_interrupt
i \at91sam7s64_Atmel_example
na podstawie tych projektów próbowałem zrobić projekt dla AT91SAM7x256
Zmieniłem skrypt AT91SAM7S64-ROM.ld linkera żeby wykorzystywał cały obszar flasha i RAM-u, podmieniłem bibiotekę na ATMEL-a na AT91sam7x256.h.
Po długich próbach i porównywaniach plików zauważyłem ze w katalogu ATMELinterrupt w pliku CStartup.c w funkcji LowLevelInit oba projekty różnią się wpisami do rejestru
MC_FMR (flash mode register)
lub
gdzie (z pliku at91sam7x256):
opis z dokumentacji atmela dla sam7x256 jest dla mnie mało zrozumiały :
Może ktoś rozszyfrowywał o co tutaj chodzi i dlaczego jeżeli nie ma wpisu do FMCN program nie działa ?
Otóż jestem posiadaczem płytki sam7-EX256 Olimex i zaczynając przygode z programowaniem ARM-ów wykorzystuje darmowy kompilator GNUARM.
Przy poszukiwaniu przykładowych programów wykorzystuje example z katalogu C:\WinARM\examples\at91sam7s64_Atmel_interrupt
i \at91sam7s64_Atmel_example
na podstawie tych projektów próbowałem zrobić projekt dla AT91SAM7x256
Zmieniłem skrypt AT91SAM7S64-ROM.ld linkera żeby wykorzystywał cały obszar flasha i RAM-u, podmieniłem bibiotekę na ATMEL-a na AT91sam7x256.h.
Po długich próbach i porównywaniach plików zauważyłem ze w katalogu ATMELinterrupt w pliku CStartup.c w funkcji LowLevelInit oba projekty różnią się wpisami do rejestru
MC_FMR (flash mode register)
AT91C_BASE_MC->MC_FMR = AT91C_MC_FWS_1FWS ;
lub
AT91C_BASE_MC->MC_FMR = ((AT91C_MC_FMCN)&(48 <<16)) | AT91C_MC_FWS_1FWS ;
gdzie (z pliku at91sam7x256):
#define AT91C_MC_FWS_1FWS ((unsigned int) 0x1 << 8) // (MC) 2 cycles for Read, 3 for Write operations
opis z dokumentacji atmela dla sam7x256 jest dla mnie mało zrozumiały :
• FMCN: Flash Microsecond Cycle Number
Before writing Non Volatile Memory bits (Lock bits, General Purpose NVM bit and Security bits), this field must be set to the
number of Master Clock cycles in one microsecond.
When writing the rest of the Flash, this field defines the number of Master Clock cycles in 1.5 microseconds. This number
must be rounded up.
Warning: The value 0 is only allowed for a master clock period superior to 30 microseconds.
Warning: In order to guarantee valid operations on the flash memory, the field Flash Microsecond Cycle Number (FMCN)
must be correctly programmed.
Może ktoś rozszyfrowywał o co tutaj chodzi i dlaczego jeżeli nie ma wpisu do FMCN program nie działa ?