Re: atmega 128 + external ram

Jan 31, 2008 0 Replies


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


>
>
> > 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
> ........
> > Proszę ustawić MCUCR=0x80; dla atmega128 może to być przeciez w main.
> > Można adresować zewn. pamięć od 0x1100 do 0x1100+0x8000.
>
> Jeśli włączenie extrambę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 extramodpowiednio wcześniej, natomiast
> dyrektywa linkera :
> -Tdata=0x801100
> umieści tam wszystkie zmienne.
>
> --
> Pozdrowienia
> Jurek Szczesiul

Ok wszystko to rozumiem tylko takie pytanko jakie waitstaity dać używam kwarca 18.432MHz, podejrzewam iż się nie wyrabia a w pdf ta kwestia jest strasznie zamotana. A może mam poprostu Ram uszkodzony. Dzięki

Join the Discussion

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

Didn't find your answer?

Ask the community — no account required