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.