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

Atmega 32 i RTL8019 brak komunikacji zwrotnej.

mrslawcio 06 Kwi 2009 15:07 7131 35
  • #1 6380739
    mrslawcio
    Poziom 12  
    Witam

    Mam problem z uruchomieniem kitu AVT 1443 na Atmga 32 (płytka własnej produkcji).
    Kod źródłowy pobrałem ze strony:
    http://members.home.nl/bzijlstra/software/examples/RTL8019as.htm

    Problem jest trochę nie typowy, a mianowicie po wgraniu softu interfejs sieciowy zostaje podniesiony do góry ale nadawane są tylko pakiety w kierunku do RTL-a a komputer nie odbiera żadnych pakietów. Po za tym ciągle świecą diody D2 i D3. Zgodnie z opisem po wysłaniu pinga pod adres 192.168.0.100 powinienem dostać odpowiedź na porcie COM. Po za standardowym Hello Word nie dostaje żadnych informacji. Na komputerze ustawiłem adres 192.168.0.22 maska 255.255.255.0

    Proszę o pomoc.

    Pozdrawiam
    Sławek
  • #3 6380829
    mrslawcio
    Poziom 12  
    Mam problem z kompilacja kodu ze strony;
    http://members.home.nl/bzijlstra/software/examples/step1_till_step_7.txt
    Wyskakują mi błędy. Mogę skompilować dopiero drugi krok
    http://members.home.nl/bzijlstra/software/examples/tutoria2.txt

    Może problem jest w tym, że mam trochę inny kwarc 8MHz. Ale to chyba wystarczy tyko zmienić przy kompilacji kodu. Jak ktoś ma jakiś pomysł to proszę o tel: 504000781 (mogę oddzwonić)
  • #4 6384551
    mrslawcio
    Poziom 12  
    Mała zmiana. Dopisałem print w instrukcjach dotyczących odczytu, zapisu i przerwania i okazało się, że nic nie odczytuję.
    Do komunikacji z RTL-m wykorzystuję następujące połączenia
    ' PA0 - SD0 - Databus
    ' PA1 - SD1
    ' PA2 - SD2
    ' PA3 - SD3
    ' PA4 - SD4
    ' PA5 - SD5
    ' PA6 - SD6
    ' PA7 - SD7
    ' PB0 - SA0 - Addressbus
    ' PB1 - SA1
    ' PB2 - SA2
    ' PB3 - SA3
    ' PB4 - SA4
    ' PD0 - RXD - max232
    ' PD1 - TXD - max232
    ' PD2 - INT0
    ' PD4 - RSTDRV
    ' PD6 - IORB
    ' PD7 - IOWB

    Może tutaj brakuje jakiegoś połączenia.
    Proszę o info.

    Stan linii po włączeniu:
    ' PD2 - INT0 -0
    ' PD4 - RSTDRV -0
    ' PD6 - IORB -1
    ' PD7 - IOWB -1

    Pozdrawiam
    Sławek
  • #5 6387920
    kedzi1
    Poziom 18  
    A co z linią AEN? Powinno być na niej zero.
    Jak komunikujesz się z RTLem? Czy program szuka go w przestrzeni adresowej, czy sam ustawia linie adresowe i sterowania przepływem danych RW i WR?
  • #6 6388011
    pixel7
    Poziom 23  
    Program z linku powyżej sam ustawia adres sterując liniami przepływu. Jednak jak pisałem w innym wątku incjalizuje się kiedy chce mimo najróżniejszych zmian w zasilaniu, czasach, itp. Z tego co pamiętam AVT1443 ma linie AEN podciągniętą w module (chyba).
  • #7 6388120
    kedzi1
    Poziom 18  
    Oglądam właśnie schemat modułu i AEN jest wyprowadzony, trzeba go do masy samemu podłączyć.
  • #9 6391868
    kedzi1
    Poziom 18  
    Trochę długie masz te przewody, jak nie będzie działało to możesz spróbować z opóźnieniami w komunikacji RTLem, jak nie pomoże to kabel do skrócenia pierwszy.
  • #10 6392537
    mrslawcio
    Poziom 12  
    Nic z tego. Skróciłem przewody do ok. 5cm i podciągnąłem AEN do masy. Nic się nie zmieniło. Chyba będę musiał sobie to odpuścić.
    Dzięki za pomoc:)
  • #11 6392616
    kedzi1
    Poziom 18  
    Spokojnie, w końcu napewno się uda :)
    Ja też zaczynałem od ATMEGA32 i tego modułu. Na początek polecam lekturę tego:

    Link

    Wystarczy dobrze czytać i po trochu pisać program. Tam jest prawie gotowiec, tylko HTTP już sam musisz dorobić, ale to dobre podstawy.

    Ja jak zaczynałem byłem zupełnie zielony, a jakoś poszło :)

    Pozdawiam i życzę powodzenia.
  • #12 6412292
    mrslawcio
    Poziom 12  
    Sub Write_rtl8019as(regaddr , Regdata)

    Incr A
    Databus_ddr = &HFF 'ustawiam port danych jako wyjście
    Addrbus_ddr = &HFF 'ustawiam port adresowy jako wyjście
    Addrbus = Regaddr 'wystawiam adres pod który chcę zapisać dane
    Databus = Regdata 'wystawiam dane do zapisu
    Print A ; " Zapisywany bajt: " ; Hex(databus) ; " pod adres: " ; Hex(addrbus)

    nop
    Reset Iow_pin 'włączam zapis
    nop 'czekam chwile
    Set Iow_pin 'wyłączam zapis
    nop
    Databus_ddr = &H00 'ustawiam szynę danych jako wejście
    Databus = &HFF 'ustawiam 11111111 na port danych

    End Sub


    ' Routine to read from NIC Control register
    '
    Sub Read_rtl8019as(regaddr)
    Databus_ddr = &H00 'ustawiam port danych jako wejście
    Addrbus_ddr = &HFF 'ustawiam port adresowy jako wyjście
    Addrbus = Regaddr 'wysyłam adres spod którego chcę odczytać
    Reset Ior_pin 'włączam odczyt
    nop 'takt przerwy
    Byte_read = Pina 'odczytuję daną z portu danych
    nop 'takt przerwy
    Set Ior_pin 'wyłączam odczyt
    Incr A
    Print A ; " Odczytano: " ; Hex(byte_read) ; " spod adresu: " ; Hex(addrbus)
    nop
    End Sub

    Powyżej zamieściłem procedurę odczuty i zapisu, czy mógłby ktoś sprawdzić czy jest prawidłowa. Oczywiście jest to lekko zmodyfikowana procedura ze strony: http://members.home.nl/bzijlstra/software/examples/RTL8019as.htm
  • #13 6412777
    kedzi1
    Poziom 18  
    Po pierwsze: jak czytasz dane to port powinien mieć włączone pullup'y, czyli: Databus = 0xFF przed odczytem.

    Po drugie: daj więcej NOP'ów, RTL nie jest za szybki, u mnie przy jednym NOP'ie (jak u ciebie) nie wyrabiał.

    Po trzecie: resetuj układ RTL po włączeniu zasilania, tak z 100ms.

    Poza tym: co masz podłączone jeszcze do portu na którym ustawiasz adres? tylko adres RTL'a? (bo wystawiasz adres na wszystkich 8 bitach) czy masz dobrze ustawiony kierunek linii sterujących? (na wyjścia)
  • #14 6413410
    mrslawcio
    Poziom 12  
    Wgrałem coś takiego:

    $crystal = 8000000
    $regfile = "M32def.dat"
    $baud = 57600

    Declare Sub Write_rtl8019as(byval Regaddr As Byte , Byval Regdata As Byte)
    Declare Sub Read_rtl8019as(byval Regaddr As Byte)
    Declare Sub Init_rtl8019as
    Declare Sub Showregs

    Dim Regaddr As Byte
    Dim Regdata As Byte
    Dim Byte_read As Byte
    Dim Hulp1 As Byte
    Dim Mymac(6) As Byte
    Dim X As Byte

    Const Debug = 1
    Const Rstport = &H18
    Const Isr = &H07
    Const Msg_initfail = "Init failed"
    Const Cr = &H00
    Const Dcrval = &H58
    Const Dcr = &H0E
    Const Rbcr0 = &H0A
    Const Rbcr1 = &H0B
    Const Rcr = &H0C
    Const Tpsr = &H04
    Const Txtstart = &H40
    Const Tcr = &H0D
    Const Pstart = &H01
    Const Rxstart = &H46
    Const Bnry = &H03
    Const Pstop = &H02
    Const Rxstop = &H60
    Const Curr = &H07 'page 1
    Const Imr = &H0F
    Const Imrval = &H11
    Const Tcrval = &H00

    Config Int0 = Rising

    Mymac(1) = &H00
    Mymac(2) = &H10
    Mymac(3) = &H20
    Mymac(4) = &H30
    Mymac(5) = &H40
    Mymac(6) = &H50

    #if Debug = 1
    Print "Hello world"
    #endif

    Databus Alias Porta
    _databus Alias Pina
    Rtldata Alias Porta
    Databus_ddr Alias Ddra

    Addrbus Alias Portb
    Addrbus_ddr Alias Ddrb

    Resetport Alias Portd
    Eeprom Alias Portd
    Ior_pin Alias Portd.6
    Iow_pin Alias Portd.7
    Resetport_ddr Alias Ddrd

    Inputport1 Alias Pinc
    Inputport2 Alias Portc

    Latch Alias Portd.3
    Resetport_ddr = &HF8 ' leave RXD and TXD

    Call Init_rtl8019as
    Call Showregs
    Stop

    Enable Interrupts
    Enable Int0
    On Int0 Rtl8019as_interrupt
    'start the NIC
    Call Write_rtl8019as(cr , &H22)
    Do
    Loop
    End


    ' Routine to handle an interrupt on the RTL8019AS
    '
    Rtl8019as_interrupt:
    'Disable Int0
    Print "Interrupt from RTL8019as"
    'reset the interrupts bits
    Call Write_rtl8019as(isr , &HFF)
    Call Write_rtl8019as(cr , &H22)
    'Enable Int0
    Return


    ' Routine to Write to NIC Control register
    '
    Sub Write_rtl8019as(regaddr , Regdata)


    Addrbus = Regaddr
    Addrbus_ddr = &HFF 'ustawiam port adresowy jako wyjście
    Databus = Regdata 'wysyłam dane na portA
    Databus_ddr = &HFF 'ustawiam portA jako wyjście
    NOP
    NOP
    nop
    NOP
    NOP
    NOP
    NOP
    NOP
    NOP
    NOP
    Reset Iow_pin
    NOP
    NOP
    nop
    NOP
    NOP
    NOP
    NOP
    NOP
    NOP
    NOP
    Set Iow_pin
    NOP
    NOP
    nop
    NOP
    NOP
    NOP
    NOP
    NOP
    NOP
    NOP
    Databus_ddr = &H00
    Databus = &HFF
    End Sub


    ' Routine to read from NIC Control register
    '
    Sub Read_rtl8019as(regaddr)

    Databus = &HFF 'podciągam port danych do VCC
    Addrbus = Regaddr 'wysyłam adres
    Databus_ddr = &H00 'port danych jako wejście

    Reset Ior_pin
    NOP
    NOP
    nop
    NOP
    NOP
    NOP
    NOP
    NOP
    NOP
    NOP
    Byte_read = Pina
    NOP
    NOP
    nop
    NOP
    NOP
    NOP
    NOP
    NOP
    NOP
    NOP
    Set Ior_pin
    NOP
    NOP
    nop
    NOP
    NOP
    NOP
    NOP
    NOP
    NOP
    NOP
    End Sub


    ' Routine to initialise the RTL8019AS ethernetchip
    '
    Sub Init_rtl8019as
    Databus_ddr = &H00
    Databus = &HFF
    Addrbus_ddr = &HFF
    Addrbus = &H00
    Resetport_ddr = &HF8
    Reset Eeprom.5
    Set Iow_pin
    nop
    nop
    Set Ior_pin
    nop
    nop
    Set Resetport.4
    Waitms 100
    Reset Resetport.4
    Call Read_rtl8019as(rstport)
    Call Write_rtl8019as(rstport , Byte_read)
    Waitms 10
    'check for good soft reset
    Call Read_rtl8019as(isr)
    If Byte_read.7 = 0 Then
    Print Msg_initfail
    End If
    Call Write_rtl8019as(cr , &H21)
    Waitms 2
    Call Write_rtl8019as(dcr , Dcrval)
    Call Write_rtl8019as(rbcr0 , &H00)
    Call Write_rtl8019as(rbcr1 , &H00)
    Call Write_rtl8019as(rcr , &H04)
    Call Write_rtl8019as(tpsr , Txtstart)
    Call Write_rtl8019as(tcr , &H02)
    Call Write_rtl8019as(pstart , Rxstart)
    Call Write_rtl8019as(bnry , Rxstart)
    Call Write_rtl8019as(pstop , Rxstop)
    Call Write_rtl8019as(cr , &H61)
    Waitms 2
    Call Write_rtl8019as(curr , Rxstart)
    For Hulp1 = 1 To 6
    Call Write_rtl8019as(hulp1 , Mymac(hulp1))
    Next Hulp1
    Call Write_rtl8019as(cr , &H21)
    Call Write_rtl8019as(dcr , Dcrval)
    Call Write_rtl8019as(cr , &H22)
    Call Write_rtl8019as(isr , &HFF)
    Call Write_rtl8019as(imr , Imrval)
    Call Write_rtl8019as(tcr , Tcrval)
    End Sub


    ' Routine show the contents of the RTL8019as registers
    '
    Sub Showregs
    Local Cntr1 As Byte
    Local Cntr2 As Byte
    Call Write_rtl8019as(cr , &H21)
    Print
    Print "Realtek 8019AS Register dump"
    Print
    Print "REG Page0 Page1 Page2 Page3"
    Print
    For Cntr1 = 0 To 15
    Cntr2 = Cntr1
    Print Hex(cntr2);
    Print " ";
    Call Write_rtl8019as(cr , &H21)
    Cntr2 = Cntr1
    Call Read_rtl8019as(cntr2)
    Print Hex(byte_read);
    Print " ";
    Call Write_rtl8019as(cr , &H61)
    Cntr2 = Cntr1
    Call Read_rtl8019as(cntr2)
    Print Hex(byte_read);
    Print " ";
    Call Write_rtl8019as(cr , &HA1)
    Cntr2 = Cntr1
    Call Read_rtl8019as(cntr2)
    Print Hex(byte_read);
    Print " ";
    Call Write_rtl8019as(cr , &HE1)
    Cntr2 = Cntr1
    Call Read_rtl8019as(cntr2)
    Print Hex(byte_read)
    Next Cntr1
    End Sub

    Zauważyłem że procek zaczyna odczytywać zawartość rejestrów:
    00 FF FF FF FF
    01 FF FF FF FF
    02 FF FF FF FF
    03 FF FF FF FF
    04 FF FF FF 03
    05 FF FF FF FF
    06 01 FF DF FF
    07 FF FF FF FF
    08 FF FF FF FF
    09 FF FF FF FF
    0A FF FF FF FF
    0B FF FF FF FF
    0C FF FF FF FF
    0D FF FF FF FF
    0E FF FF FF FF
    0F FF FF FF FF

    00 FF FF FF FF
    01 FF FF FF FF
    02 FF FF FF FF
    03 FF 47 FF FF
    04 FF FF FF FF
    05 FF FF FF FF
    06 FF FF FF FF
    07 FF FF FF FF
    08 FF FF FF FF
    09 FF FF FF FF
    0A 51 FF FF FF
    0B FF FF FF 71
    0C FF FF FF FF
    0D FF FF FF FF
    0E 01 FF FF FF
    0F FF FF FF FF



    Po za tym odczytywane wartości ciągle się zmieniają. Widocznie przewody łączące procek z RTL są za długie i stąd wszystkie problemy. Trochę mnie to dziwi. Jeżeli błędy pojawiają się podczas komunikacji z RTL to wystarczy tylko obniżyć szybkość transmisji, zamiast opóźnień NOP zastosowałem waitms 10. Po takiej zmianie otrzymywałem na wyjściu tylko FF. Może ktoś ma inny pomysł?
  • #15 6413822
    kedzi1
    Poziom 18  
    To co odczytuje to raczej sieczka jakaś jest. NOP'ów starczy po 3. Tylko masz jeden błąd, jak ustawiasz adres to nie czekasz, tylko od razu dajesz niski na IOR. Na końcu NOP'y są już nie potrzebne.

    Jeszcze co mnie drażni u ciebie, to najpierw wystawiasz coś na port, a dopiero zmieniasz jego kierunek.

    
    Sub Read_rtl8019as(regaddr) 
    
    Databus_ddr = &H00 'port danych jako wejście 
    Databus = &HFF 'podciągam port danych do VCC 
    Addrbus = Regaddr 'wysyłam adres 
    NOP 
    NOP 
    NOP 
    Reset Ior_pin 
    NOP 
    NOP 
    NOP 
    Byte_read = Pina 
    NOP 
    Set Ior_pin  
    End Sub
    
  • #16 6416226
    mrslawcio
    Poziom 12  
    zrobiłem tak:

    Sub Write_rtl8019as(regaddr , Regdata)

    Addrbus_ddr = &HFF 'ustawiam portb adresowy jako wyjście
    Databus_ddr = &HFF 'ustawiam portA danych jako wyjście
    Addrbus = Regaddr 'ustawiam adres do zapisu
    Databus = Regdata 'wysyłam dane na portA
    Reset Iow_pin 'wlaczam zapis
    nop
    nop
    nop
    Set Iow_pin 'wylaczam zapis

    End Sub


    ' Routine to read from NIC Control register
    '
    Sub Read_rtl8019as(regaddr)

    Databus_ddr = &H00 'port danych jako wejście
    Databus = &HFF 'podciągam port danych do VCC
    Addrbus = Regaddr 'wysyłam adres
    Reset Ior_pin 'wlaczam odczyt
    nop
    nop
    nop
    Byte_read = Pina 'czytam bajt
    nop
    Set Ior_pin 'wylaczam odczyt

    End Sub

    Poniżej przesyłam wartości odczytanych rejestrów po restarcie procesora
    Hello world

    Realtek 8019AS Register dump

    REG Page0 Page1 Page2 Page3

    00 FF FF FF FF
    01 FF FF FF FF
    02 FF FF FF FF
    03 FF FF FF FF
    04 FF FF FF FF
    05 FF FF FF FF
    06 FF FF FF FF
    07 FF FF 81 FF
    08 FF FF FF FF
    09 FF FF FF FF
    0A FF FF FF FF
    0B FF FF FF FF
    0C 37 FF FF FF
    0D FF FF FF FF
    0E FF FF FF FF
    0F FF FF FF FF
    Hello world

    Realtek 8019AS Register dump

    REG Page0 Page1 Page2 Page3

    00 FF FF FF FF
    01 FF FF FF FF
    02 FF FF FF FF
    03 FF FF FF FF
    04 FF FF FF 03
    05 FF FF FF FF
    06 FF FF FF FF
    07 FF FF FF 81
    08 FF FF FF FF
    09 FF FF FF FF
    0A FF FF FF FF
    0B FF FF FF FF
    0C FF FF FF FF
    0D FF FF FF FF
    0E FF FF FF FF
    0F FF FF FF FF
    Hello world

    Realtek 8019AS Register dump

    REG Page0 Page1 Page2 Page3

    00 FF FF FF FF
    01 FF 01 FF FF
    02 FF FF FF FF
    03 FF FF FF FF
    04 FF 03 FF 03
    05 FF FF 01 FF
    06 FF FF FF FF
    07 FF FF 81 FF
    08 FF FF FF FF
    09 FF FF FF FF
    0A FF FF FF 51
    0B FF FF FF FF
    0C FF FF FF FF
    0D FF FF FF FF
    0E FF FF FF FF
    0F FF FF FF FF
  • #17 6420908
    mrslawcio
    Poziom 12  
    Powoli zaczynam sie zastanawiać nad zakupem jakiegoś AMR z wbudowanym interfejsem eth, szkoda tyko że na ARM nie ma Bascoma. Może ktoś próbował uruchomić serwer na procesorze z wbudowanym interfejsem eth, jeżeli tak to proszę o jakieś info, ważne abym nie musiał pisać programu w asemblerze.
  • #18 6421039
    kedzi1
    Poziom 18  
    Może najpierw zacznij od czegoś prostszego niż ARM :)

    Na 5cm przewodach na pewno to nie zadziała. Ja mam w C tak:

    
    void RTLwrite(unsigned char address, unsigned char data)
    {
    #ifdef RTL_PORT_INTERFACE
    RTL_ADDRESS_PORT = address;
    RTL_DATA_DDR = 0xFF;
    RTL_DATA_PORT = data;
    RTL_CLEAR_WRITE;
    asm volatile("nop\n\t"::);
    asm volatile("nop\n\t"::);
    RTL_SET_WRITE;
    RTL_DATA_DDR = 0x00;
    RTL_DATA_PORT = 0xFF;
    #else
    	*((volatile unsigned char *) (RTL_ADDR+address)) = data;
    #endif
    }
    
    unsigned char RTLread(unsigned char address)
    {
    unsigned char byte;
    #ifdef RTL_PORT_INTERFACE
    RTL_ADDRESS_PORT = address;
    RTL_CLEAR_READ;
    asm volatile("nop\n\t"::);
    asm volatile("nop\n\t"::);
    byte = RTL_DATA_PIN;
    RTL_SET_READ;
    #else
    	byte=*((volatile unsigned char *) (RTL_ADDR+address));
    #endif
    return byte;
    }
    


    i działa b.dobrze. Jak będziesz się tak szybko poddawał przy takich problemach to o ARM'ach na razie zapomnij. Jak masz ambicje to czas na C. Jak zrobisz to porządnie, to na pewno ci pomoge. Nawet na uniwesralnej kynarem to połącz. Jak nie to PROPOX ma świetne moduły ATMEGA128 + RTL + RAM (na pewno szybko zabraknie ci pamięci).
  • #19 6421650
    mrslawcio
    Poziom 12  
    OK.
    Przysiądę sie i wykonam nową płytkę tylko muszę gdzieś poszukać jakiegoś gniazda pod ten kit AVT1443. Może masz jakieś zalecenia odnośnie wykonania płytki. Daj znać.
  • #20 6439663
    mrslawcio
    Poziom 12  
    Wykonałem nową płytkę - schemat i płytka w załączniku (należy wykonać jedna zworę).
    Oczywiście to nie pomogło. Jak możesz to skompiluj mi swój program na kwarc 4MHz i UART 19200 i podeślij gotowy plik do wgrania na mój e-mail: slawcio100(_at_)wp.pl

    Pozdrawiam
    Sławek
  • #21 6439786
    Nol
    Poziom 15  
    Myślę, że powinieneś dać ten schemat+PCB w jakimś bardziej powszechnym rozszerzeniu niż .DBB.
  • #23 6443540
    mrslawcio
    Poziom 12  
    Po wykonaniu nowej płytki troche się poprawiło tzn. odczytane dane z rejestrów czasem się powtarzają. Poniżej dane:
    REG Page0 Page1 Page2 Page3

    00 E1 21 21 21
    01 01 00 00 FF
    02 FF FF FF FF
    03 47 47 47 47
    04 FF FF FF FF
    05 00 01 FF 00
    06 00 43 00 00
    07 FF FF FF FF
    08 FF FF FF FF
    09 FF FF FF FF
    0A 51 51 50 50
    0B 70 70 70 71
    0C FF FF FF FF
    0D FF FF FF FF
    0E FF FF FF FF
    0F FF FF FF FF
    Hello world

    Realtek 8019AS Register dump

    REG Page0 Page1 Page2 Page3

    00 FF 21 FF FF
    01 01 00 00 00
    02 FF FF FF FF
    03 47 47 46 FF
    04 FF FF FF FF
    05 FF FB 00 00
    06 00 00 FF 00
    07 FF FF FF FF
    08 FF FF FF FF
    09 FF FF FF FF
    0A 50 50 51 50
    0B 70 70 70 70
    0C FF 37 37 37
    0D FF FF FF FF
    0E FF FF FF FF
    0F FF FF FF FF
    Hello world

    Realtek 8019AS Register dump

    REG Page0 Page1 Page2 Page3

    00 21 FF FF FF
    01 FF FF FF FF
    02 FF FF FF FF
    03 FF 47 FF FF
    04 03 FF FF 03
    05 01 FF FF FF
    06 01 FF FF FF
    07 81 FF FF FF
    08 FF FF FF FF
    09 FF FF 01 FB
    0A FF FF 51 FF
    0B FF 70 73 FF
    0C FF FF 37 FF
    0D FF FF FF FF
    0E FF FF FF FF
    0F FF FF FF FF
  • Pomocny post
    #24 6446853
    kedzi1
    Poziom 18  
    Nie odpisywałem długo, bo byłem bardzo zajęty (uzupełniam do magistra i właśnie piszę prace). No teraz jakby coś próbował odczytać, problem może już tylko leżeć w opóźnieniach. Dla 4 MHz możesz dać po jednym NOP, albo je wyrzucić, popróbuj. Dlaczego taki kwarc, a nie szybszy?
    Co do mojego programu to nie dopisałem obsługi RS'a, jakoś nie potrzebowałem, no i ciężko będzie wyczuć te opóźnienia na 4MHz.

    Właśnie oglądam twoją płytkę i schemat. Dlaczego nie podłączyłeś reszty adresu do masy i plusa? To jest też pokazane w instrukcji od kity AVT. Podłącz, bo to karygodny błąd !!! :) I urwana ścieżka IOW.
  • #25 6448002
    mrslawcio
    Poziom 12  
    Urwana ścieżka IOW to zwora którą należy wykonać. Co do tych podciągnięć do masy i 5V to faktycznie ich nie wykonałem, sugerowałem się poniższym schematem
    http://home.cogeco.ca/~hduff/EIO_Main.htm
    Myślałem że te podciągnięcia są wykonane na płytce. Jutro postaram się to poprawić i dam znać. Co się tyczy kwarcu, to mam jeszcze 12MHz.
    Dzięki za pomoc - mam nadzieję że to pomoże.
  • #26 6449890
    rpal
    Poziom 27  
    Mnie o tyle zainteresował ten temat ponieważ ktoś podrzucił tu link do artykułu o mikroserwerach. Generalnie nigdy się protokołem TCP nie bawiłem ale ciekawi mnie następujące zagadnienie. Załóżmy że rozwiązanie sprzętowe działa jakiś uP+Realtek sobie sprawnie zapisują i odczytują ramki itd. Chcąc zrealizować genenerowanie strony w przeglądarce rozumiem że takowy układ musiałby dysponować sporą pamięcią ROM aby mógł wysyłać do okna przeglądarki poszczególne dane z HTML-u , oczywiście w zależności o tego w jaki sposób przetwarza nadchodzace do niego ramki ? Czy mylę się w tych rozważaniach ?
  • #27 6450579
    kedzi1
    Poziom 18  
    W swoim projekcie zastosowałem kartę MMC/SD, ale pierwsze próby były ze stonką zapisaną w pamięci programu. Co do pamięci RAM to nie stosując RTOS'u potrzebuje pamięci na tylko jedną ramkę. Daje to w sumie jakieś 3kB zapotrzebowania, mimo iż oprogramowanie pozwala na otwarcie wielu plików i wielu połączeń TCP.
  • #28 6451398
    mrslawcio
    Poziom 12  
    Pomogło. Odczytałem wartości rejestrów.
    00 23 63 A3 E3
    01 00 00 46 30
    02 49 10 60 00
    03 46 20 FF 04
    04 03 30 40 80
    05 00 40 FF 00
    06 0D 50 FF 00
    07 80 46 FF FF
    08 F2 00 FF 00
    09 5F 00 FF FE
    0A 50 00 FF FF
    0B 70 20 FF FE
    0C 21 00 C4 FF
    0D 00 00 E0 FE
    0E 00 00 D8 FF
    0F 00 00 91 FF

    Ale to jeszcze nie wszystko, nie wiem dlaczego ale wychodzi na to, że mam ciągle generowane przerwanie, nawet jak odłącze kabel sieciowy. Muszę jeszcze czegoś poszukać. Tak czy owak następił jakiś postęp.

    Dodano po 3 [godziny] 2 [minuty]:

    Działa:))))))
  • #29 6453656
    mrslawcio
    Poziom 12  
    Wszystko działa ale teraz pytanie - jak wyświetlić jakąś zmienną na stronie.
  • #30 6454416
    kedzi1
    Poziom 18  
    Podam ci ogólną idee. Ja odczytuje strony z SD strumieniem po jednym bajcie. Jak chciałem dodać obsługę zmiennych dodałem funkcję, która przy każdym wywołaniu pobierała bajt z pliku i przekazywała bajt funkcji obsługującej HTTP. Funkcja do zmiennych posiada bufor o takiej pojemnosci aby zmieściły się w nim wszystkie polecenia jakich będziemy używać. Ja mam Np. <%xy> gdzie x numer zmiennej, a y formatowanie. Teraz przy pierwszym wywołaniu funkcji musi ona wypełnić cały bufor. Przy kolejnych wywołaniach, funkcja przesuwa cały bufor w lewo, pobiera bajt, zwraca bajt który wypadł z bufora i sprawdza czy kolejne znaki w buforze nie są poleceniem. Czyli wykrywamy np. ciąg "<%" następnie odczytujemy z kolejnych pól jaką znienną należy wstawić zamiast ciągu, wstawiamy, i lecimy dalej... Należy pamiętać żeby było miejsce na zmienną czyli polecenie musi być tak długie jak to co wstawiamy lub musimy dodać po poleceniu odpowiednią ilość spacji.
REKLAMA