AVR internal i external data memory

Jul 28, 2004 4 Replies

Jak wygląda sprawa wykorzystywania jednocześnie wewnętrznej i zewnętrznej pamięci danych w mikrokontrolerach rodziny AVR (dokłądniej AT90S8515). Według noty katalogowej pamięć danych (Data Memory) jest podzielona tak:



- $0000 - $005F - rejestry;



- $0060 - $025F - InternalSRAM;



- $0260 - $FFFF - External SRAM. Potrzebuję podłączyć do procesora 32 KB zewnętrznego RAM oraz kilka rejestrów w pozostałych 32 KB. Jednocześnie chcę korzystać z wewnętrznej pamięci RAM. Czy mogę podłączyć 32KB pamięć RAM w "dolnej" połowie przestrzeni adresowej? To znaczy A0-A14 do kostki RAM i CS' z A15. Co się stanie wtedy, gdy zapiszę coś pod adresem z przedziału $0000 - $025F? Zostanie to umieszczone w wewnętrznej pamięci, w zewnętrznej pamięci czy w obu? Początek ext. RAM będzie zakryty przez int. RAM? A może adres $0260 z przestrzeni adresowej będzie odpowiadał adresowi komórki $0000 w zewnętrznej RAM? Jak to jest rozwiązane?



Pozdrawiam!


Tak, niestety, bêdzie zakryty przez wewnêtrzny RAM, rejestry i przestrzen i/o.

Nie. Ale - je¶li wykorzystujesz pamiêæ 32kB (A15 niepod³±czone) - mo¿esz dobraæ siê do adresów 0x000...0x025F adresuj±c po prostu poprzez dodanie do tego 2^15, czyli adresuj±c jako 0x8000.. 0x825F. Proste, ale przyznajê siê, ¿e sam na to nie wpad³em tylko wyczyta³em kiedy¶ w dataszicie. ;-)

Pzdr, Raf.

Danielj Jaworski napisał(a):

Przecież sam napisałeś to wyraźnie. Wszelkie zapisy pod adresy do 0x025F będą wpisane odpowiednio do rejestrów i sram wewnątrz. Jeśli podłączysz sram tak, jak mówisz, to będziesz miał go pod adresami 0x0260 ... 0x821F, powyżej umieść sobie inne rzeczy.

Cze¶æ.

Je¶li pod³±czysz pamiêæ tak jak pisa³e¶, tzn. adresy A0-A14 procesora do wej¶æ adresowych A0-A14 pamiêci i A15 procesora do CS pamiêci, to stracisz wtedy t± czê¶æ pamiêci zewnêtrznej która jest przykryta przez wewnêtrzne rejestry i pamiêæ ( dla adresu 8000h A15 =1 i pamiêæ bedzie nieaktywna). Je¶li zostawisz A15 niepod³±czone to bêdziesz mia³ dostêp do ca³ych 32KB ramu zewnêtrznego, przy czym blok pamiêci zewnêtrznej od 0000h do 025fh bêdzie widziany pod adresem przesuniêtym o 8000h (od 8000h do 825fh). Innym rozwi±zaniem jest np. pod³±czenie A15 procesora przez negator do CS pamiêci (zak³adam, ¿e CS jest aktywne w stanie niskim). Bêdziesz j± wtedy widzia³ pod adresami od 8000h do ffffh. Zapewne znalaz³o by siê jeszcze kilka pomys³ów, wybór nale¿y do Ciebie.

Pozdrawiam, Jacek

To jest zgodnne z moimi przypuszczeniami - chciałem się upewinić.

Tak zrobić nie mogę, bo w przestrzeni adresowej muszę umieścić jeszcze kilka rejestrów WE/WY.

OK. Tylko wiaże się to z dodatkową kostką na PCB, a już ciasno jest.

Planowałem początkowo połączenie A15 z CS' oraz wejściem G1 74LS138 pracuącego w roli dekodera adresu (do wejść A, B i C '138 doprowadziłem A12, A13, A14). Dzięki temu SRAM znalazł by się w dolnych 32KB a rejsetry podpięte do wyjść '138 w górnych 32KB przestrzeni adresowej.

Zrobię tak CS' od kostki SRAM podłączę przez bramkę NOT do A15, a w '138 wykorzystam G2A' i G2B' (łącząc je również z A15).

Dziękuję za wyczerpującą odpowiedź.

Pozdrawiam!

Join the Discussion

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

Didn't find your answer?

Ask the community — no account required