'---------------------------------------------------------------------------------- ' Embedded UDP&WebServer - Atmega32 and RTL8019AS - Embedded UDP&WebServer '---------------------------------------------------------------------------------- ' ' Version 1 - April 1 2005 - Ben Zijlstra - Netherlands - https://benshobbycorner.nl/bzijlstra $crystal = 7372800 $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 Databus = Regdata Databus_ddr = &HFF nop Reset Iow_pin nop Set Iow_pin nop Databus_ddr = &H00 Databus = &HFF End Sub ' Routine to read from NIC Control register ' Sub Read_rtl8019as(regaddr) Databus_ddr = &H00 Databus = &HFF Addrbus = Regaddr Reset Ior_pin nop Byte_read = Pina nop Set Ior_pin 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 Set Ior_pin Set Resetport.4 Waitms 2 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