/*#######################################################################################
AVR Small Webserver 

Copyright (C) 2004 Ulrich Radig

#######################################################################################*/

#ifndef _RTL_8019_H
 #define _RTL_8019_H

//Anschluß des Webservers nach meiner Bauanleitung, oder die von
//Holger Buss (www.mikrocontroller.com) Mega32-Board

//#define ISP_CTRL 

//Prototype
extern void WriteRTL (unsigned char,unsigned char);
extern unsigned char ReadRTL (unsigned char);
extern void Init_Realtek_Network_Card (void);
extern void Write_Ethernet_Frame (char *,unsigned int);
extern void Read_Ethernet_Frame (char *,unsigned int *);

#define nop()  __asm__ __volatile__ ("nop" ::)

/*#######################################################################################
// Standard Belegung für meine Webserver
#######################################################################################*/
//#ifndef ISP_CTRL 

//Ethernet Card Ports

	//Daten (PortB)
#define DATA_CTRL_RLT		DDRB
#define DATA_PORT_RLT_WRITE 	PORTB
#define DATA_PORT_RLT_READ 	PINB

	//Adresse (PortC 0-4)
#define ADDR_CTRL_RLT	DDRC	//Für ATMega128/32/8, wird bei ATMega102 nicht benötigt
#define ADDR_PORT_RLT	PORTC

	//Steuerleitungen (IOR', IOW', Reset)
#define CTRL_CTRL_RLT	DDRD
#define CTRL_PORT_RLT	PORTD
#define RTL_WR_OFF()	CTRL_PORT_RLT&=~(1<<WRITE_PIN);
#define RTL_WR_ON()	CTRL_PORT_RLT|=(1<<WRITE_PIN);
#define RTL_RD_OFF()	CTRL_PORT_RLT&=~(1<<READ_PIN);
#define RTL_RD_ON()	CTRL_PORT_RLT|=(1<<READ_PIN);
#define RTL_RESET_OFF()	CTRL_PORT_RLT&=~(1<<RESET_PIN);
#define RTL_RESET_ON()	CTRL_PORT_RLT|=(1<<RESET_PIN);
#define IRQ_PIN		2	//Pin an dem IRQ Signal angeschlossen ist
#define READ_PIN	5	//Pin an dem ReadIO Signal angeschlossen
#define WRITE_PIN	6	//Pin an dem WriteIO Signal angeschlossen
#define RESET_PIN	7	//Pin an dem Reset angeschlossen ist

//#else

/*#######################################################################################
// Belegung für Holger Buss Mega32 WebBoard
#######################################################################################*/

/* 
#define RTL_WR_OFF() 	CTRL_LINES&=~(1<<WRITE_PIN);
#define RTL_WR_ON() 	CTRL_LINES|=(1<<WRITE_PIN);
#define RTL_RD_OFF() 	CTRL_LINES&=~(1<<READ_PIN);
#define RTL_RD_ON()  	CTRL_LINES|=(1<<READ_PIN);
#define RTL_RESET_OFF() CTRL_LINES&=~(1<<RESET_PIN);

//Ethernet Card Ports für ISP-CTRL
#define DATA_CTRL_RLT  			DDRC
#define DATA_ADDR_RLT			DDRA	//Für ATMega128/32 wird bei ATMega102 nicht benö.
#define ADDR_PORT_RLT  			PORTA
#define DATA_PORT_RLT_WRITE  	PORTC
#define DATA_PORT_RLT_READ 		PINC	//Read
#define CTRL_LINES              PORTB
#define CTRL_LINES_DIR          DDRB
#define WRITE_PIN				1		//Pin an dem WriteIO Signal angeschlossen
#define READ_PIN				2		//Pin an dem ReadIO Signal angeschlossen
#define RESET_PIN				0		//Pin an dem Reset angeschlossen ist
#define ADDR_OUTPUT             0x1f
#endif //define ISP-CTRL

*/

#define INPUT					0x00	//setzt einen Port auf Input
#define OUTPUT					0xff	//setzt einen Port auf Output

#define Networkcard_Start() WriteRTL (CR ,(1<<STA|1<<RD2));

//Realtek Netzwerkkarten Register
#define RTL_REG_OFFSET				96
#define CR						RTL_REG_OFFSET+0x00
#define PSTART					RTL_REG_OFFSET+0x01
#define PAR0					RTL_REG_OFFSET+0x01                                          
#define PSTOP					RTL_REG_OFFSET+0x02
#define BNRY					RTL_REG_OFFSET+0x03
#define TPSR					RTL_REG_OFFSET+0x04
#define TBCR0					RTL_REG_OFFSET+0x05
#define TBCR1					RTL_REG_OFFSET+0x06
#define ISR						RTL_REG_OFFSET+0x07
#define CURR					RTL_REG_OFFSET+0x07                                       
#define RSAR0					RTL_REG_OFFSET+0x08
#define CRDA0					RTL_REG_OFFSET+0x08
#define RSAR1					RTL_REG_OFFSET+0x09	
#define CRDAl					RTL_REG_OFFSET+0x09
#define RBCR0					RTL_REG_OFFSET+0x0A
#define RBCR1					RTL_REG_OFFSET+0x0B
#define RSR						RTL_REG_OFFSET+0x0C
#define RCR						RTL_REG_OFFSET+0x0C
#define TCR						RTL_REG_OFFSET+0x0D
#define CNTR0					RTL_REG_OFFSET+0x0D
#define DCR						RTL_REG_OFFSET+0x0E
#define CNTR1					RTL_REG_OFFSET+0x0E
#define IMR						RTL_REG_OFFSET+0x0F
#define CNTR2					RTL_REG_OFFSET+0x0F
#define RDMAPORT				RTL_REG_OFFSET+0x10
#define RSTPORT					RTL_REG_OFFSET+0x18

//RTL8019AS initial register Werte
#define RCRVAL					0x04
#define TCRVAL					0x00
#define DCRVAL					0x58

//PXR and OVW interrupt enabled
#define IMRVAL					0x11
#define TXSTART					0x40
#define RXSTART					0x46
#define RXSTOP					0x60

//RTL8019AS ISR Register Bits
#define PRX						0	//BIT 0 0x01
#define	PTX						1	//BIT 1 0x02
#define	RXE						2	//BIT 2 0x04
#define	TXE						3	//BIT 3 0x08
#define	OVW						4	//BIT 4 0x10
#define	CNT						5	//BIT 5 0x20
#define	RDC						6	//BIT 6 0x40
#define	RST						7	//BIT 7 0x80

//RTL8019AS CR Register Bits
#define STP						0	//BIT 0 0x01
#define	STA						1	//BIT 1 0x02
#define	TXP						2	//BIT 2 0x04
#define	RD0						3	//BIT 3 0x08
#define	RD1						4	//BIT 4 0x10
#define	RD2						5	//BIT 5 0x20
#define	PS0						6	//BIT 6 0x40
#define	PS1						7	//BIT 7 0x80

#endif // _RTL_8019_H


