atmega 128 + external ram

Witam. Czy komuś w winavr-rze udało się odpalić zewnętrzny Ram. Ja próbuję ale z mizernym skutkiem. Mam podłączony CS do nóżki A15 więc adres zewnętrznego ramu zaczyna się od 0x8000 co też wpisałem w pliku Make file (a właściwie program do tworzenia makefila). Nie wiem jedynie w którym miejscu w rejestrze MCUCR wpisać SRE. Wiem że musi to nastąpić przed funkcją main próbowałem ze stronki o winavrze libc kombinacji z .init3 ale też nie działa. Jeśli ktoś ma jakieś doświadczenie to byłoby super. Acha jak chcę przerzucić do zewnętrznego ramu całą zawartość tak aby nie korzystał z wewnętrznego. Pozdrawiam

Reply to
michwolo
Loading thread data ...

W artykule snipped-for-privacy@q21g2000hsa.googlegroups.com> snipped-for-privacy@gmail.com napisał:

Na pewno CS jest aktywny stanem wysokim?

Reply to
JS

Tue, 29 Jan 2008 11:45:45 +0100, na pl.misc.elektronika, MK napisał(a):

........

Jeśli włączenie ext ram będzie w main - to zostanie stracona przeprowadzana wcześniej inicjalizacja zmiennych oraz domyślne zerowanie. Rzeczywiście najlepiej w init3 ( te sekcje startowe właśnie do takich celów są ). Można to zrobić dodatkowym pliczkiem asm albo bezpośrednio w C, deklarując i definiując funkcję :

void EnableExtRam(void) __attribute__ ((naked)) __attribute__ ((section (".init3")));

void EnableExtRam(void) { XMCRA = 0; XMCRB = _BV(XMBK); MCUCR = _BV(SRE); }

Funkcji tej nigdzie jawnie nie wywołujemy - sama definicja powoduje umieszczenie kodu w odpowiednim miejscu - zaraz za wektorami przerwań a przed załadowaniem zmiennych inicjalizowanych:

.............................

0000008c <__ctors_end>: 8c: 11 24 eor r1, r1 8e: 1f be out 0x3f, r1 ; 63 90: cf ef ldi r28, 0xFF ; 255 92: d0 e1 ldi r29, 0x10 ; 16 94: de bf out 0x3e, r29 ; 62 96: cd bf out 0x3d, r28 ; 61 00000098 <EnableExtRam>:

void EnableExtRam(void) { 98: 10 92 6d 00 sts 0x006D, r1 XMCRA = 0; XMCRB = _BV(XMBK); 9c: 80 e8 ldi r24, 0x80 ; 128 9e: 80 93 6c 00 sts 0x006C, r24 MCUCR = _BV(SRE); a2: 85 bf out 0x35, r24 ; 53

000000a4 <__do_copy_data>: a4: 11 e0 ldi r17, 0x01 ; 1 a6: a0 e0 ldi r26, 0x00 ; 0 a8: b1 e0 ldi r27, 0x01 ; 1 ........................................................................

To zapewni fizyczne włączenie ext ram odpowiednio wcześniej, natomiast dyrektywa linkera :

-Tdata=0x801100 umieści tam wszystkie zmienne.

Reply to
Jurek Szczesiul

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.