; ############################################################################## ; ############################################################################## ; ############################################################################## ENC_INITIALISIERUNG: call ENC_WAIT_CLKRDY ; wait CLKRDY call ENC_SOFT_RESET ; Reset call ENC_CLKOUT_PIN ; CLKOUT-PIN (bei Bedarf) call ENC_LED_BLINKEN_ON call WAIT_1s call WAIT_1s call WAIT_1s call ENC_LED_BLINKEN_OFF ;call ENC_INITIALISIERUNG_NACH_DATENBLATT call ENC_INITIALISIERUNG_NACH_BEN ;------------------------------------------------------------------------------- call ENC_MAC_ADRESSE_CHECK ret ; ############################################################################## ; ############################################################################## ; ############################################################################## ; Quelle: Ben's Hobby-Corner ; http://members.home.nl/bzijlstra/software/examples/enc28j60.htm ; ; Bemerkung: ; Die Originalversion stammt von Ben's Hobby-Corner Tutorial und wurde ; entsprechend ergänzt und abgeändert. ; ; ENC_INITIALISIERUNG_NACH_BEN: ;(A)---------------------------------------------------------------------------- ; 'initialize receive buffer ; '16-bit transfers, must write low byte first ; 'set receive buffer start address ; Nextpacketptr = Rxstart_init ; Value = Low(rxstart_init) ; Call Enc28j60writecontrolregbyte(erxstl , Value) ; Value = High(rxstart_init) ; Call Enc28j60writecontrolregbyte(erxsth , Value) ; ldi temp1,(ERXSTL) ldi temp2,Low(rxstart_init) rcall ENC_SPI_WRITE_CONTROL_REGISTER_TEMP1_TEMP2 ; INP: temp1(cod+addr) temp2(data) rcall ENC_SPI_WRITE_CONTROL_REGISTER_CHECK_TEMP1_TEMP2 ; INP: temp1(cod+addr) temp2(data) ldi temp1,(ERXSTH) ldi temp2,HIGH(rxstart_init) rcall ENC_SPI_WRITE_CONTROL_REGISTER_TEMP1_TEMP2 ; INP: temp1(cod+addr) temp2(data) rcall ENC_SPI_WRITE_CONTROL_REGISTER_CHECK_TEMP1_TEMP2 ; INP: temp1(cod+addr) temp2(data) ;(B)---------------------------------------------------------------------------- ; 'set receive pointer address ; Value = Low(rxstart_init) ; Call Enc28j60writecontrolregbyte(erxrdptl , Value) ; Value = High(rxstart_init) ; Call Enc28j60writecontrolregbyte(erxrdpth , Value) ; ldi temp1,(ERXRDPTL) ldi temp2,Low(rxstart_init) rcall ENC_SPI_WRITE_CONTROL_REGISTER_TEMP1_TEMP2 ; INP: temp1(cod+addr) temp2(data) rcall ENC_SPI_WRITE_CONTROL_REGISTER_CHECK_TEMP1_TEMP2 ; INP: temp1(cod+addr) temp2(data) ldi temp1,(ERXRDPTH) ldi temp2,HIGH(rxstart_init) rcall ENC_SPI_WRITE_CONTROL_REGISTER_TEMP1_TEMP2 ; INP: temp1(cod+addr) temp2(data) rcall ENC_SPI_WRITE_CONTROL_REGISTER_CHECK_TEMP1_TEMP2 ; INP: temp1(cod+addr) temp2(data) ;(C)---------------------------------------------------------------------------- ; 'set receive buffer end ; Value = Low(rxstop_init) ; Call Enc28j60writecontrolregbyte(erxndl , Value) ; Value = High(rxstop_init) ; Call Enc28j60writecontrolregbyte(erxndh , Value) ; ldi temp1,(ERXNDL) ldi temp2,Low(rxstop_init) rcall ENC_SPI_WRITE_CONTROL_REGISTER_TEMP1_TEMP2 ; INP: temp1(cod+addr) temp2(data) rcall ENC_SPI_WRITE_CONTROL_REGISTER_CHECK_TEMP1_TEMP2 ; INP: temp1(cod+addr) temp2(data) ldi temp1,(ERXNDH) ldi temp2,HIGH(rxstop_init) rcall ENC_SPI_WRITE_CONTROL_REGISTER_TEMP1_TEMP2 ; INP: temp1(cod+addr) temp2(data) rcall ENC_SPI_WRITE_CONTROL_REGISTER_CHECK_TEMP1_TEMP2 ; INP: temp1(cod+addr) temp2(data) ;(D)---------------------------------------------------------------------------- ; 'set transmit buffer start ; Value = Low(txstart_init) ; Call Enc28j60writecontrolregbyte(etxstl , Value) ; Value = High(txstart_init) ; Call Enc28j60writecontrolregbyte(etxsth , Value) ; ldi temp1,(ETXSTL) ldi temp2,Low(txstart_init) rcall ENC_SPI_WRITE_CONTROL_REGISTER_TEMP1_TEMP2 ; INP: temp1(cod+addr) temp2(data) rcall ENC_SPI_WRITE_CONTROL_REGISTER_CHECK_TEMP1_TEMP2 ; INP: temp1(cod+addr) temp2(data) ldi temp1,(ETXSTH) ldi temp2,HIGH(txstart_init) rcall ENC_SPI_WRITE_CONTROL_REGISTER_TEMP1_TEMP2 ; INP: temp1(cod+addr) temp2(data) rcall ENC_SPI_WRITE_CONTROL_REGISTER_CHECK_TEMP1_TEMP2 ; INP: temp1(cod+addr) temp2(data) ;(E)---------------------------------------------------------------------------- ; 'enable MAC receive ; Value.macon1_marxen = 1 ; Value.macon1_txpaus = 1 ; Value.macon1_rxpaus = 1 ; Call Enc28j60writecontrolregbyte(macon1 , Value) ; ldi temp1,(MACON1) ldi temp2,(1<