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

[ATMega128][C/AvrStudio+WinAvr] ATMega128 i zewn. RAM.

alagner 01 Sty 2012 11:11 2114 0
REKLAMA
  • #1 10332921
    alagner
    Poziom 26  
    Witam, mam następujący problem - staram się dołączyć do Atmegi 64k pamięci sRAM, konkretnie 2x 61256-15. Póki co procek taktowany wewn. rezonatorem 8MHz, docelowo ma być kwarc 16MHz (jeszcze go po prostu nie wlutowałem).
    Wyłączona zgodność z Mega103, JTAG też.

    Schemat tutaj:
    [ATMega128][C/AvrStudio+WinAvr] ATMega128 i zewn. RAM.

    Przy czym bufor i inwerter są koniec końców w wersjach HCT, bo z tego co znalazłem ta pamięć to CMOS kompatybilny z TTL.

    Wszystko oczywiście odsprzęgane kondensatorami ceramicznymi, zasilane z 5V, więc z tego co z datasheeta zrozumiałem, problemów w prędkością raczej nie będzie.

    I cóż...próbowałem najpierw ugryźć to kodem stąd, najprościej:
    http://leon-instruments.blogspot.com/2011/04/pytki-testowe-do-mikrokontrolerow.html

    ale bezskutecznie.
    Wobec tego zacząłem kombinować z parametrami linkera.
    dopisałem to

    
    -Wl,--defsym=__heap_start=0x801100,--defsym=__heap_end=0x80ffff
    

    Docelowo dynamicznie alokowane zmienne chciałbym wrzucić do ramu zewnętrznego. Mile widziana w tamtym miejscu byłaby też sekcja .noinit, ale to nie jest już aż tak ważne.

    Alokuję sobie potem tablicę unsigned charów, rozmiar 32766 i wypełniam ją wartościami od 0 do FFh. Wszystko byłoby pięknie, ale kiedy ślę to przez RS'a dostaję w terminalu (Advanced Serial Port Terminal, Eltima Soft.) coś takiego:
    
    00000000: 02 03 04 05 06 07 08 09  |  0a 0b 0c 0d 0e 0f 10 11


    Wszystko pięknie ładnie, ale gdzie pierwsze dwa bajty mi wcięło? Bo z tego co widzę jest prawie dobrze (:

    Kod poniżej:

    Kod: text
    Zaloguj się, aby zobaczyć kod




    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    A, i dla jasności:
    w AVR studio w Configuration Options pomimo wyboru ATMegi128, SRAM size mam wyświetlany jak 0x1000 i wstępnie tamże ustawiony stos, co trochę mnie niepokoi, bo powinno być chyba 0x10ff?

    EDIT: diagnostyki cz.2:

    napsiałem sobie w asmie prosty program ustawiający stos na koniec pamięci zewnętrznej a potem robiący RCALL do procedury wysyłającej bajt po UARTcie.

    Kod: text
    Zaloguj się, aby zobaczyć kod



    I tak - z jedną kością RAM, SP na 7fffh - ok. Z drugą kością RAM, SP na ffffh - ok.
    Wsadzone obie kości - SP 7fffh - ok. SP ffffh -wygląda na wysypanie się stosu, leci ciągle 3a a7 po RS232.


    Pozdrawiam


    EDIT2:

    poprzekładałem RAMy parokrotnie, okazuje się, że to, że jedna kość działała najpierw dobrze to był przypadek, bo potem zaczęła robić cuda. Jutro spróbuję wsadzić inną, zobaczymy, co będzie. Jak się okaże że to pomogło - sprawa zamknięta.

    EDIT3: jedna kość była ubita. Zamykam.
  • REKLAMA
REKLAMA