Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek dla www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Podlczenie pamieci i pare pytan.

06 Gru 2006 21:47 1197 7
  • Poziom 12  
    Witam wszystkich,mam pare pytan do Was,a mianowcie musze podpiac pod swoj procek konkrtnie ADUC812 dwie pamieci SRAM 512. Kompletnie nigdy tego nie robilem i mam nadzieje pomozecie mi to zrozumiec, o to moje pytania:

    1.W procesorze sa odpowiednio porty oznaczone AD0 np i A0. Domyslam,ze ma to cos wpolnego z liniami adresowymi i danych,ale niech mi ktos to wylozy lopatologicznie ,czemu one maja konkretnie sluzyc.

    2.W karcie ADUC812 podaja ,ze external data memory moze byc 24bit ,czy to znaczy ,ze maksymalnie mozna podpiac do procesora 16MB ?

    3.Jak przebiega komunikacja z taka pamiecia? Wyczytalem gdzies,ze w momencie zapisu odczytu do pamieci zewnetrznej jest ona podpinana w miejce XData procka, ale nie wiem jakie ma to konsekwencje. Wyobrazam
    sobie no zapis do pamieci,w ten sposob...na jednej CS aktywujemy i zapisujemy dane na odpowiednie adresy...teraz jak sprawdzic ,ze pamiec jest juz pelna i zapisac do drugiej komorki? Czy jestes jakas flaga....wlasnie tego nie moge zrozumiec....

    4. Jesli ktos ma jakies w miare dobre linki do opisu jak sie programuje pamiec to bylbym wdzieczny.


    Pozdrawiam
  • Poziom 33  
    Zasada jest taka. Potrzebujesz dwa zatrzaski adresowe, jeden na bajt MSB, jeden na LSB. Procek ma dodatkowy rejestr DPP który w połączeniu z DPTR jest w stanie wystawić adres 24bitowy. Najpierw wystawia na P0 LSB adresu a na P2 MSB, są one zatrzaskiwane przez ALE, później na P2 podawany jest środkowy bajt adresu a zaraz później sygnał odczutu lub zapisu (RW lub RD) i dane idą po P0. Oznaczenie AD0 to pierwszy bit danej a A0 to pierwszy bit adresu na porcie P0 (w sumie to jest ten sam pin). :)
    Aby podłączyć dwie pamięci pod szynę adresową to pin /CS jednej pamięci podpinasz do 20bitu całego adresu (adres<0x7FFFF), drugą do tego samego pinu ale sygnał musi być zanegowany (adres >0x7FFFF). Wszystko co do adresu 0x7FFFF włączy "dolne" 512kB a wszystko co powyżej włączy "górne".
    Co do obsługi pamięci adresujesz ją oczywiście jako XDATA. W asm nie ma problemu bo wpisujesz dodatkowy bajt do DPP. W C musisz użyć specjalnej rozbiegówki a dla kompilatora jest to typ pamięci zwany "far" i tak musisz w deklarować zmienne.
    Code:
    unsigned int far Zmienna;
    //przynajmniej dla Keila.

    Tutaj masz opis.
    http://www.analog.com/UploadedFiles/Applicati...__Addressing_16MB_of_External_Data_Memory.pdf
  • Poziom 12  
    Dzieki wielkie juz mi sie troche przejasnilo...a masz moze tudziez dysponujesz linkiem do jakiegos przykladowego kodu wlasnie zapisania danych do pamieci zewnetrznej. Najlepiej lapie wszystko jak mam kawalek kodu w ASM lub w C....
    Pozdrawiam
  • Poziom 12  
    Dzieki...docelowo bede wysylal do pamieci probki z przetwornika. Z tego wzgledu ,ze jeszcze nie lapie do konca obslugi pamieci, chcialbym sie poradzic. Czy podlaczajac zgodnie z rysunkiem musze jeszcze cos dodac do schematu aby wysylac dane...czy wystarczy je wystawiac na P0.

    Pozdrawiam
  • Poziom 33  
    Wystarczy, że podłączysz tak jak na rysunku (dwa zatrzaski 74HCT573).
    W kodzie robisz np: tak

    Code:

    unsigned  int far Pomiary[];
    unsigned int far *ptrPomiary=&Pomiary;
    .         
    .
    .
    *ptrPomiary=Probka;ptrPomiary++; //tu próbka już trafia "sprzętowo" do pamięci.
    .
    .       
  • Poziom 12  
    Moglbys mi po krotce wytlumaczyc,bo z tymi wskaznikami nigdy nie do konca lapalem o co biega...z gory dzieki.

    Pozdrawiam
  • Poziom 33  
    Deklaracja wskaźnika
    Code:
    unsigned int far  *ptrPomiary=&Pomiary;

    to deklaracja zmiennej która wskazuje na miejsce w pamięci (w tym przypadku wskazuje na pierwszą daną w tabeli Pomiary) i od razu wpisujemy do niej adres od którego zaczyna się tabela Pomiary.
    Okreslenie "far" dotyczy zewn. pamięci XDATA i wtedy kompilator wie że jak napiszemy
    Code:
    *ptrPomiary=próbka;
    to znaczy że zapisujemy zmienną próbka pod adresem na jaki wskazuje ptrPomiary (oczywiście rozkazem "movx @DPTR,A") bo zadeklarowaliśmy go w pamięci "far".
    Przestrzeń "far" ma jeszcze tzw. klasy, rodzaje (XDATA,PDATA,HDATA,HCONST) ale to może na później :)