zewnętrznego SRAM-u

Feb 19, 2006 2 Replies

Witam.



Podczepiłem sobie zewnętrzną pamięć do mojej atmegi i mam problem żeby do niej coś zapisać. Używam AVR Studio 4.12 Service Pack 1, Build 462. Oto fumkcja która wydaje mi się powinna działać a nie działa, chcę zapisać daną pod konkretny adres w pamięci zewnętrznej:



#define OFFSET 0x8000



Funkcje deklarowałem raz tak: void XRAM_example (void) __attribute__ ((naked)) __attribute__ ((section (".init1"))); // Włączenie obsługi zewnętrznej pamięci RAM



A raz tak: void XRAM_example (void);



void XRAM_example (void) { unsigned long *p = (unsigned long *) (OFFSET + 1);



DDRC = 0xFF; PORTC = 0x00;



DDRB=0xFF; // bo tu mam LED-a PORTB=0xFF;



SFIOR = (1<<XMM1) | (1<<XMM0);



*p = 0xAA; //Tu zapisuje do zewnetrznej pamieci

// SFIOR = 0x00;



PORTB=0x00; //zgas LED-a



if (*p==0xAA) //Tu testuje wartosc zmiennej PORTB=0xFF; //zapal LED-a



}

Korzystam tylko z 32KB tak że linie adresową A15 połączyłem z plusem zasilania. Nie wiem czemu *p = 0xAA jest zapisywane w pamięci wewnętrznej, zarówno podczas symulacji w AVR Studio jak i podczas testu na swoim testowym układzie. Pomimo odłączenia zasilania od pamięci dioda się zapalała Musze zapisać coś pod adres 0x0000 zewnętrznej pamięci ponieważ to jest rejestr konfiguracyjny modułu WizNet no i narazie taki zapis testuje na zewnętrznej pamięci SRAM.



Pozdrawiam.


Użytkownik "Viki" snipped-for-privacy@poczta.onet.pl> napisał w wiadomości news:dt9u8u$msn$ snipped-for-privacy@atlantis.news.tpi.pl...

ATmega najpierw zapisuje swoj wlasny obszar ram, a dopiero potem zewnetrzny i tym sposobem czesc zewnetrzego ramu wogole nie bedzie uzyta. Innaczej sie nie da, chyba ze zrezygnujesz z podlaczenia ramu jako rozszerzenie wewnetrznej pamieci. pozdrawiam

Robert napisał(a):

Zawsze można dać negator (np. 74HC1G04) na linię A15 i tym sposobem zamienić połówki pamięci. Czyli dostęp do zewn. RAMu pod adres 0x0000 będzie trzeba realizować dostępem pod adres 0x8000. Albo A15 kompletnie nie podłączać do zewnętrznego scalaka (okazało się, że to nie RAM, a WizNet) a linię A15 tego scalaka zewrzeć do masy. I wtedy dostępy pod 0x8000 będą widoczne jak pod 0x0000. Ważne tylko, aby świadomość tego miał AVR.

Join the Discussion

Have something to add? Share your thoughts — no account required.

Didn't find your answer?

Ask the community — no account required