Elektroda.pl
Elektroda.pl
X
Elektroda.pl
Pamięci IndustrialPamięci Industrial
Proszę, dodaj wyjątek dla www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Zapis do pamięci flash ARM7, zawieszanie procesora

28 Lis 2010 19:57 1210 2
  • Poziom 2  
    Witam,

    Mam problem z zapisem do pamięci flash w AT91SAM7S128. Dane zapisują się do pamięci ale w trakcie wykonywania się programu, przy zapisie do rejestru FCR:
    AT91C_BASE_MC->MC_FCR = (0x5A << 24) | AT91C_MC_FCMD_START_PROG | (page << 8);
    procesor się zawiesza.

    Poniżej znajduje się kod służący do zapisu w pamięci.


    int flashWrite(unsigned int address, const void *data, unsigned int size)
    {
    unsigned int val=(f_MCK_Hz/1000000)+((f_MCK_Hz/1000000)>>1)+1;
    AT91C_BASE_MC->MC_FMR = AT91C_MC_FWS_1FWS | val <<
    MC_MCK_PER_1_5_US_bsf;

    unsigned int i;
    unsigned int page;
    unsigned int *src = (unsigned int*)data;
    unsigned int *dest = (unsigned int*)address;
    page = ((char *)dest - AT91C_IFLASH) / AT91C_IFLASH_PAGE_SIZE;
    for(i = 0; i < size; i++)
    dest[i] = src[i];
    AT91C_BASE_MC->MC_FCR = (0x5A << 24) |
    AT91C_MC_FCMD_START_PROG | ((page << 8));
    if(0 != (AT91C_BASE_MC->MC_FSR & AT91C_MC_PROGE))
    return 0;
    while(0 == (AT91C_BASE_MC->MC_FSR & AT91C_MC_FRDY));
    return 1;
    }


    Ustawienia są następujące:
    f_MCK_Hz = 18432000 [Hz]
    address - adres ostatniej strony w pamięci(0x11FF00)
    *data - wskaźnik na bufor z danymi (unsigned int)
    size - ilość danych w buforze


    Czym może być spowodowane to zawieszanie się?
    Proszę o pomoc w rozwiązaniu problemu.
  • Pamięci IndustrialPamięci Industrial
  • Pomocny post
    Poziom 21  
    Witam,

    Może lamerska podpoweidź ale czy umieściłeś funkcje operujące na flashu w pamięci RAM.
  • Poziom 2  
    Dzięki za podpowiedz, okazuje się,że kompilator nie zawsze wkłada tą funkcje do pamięci RAM.Po zmianach w kodzie i odpowiednim kompilowaniu, zaczęło wszystko działać.