eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.misc.elektronikaDziwne zachowanie R65C51 + MAX232Dziwne zachowanie R65C51 + MAX232
  • Data: 2020-08-13 07:59:06
    Temat: Dziwne zachowanie R65C51 + MAX232
    Od: Atlantis <m...@w...pl> szukaj wiadomości tego autora
    [ pokaż wszystkie nagłówki ]

    Pracuję właśnie nad pewnym projektem retro, składanym ze starych części.
    Pracą urządzenia steruje mikroprocesor WDC65C02, jest też trochę innych
    peryferiów, m.in UART R65C51. Urządzenie zdaje się pracować prawidłowo,
    uruchomiłem większość podzespołów, problemy zaczęły się właśnie przy w
    przypadku portu szeregowego.

    1) Sam R65C51 zdaje się działać prawidłowo. Kiedy podpiąłem go do
    przelotki USB-UART (linia CTS tymczasowo ściągnięta do masy) wszystko
    działa prawidłowo. Urządzenie przechodzi inicjalizację i na komputerze
    mogę odbierać wysyłane przez nie komunikaty. Transmisji w drugą stronę
    jeszcze nie testowałem.
    2) Urządzenie inicjuje się także wtedy, gdy do R65C51 nie jest
    podłączony ani konwerter USB-UART, ani RS232.
    3) Jednak gdy włożę w podstawkę układ MAX232, urządzenie nie przechodzi
    inicjalizacji. Najwyraźniej zawiesza się właśnie na inicjalizacji
    R65C51. Dopiero podłączenie do komputera za przez kabel RS232 naprawia
    sytuację - wtedy urządzenie znów zaczyna się prawidłowo uruchamiać, a w
    terminalu pojawiają się komunikaty.

    Sęk w tym, że UART ma służyć do konfiguracji i diagnostyki urządzenia.
    Nie mogę sobie pozwolić na sytuację, żeby jego uruchomienie wymagało
    podpięcia do komputera.

    Ktoś ma jakiś pomysł odnośnie tego, co robię źle?

    Kod inicjujący UART jest relatywnie prosty:

    void mos6551_init (void) {
    //initialise 6551 ACIA
    ACIA_RES = 0xFF; //soft reset (value not important)
    ACIA_CMD = 0x0B; //set specific modes and functions
    ACIA_CTL = 0x1E; //8-N-1, 9600 baud
    }

    Za pomocą CC65 kompiluje się do następującego kodu asemblerowego:

    ; ----------------------------------------------------
    -----------
    ; void __near__ mos6551_init (void)
    ; ----------------------------------------------------
    -----------

    .segment "CODE"

    .proc _mos6551_init: near

    .segment "CODE"

    lda #$FF
    sta $6001
    lda #$0B
    sta $6002
    lda #$1E
    sta $6003
    rts

    .endproc

Podziel się

Poleć ten post znajomemu poleć

Wydrukuj ten post drukuj


Następne wpisy z tego wątku

Najnowsze wątki z tej grupy


Najnowsze wątki

Szukaj w grupach

Eksperci egospodarka.pl

1 1 1

Wpisz nazwę miasta, dla którego chcesz znaleźć jednostkę ZUS.

Wzory dokumentów

Bezpłatne wzory dokumentów i formularzy.
Wyszukaj i pobierz za darmo: