Elektroda.pl
Elektroda.pl
X
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

sam7s64 a sam7x256, bez wpisu do FMCN program nie działa?

pgp 24 Sep 2007 11:49 1293 1
Computer Controls
  • #1
    pgp
    Level 19  
    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)

    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 ?
  • Computer Controls
  • #2
    piotrkopec
    Level 17  
    Dostęp do 'flash'a 'atmel'a w jednym cyklu jest gwarantowany do 30MHz. Jeżeli ustawiasz główny zegar na wyższą częstotliwość, to ustawiasz także 'flash wait stait'y, czyli puste cykle oczekiwania na dostęp do 'flash'a( 1FWS). Np. przy 70Mhz 2FWS, przy 91Mhz 3FWS.
    Quote:
    (AT91C_MC_FMCN)&(48 <<16)
    wskazuje na ustawianie dla 48Mhz. Ustawia się to aby kożystać z 'niepociekających bitów' takich jak 'security bit' czy 'lock bit'. 48 czyli liczba okresów głównego zegara w jednej mikrosekundzie. Jeśli pisałbyś 'bootloader' to musiałbyś ustawić to na 75( cykle w 1.5 mikrosekundy) aby móc zapisywać 'flash'.
    'LowLevelInit()' zaraz potem zmienia zegar z wolniusiego, wewnętrznego 'RC' na 'PLL'owskiego harpagana. i robi się bu. może to brak 'wait stait'ów...
    zero w 'FMCN' dozwolone tylko dla okresów większych niż 30us czyli f <= 33.(33) kHz