logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

[AVR][ATmega162][C] Dostep do External RAM

elakota 27 Sty 2011 10:47 1673 5
REKLAMA
  • #1 9063445
    elakota
    Poziom 13  
    Witam,

    Mam klasycznie podpięte 32kB zewnętrznego SRAM do ATmega162.
    Mam ustawione MCUCR=0x80, na oscyloskopie widać że ALE jest generowane ale sygnały /RD i /WR sa zawsze aktywne na 5V
    W pętli zapisuję do zewnetrzej pamieci i czytam tak wiec powinien sie pojawiac na nich sygnał niski.
    Jak w CV_AVR napisać kod aby czytac i zapisywać tablice bajtów w XRAM?

    [/code]
  • REKLAMA
  • #2 9064380
    operator5wp
    Poziom 16  
    Podaj z jakiego adresu czytasz/zapisujesz. Widocznie trzeba jeszcze ustawić zakres odczytu external-ram, tz page-limit ( SRL0..2 ). Zobacz w pdf. Spróbuj odczytać lub zapisać z jakiegoś z innego adresu np $8000, bo być może testujesz na pamięci wewnętrznej to (/rd /wr ) nie będą aktywne.
  • REKLAMA
  • #3 9068102
    elakota
    Poziom 13  
    Próbowałem robić w ten sposób:

    
    
    #define XRAM_Offset  0x2000
    
    unsigned int i; 
    unsigned char	error,dummy; 
    unsigned int j; 
    
    unsigned char *pl_dest_wr =(unsigned char *) (XRAM_Offset + 11);
    unsigned char *pl_dest_rd =(unsigned char *) (XRAM_Offset + 11);
    
    
    i w pętli głownej:
    
    while (1)
          {
             WatchDog = ~WatchDog;       
                
             *pl_dest_wr = 0x55;     
             delay_ms(20);
             dummy = pl_dest_rd[0];   // powinienem odczytać 0x55 
             //delay_ms(20);
             putchar1 (dummy);     
            putchar1 ('A');
    
          }
    }
    
    
    
    



    Nie wiem gdzie robie błąd. Zauważyłem że jeżeli nie mam RAMa w podstawce to na RS wysyłany jest młodzy bajt adresu
    np. teraz czytam z 0X2011 to bez ramu na rs-a jest wysyłane 0x11
    zmienię adres na 0x2004 to na rs-a wysyłane jest 0x04

    Jeżeli RAM jest w podstawce to bez względu jaki adres zapisuję /czytam i jaką wartość zapisuję to zawsze odczytuję ta sama wartość 0x03[/code]
  • REKLAMA
  • #4 9071805
    operator5wp
    Poziom 16  
    Być może coś jest nie tak z twoją pamięcią lub może być to wina złego podłączenia jej do procesora... podaj jaka to pamięć podaj nazwę oraz jak podłączyłeś ją pod adresowanie z procesorem czyli adres oraz cs . Czy dałeś też układ zatrzaskujący adres a0-a7 przez 'ALE'?
    Spróbuj też wpisać przed pętlą :
    Cytat:

    MCUCR |= (1 << SRE); // włączenie RAM'u


    co do odbierania przez rs, to sprawdź czy procesor dobrze wysyła. Daj przed pętlą kod testowy by wysłał np:
    Cytat:

    putchar1 ('T');
    putchar1 ('E');
    putchar1 ('S');
    putchar1 ('T');


    Jak odbierze to znaczy że rs działa ok to pozostaje dalej testować ram.

    Napisz więcej o tej pamięci... Będziemy działać dalej...
  • REKLAMA
  • #5 9071896
    elakota
    Poziom 13  
    Hey!

    W kodzie mam linię MCUCR=0x80;
    Jest generowany ALE wiec zewnętrzna pamieć jest na pewno włączona

    RS napewno działa, jak popatrzysz na kod to zobaczysz ze zapisuje do XRAM, delay, odczyt tej samek komórki, wysłanie odczytanej wartości na RS, wysłanie "A" na RS.
    Stad wiem ze RS chodzi i jakie wartości czytam z XRAM
    Jest to pętla wiec non stop powinny być generowane /RD i /WR a te zawsze maja stan wysoki.

    Pamięc to HM 6264LP-15 podpieta klasycznie przez 74573
    A0-A12, D0-D7, CE2 na VCC, /CE na GND, /WE na /WR, /OE na /RD

    Na razie nie przejmuje się stanem fizycznym pamięci bo nie widzę sygnałów /RD i /WR
    Jeżeli te się pojawią a wartości bedą dziwne to bedę badał pamięć.


    Zaczołem sie bawić Baskomem, mój pierwszy raz ;) Tu mimo poprawnej konfiguracji nawet nie jest generowany ALE
  • #6 9073741
    operator5wp
    Poziom 16  
    Czyli rs działa. Co do pamięci to zakres wg twoich ustawień masz od $0000-$1fff i jeżeli ją podłączyłeś tak jak mówisz (a0-a12 ram <--> procesor a0-a12) to odczyt z pod $2000 lub wyżej może dawać zły odczyt. Spróbuj zapisać i odczytać ram między $0500-$1fff. Dodam że twój procesor ma swoją pamięć od $0060-$04ff to twoja pamięć częściowo się marnuje, proponowałbym Ci przesunąć zakres ramu wyżej np od $8000, więc pod CE2-ramu podłącz adres - A15 procka wcześciej odłącz (vcc od CE2). Wtedy byś miał ram od $8000-$9fff chyba że nie możesz już nic zmienić w płytce więc pozostaje ci zakres tak jak pisałem od $0500-$1fff. Trzeba jeszcze sprawdzić zatrzask, najlepiej przy odłączonej pamięci i zapisać coś pod adres $0800-$08FF i zobacz miernikiem lub próbnikiem logicznym czy dany adres od A0-A7 sie ustawił. Podaj wyniki badań i będziemy działać dalej.
REKLAMA