📄 rtl8019.h
字号:
#ifndef __RTL8019_H__#define __RTL8019_H__/****************************************************************************** Module Name: Realtek 8019AS Driver* * Created By: Louis Beaudoin (www.embedded-creations.com)** Original Release: September 21, 2002 ** Module Description: * Provides functions to initialize the Realtek 8019AS, and send and retreive* packets** September 30, 2002 - Louis Beaudoin* Receive functions modified to handle errors encountered when receiving a* fast data stream. Functions now manually retreive data instead of* using the send packet command. Interface improved by checking for* overruns and data in the buffer internally.* Corrected the overrun function - overrun flag was not reset after overrun* Added support for the Imagecraft Compiler* Added support to communicate with the NIC using general I/O ports******************************************************************************//*#include "delay.h"*/#include "compiler.h"/****************************************************************************** RTL8019beginPacketSend(unsigned int packetLength)* Args: unsigned int - length of the Ethernet frame (see note)* Created By: Louis Beaudoin* Date: September 21, 2002* Description: Sets up the NIC to send a packet* Notes: The NIC will not send packets less than 60 bytes long (the min* Ethernet frame length. The transmit length is automatically* increased to 60 bytes if packetLength is < 60*****************************************************************************/void RTL8019beginPacketSend(unsigned int packetLength);/****************************************************************************** RTL8019sendPacketData(unsigned char * localBuffer, unsigned int length)* Args: 1. unsigned char * localBuffer - Pointer to the beginning of* the buffer to load into the NIC* 2. unsigned char length - number of bytes to copy to* the NIC* Created By: Louis Beaudoin* Date: September 21, 2002* Description: Loads length # of bytes from a local buffer to the transmit* packet buffer* Notes: RTL8019beginPacketSend() must be called before sending* any data.* Several calls to RTL8019retreivePacketData() may be made to * copy packet data from different buffers*****************************************************************************/void RTL8019sendPacketData(unsigned char * localBuffer, unsigned int length);/****************************************************************************** RTL8019endPacketSend()* Created By: Louis Beaudoin* Date: September 21, 2002* Description: Ends a packet send operation and instructs the NIC to transmit* the frame over the network*****************************************************************************/void RTL8019endPacketSend(void);/****************************************************************************** initRTL8019(void);** Created By: Louis Beaudoin* Date: September 21, 2002* Description: Sets up the RTL8019 NIC hardware interface, and initializes* the buffers and configuration of the NIC*****************************************************************************/void initRTL8019(void);/****************************************************************************** processRTL8019Interrupt(void);** Created By: Louis Beaudoin* Date: September 21, 2002* Description: Reads the NIC's ISR register looking for a receive buffer* overrun - which is then handled.* Notes: The function does not need to be called in response to an* interrupt. The function can be polled and the NIC's INT* line not used. This function should be called before* attempting to retreive a packet from the NIC*****************************************************************************/void processRTL8019Interrupt(void);/****************************************************************************** unsigned char RTL8019ReceiveEmpty(void);** Returns: non-zero (true) if buffer is empty, zero if data in buffer* Created By: Louis Beaudoin* Date: September 21, 2002* Description: Compares the BNRY and CURR receive buffer pointers to see if* there is a packet in the receive buffer* ** Removed as of version 0.60.1 *******************************************************************************///unsigned char RTL8019ReceiveEmpty(void);/****************************************************************************** unsigned int RTL8019beginPacketRetreive()* Returns: unsigned int - length of the Ethernet frame (see note)* Created By: Louis Beaudoin* Date: September 21, 2002* Description: Sets up the NIC to retreive a packet* Notes: The size returned is the size of all the data in the Ethernet* frame minus the Ethernet checksum. This may include unused* trailer bytes appended if data is less than the minimum* Ethernet frame length (60 bytes). A size of zero indicates* there are no packets available.* A call to RTL8019beginPacketRetreive() must be followed by a* call to RTL8019endPacketRetreive() regardless if data is* retreived, unless 0 is returned.*****************************************************************************/unsigned int RTL8019beginPacketRetreive(void);/****************************************************************************** RTL8019retreivePacketData(unsigned char * localBuffer, unsigned int length)* Args: 1. unsigned char * localBuffer - Pointer to the beginning of* the buffer to store the ethernet frame.* 2. unsigned char length - number of bytes to copy to* localBuffer* Created By: Louis Beaudoin* Date: September 21, 2002* Description: Loads length # of bytes from the receive packet buffer to* a local buffer* Notes: RTL8019beginPacketRetreive() must be called before retreiving* any data.* Several calls to RTL8019retreivePacketData() may be made to * copy packet data to different buffers*****************************************************************************/void RTL8019retreivePacketData(unsigned char * localBuffer, unsigned int length);/****************************************************************************** RTL8019endPacketRetreive()* Created By: Louis Beaudoin* Date: September 21, 2002* Description: Ends a packet retreive operation begun by calling* RTL8019beginPacketRetreive(). The NIC buffer space used by* the retreived packet is freed* Notes: A packet may be removed from the buffer without being read* by calling RTL8019endPacketRetreive() after* RTL8019beginPacketRetreive().*****************************************************************************/void RTL8019endPacketRetreive(void);/******************************************************************************* AVR hardware setup** External SRAM Interface:* The five NIC address lines are taken from A8-A12 (uses the* non-multiplexed address port so no latch is required)** General I/O Interface:* Two full ports are required for the address and data buses. Two pins* from another port are used to control the read and write lines** One output pin is required for hard resetting the NIC******************************************************************************/// set to 1 to use the External SRAM Interface - 0 for General I/O#define MEMORY_MAPPED_NIC 1#if MEMORY_MAPPED_NIC /*** NIC Interface through External SRAM Interface ****/// NIC is mapped from address 0x8000 - 0x9F00#define MEMORY_MAPPED_RTL8019_OFFSET 0x8300#else /************ NIC Interface through General I/O *******************/// RTL8019 address port#define RTL8019_ADDRESS_PORT PORTC#define RTL8019_ADDRESS_DDR DDRC// RTL8019 data port#define RTL8019_DATA_PORT PORTA#define RTL8019_DATA_DDR DDRA#define RTL8019_DATA_PIN PINA// RTL8019 control port#define RTL8019_CONTROL_PORT PORTD#define RTL8019_CONTROL_DDR DDRD#define RTL8019_CONTROL_READPIN PD7#define RTL8019_CONTROL_WRITEPIN PD6// macros to control the read and write pins#define RTL8019_CLEAR_READ cbi(RTL8019_CONTROL_PORT,\ RTL8019_CONTROL_READPIN)#define RTL8019_SET_READ sbi(RTL8019_CONTROL_PORT,\ RTL8019_CONTROL_READPIN) #define RTL8019_CLEAR_WRITE cbi(RTL8019_CONTROL_PORT,\ RTL8019_CONTROL_WRITEPIN)#define RTL8019_SET_WRITE sbi(RTL8019_CONTROL_PORT,\ RTL8019_CONTROL_WRITEPIN)#endif /** NIC Interface **/// RTL RESET - Port B pin 0#define RTL8019_RESET_PORT PORTE#define RTL8019_RESET_DDR DDRE#define RTL8019_RESET_PIN PORTE0/******************************************************************************* Ethernet constants******************************************************************************/#define ETHERNET_MIN_PACKET_LENGTH 0x3C#define ETHERNET_HEADER_LENGTH 0x0E/******************************************************************************* MAC address assigned to the RTL8019******************************************************************************//*#define MYMAC_0 '0'#define MYMAC_1 'F'#define MYMAC_2 'F'#define MYMAC_3 'I'#define MYMAC_4 'C'#define MYMAC_5 'E'*/#define MYMAC_0 0x00#define MYMAC_1 0x06#define MYMAC_2 0x98#define MYMAC_3 0x01#define MYMAC_4 0x02#define MYMAC_5 0x26#endif /* __RTL8019_H__ */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -