⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 lan91c111.h

📁 PHYcore 的DEMO板附带的CS8900网卡驱动
💻 H
字号:
/*----------------------------------------------------------------------------
 *      LAN91C111 Register Definitions
 *----------------------------------------------------------------------------
 *      Name:    LAN91C111.h
 *      Purpose: SMSC LAN91C111 hardware definitions
 *----------------------------------------------------------------------------
 *      Copyright (c) 2005 Keil Software. All rights reserved.
 *---------------------------------------------------------------------------*/

#ifndef __LAN91C111_H
#define __LAN91C111_H

#define ADROFS     0x82000300   /* LAN91C111 base address used IO mode      */

/* Absolute access to LAN91C111 registers macro */
#define LREG(object, reg)   (*((object volatile *) (ADROFS+reg)))

/* Bank Select defines */
#define BSR        0x0E         /* Bank Select register common to all banks  */
#define BSR_MASK   0x03         /* Mask constant part of bank register       */
#define BSR_UPPER  0x3300       /* Constant value for upper byte of BSR      */

/* Bank 0 Registers */
#define TCR        0x00         /* Transmit Control Register           rd/wr */
#define EPHSR      0x02         /* EPH Status Register                 rd    */
#define RCR        0x04         /* Receive Control Register            rd/wr */
#define ECR        0x06         /* Counter Register                    rd    */
#define MIR        0x08         /* Memory Information Register         rd    */
#define RPCR       0x0A         /* Receive/Phy Control Register        rd/wr */
#define RES        0x0C         /* Reserved                                  */

/* Bank 1 Registers */
#define CR         0x00         /* Configuration Register              rd/wr */
#define BAR        0x02         /* Base Address Register               rd/wr */
#define IAR        0x04         /* Individual Address Registers        rd/wr */
#define IAR0       0x04         /* Individual Address Bytes 0-1        rd/wr */
#define IAR2       0x06         /* Individual Address Bytes 2-3        rd/wr */
#define IAR4       0x08         /* Individual Address Bytes 4-5        rd/wr */
#define GPR        0x0A         /* General Purpose Register            rd/wr */
#define CTR        0x0C         /* Control Register                    rd/wr */

/* Bank 2 Registers */
#define MMUCR      0x00         /* MMU Command Register                rd/wr */
#define PNR        0x02         /* Packet Number Register (8 bit)      rd/wr */
#define ARR        0x03         /* Allocation Result Register (8 bit)  rd    */
#define FIFO       0x04         /* FIFO Ports Register                 rd    */
#define TX_FIFO    0x04         /* Tx FIFO Packet Number (8 bit)       rd    */
#define RX_FIFO    0x05         /* Rx FIFO Packet Number (8 bit)       rd    */
#define PTR        0x06         /* Pointer Register                    rd/wr */
#define DATA       0x08         /* Data Register (8/16/32 bit)         rd/wr */
#define DATA0      0x08         /* Data Register Word 0                rd/wr */
#define DATA1      0x0A         /* Data Register Word 1                rd/wr */
#define IST        0x0C         /* Interrupt Status Register (8 bit)   rd    */
#define ACK        0x0C         /* Interrupt Ack Register (8 bit)         wr */
#define MSK        0x0D         /* Interrupt Mask Register (8 bit)     rd/wr */

/* Bank 3 Registers */
#define MT         0x00         /* Multicast Hash Table                rd/wr */
#define MT0        0x00         /* Multicast Hash Table 0-1            rd/wr */
#define MT2        0x02         /* Multicast Hash Table 2-3            rd/wr */
#define MT4        0x04         /* Multicast Hash Table 4-5            rd/wr */
#define MT6        0x06         /* Multicast Hash Table 6-7            rd/wr */
#define MGMT       0x08         /* Management Interface PHY            rd/wr */
#define REV        0x0A         /* Revision Register (Chip Id/Revision)rd/wr */
#define ERCV       0x0C         /* Early Receive Register              rd/wr */


/*-----TCR control bits-----*/
#define TCR_SWFDUP      0x8000  /* Switched Full Duplex Mode                 */
#define TCR_EPH_LOOP    0x2000  /* Internal Loopback at the EPH block        */
#define TCR_STP_SQET    0x1000  /* Stop transmit on SQET error               */
#define TCR_FDUPLX      0x0800  /* Full duplex mode (receive own frames)     */
#define TCR_MON_CSN     0x0400  /* Monitor carrier while transmitting        */
#define TCR_NOCRC       0x0100  /* Don't append CRC to tx frames             */
#define TCR_PAD_EN      0x0080  /* Pad short frames with 0 if len < 64 bytes */
#define TCR_FORCOL      0x0004  /* Force collision                           */
#define TCR_LOOP        0x0002  /* PHY Local loopback                        */
#define TCR_TXENA       0x0001  /* Enable transmitter                        */

/*-----EPHSR status bits-----*/
#define EPHSR_TXUNRN    0x8000  /* Transmit Under Run                        */
#define EPHSR_LINK_OK   0x4000  /* General purpose input driven by nLNK pin  */
#define EPHSR_CTR_ROL   0x1000  /* Counter Roll Over                         */
#define EPHSR_EXC_DEF   0x0800  /* Excessive Deferral                        */
#define EPHSR_LOST_CARR 0x0400  /* Lost Carrier Sense                        */
#define EPHSR_LATCOL    0x0200  /* Late Collision Detected                   */
#define EPHSR_TX_DEFR   0x0080  /* Transmit Deferred                         */
#define EPHSR_LTX_BRD   0x0040  /* Last Tx Frame was a broadcast             */
#define EPHSR_SQET      0x0020  /* Signal Quality Error Test                 */
#define EPHSR_16COL     0x0010  /* 16 collisions reached                     */
#define EPHSR_LTX_MULT  0x0008  /* Last transmit frame was a multicast       */
#define EPHSR_MULCOL    0x0004  /* Multiple collision detected for last tx   */
#define EPHSR_SNGLCOL   0x0002  /* Single collision detected for last tx     */
#define EPHSR_TX-SUC    0x0001  /* Last transmit was successful              */

/*-----RCR control bits-----*/
#define RCR_SOFT_RST    0x8000  /* Software-Activated Reset                  */
#define RCR_FILT_CAR    0x4000  /* Filter Carrier                            */
#define RCR_ABORT_ENB   0x2000  /* Enable Abort of Rx when collision         */
#define RCR_STRIP_CRC   0x0200  /* Strip CRC of received frames              */
#define RCR_RXEN        0x0100  /* Enable Receiver                           */
#define RCR_ALMUL       0x0004  /* Accept all multicast (no filtering)       */
#define RCR_PRMS        0x0002  /* Promiscuous mode                          */
#define RCR_RX_ABORT    0x0001  /* Receive frame aborted (too long)          */

/*-----RPCR control bits-----*/
#define RPCR_SPEED      0x2000  /* Speed select input (10/100 MBps)          */
#define RPCR_DPLX       0x1000  /* Duplex Select (Full/Half Duplex)          */
#define RPCR_ANEG       0x0800  /* Auto-Negotiation mode select              */
#define RPCR_LEDA_MASK  0x00E0  /* LEDA signal mode select                   */
#define RPCR_LEDB_MASK  0x001C  /* LEDB signal mode select                   */

/*-----LEDA ON modes-----*/
#define LEDA_10M_100M   0x0000  /* 10 MB or 100 MB link detected             */
#define LEDA_10M        0x0040  /* 10 MB link detected                       */
#define LEDA_FDUPLX     0x0060  /* Full Duplex Mode enabled                  */
#define LEDA_TX_RX      0x0080  /* Transmit or Receive packet occurred       */
#define LEDA_100M       0x00A0  /* 100 MB link detected                      */
#define LEDA_RX         0x00C0  /* Receive packet occurred                   */
#define LEDA_TX         0x00E0  /* Transmit packet occurred                  */

/*-----LEDA ON modes-----*/
#define LEDB_10M_100M   0x0000  /* 10 MB or 100 MB link detected             */
#define LEDB_10M        0x0008  /* 10 MB link detected                       */
#define LEDB_FDUPLX     0x000C  /* Full Duplex Mode enabled                  */
#define LEDB_TX_RX      0x0010  /* Transmit or Receive packet occurred       */
#define LEDB_100M       0x0014  /* 100 MB link detected                      */
#define LEDB_RX         0x0018  /* Receive packet occurred                   */
#define LEDB_TX         0x001C  /* Transmit packet occurred                  */

/*-----CR control bits-----*/
#define CR_EPH_POW_EN   0x8000  /* EPH Power Enable  (0= power down PHY)     */
#define CR_NO_WAIT      0x1000  /* No wait states                            */
#define CR_GPCNTRL      0x0400  /* General purpose Output drives nCNTRL pin  */
#define CR_EXT_PHY      0x0200  /* External PHY enabled (0= internal PHY)    */
#define CR_DEFAULT      0x20B1  /* Default bits set to 1 for write           */

/*-----CTR control bits-----*/
#define CTR_RCV_BAD     0x4000  /* Bad CRC packet received                   */
#define CTR_AUTO_REL    0x0800  /* Auto-release Tx memory                    */
#define CTR_LE_ENABLE   0x0080  /* Link error enable (mux into EPH int)      */
#define CTR_CR_ENABLE   0x0040  /* Counter rollover enable (mux into EPH int)*/
#define CTR_TE_ENABLE   0x0020  /* Transmit error enable (mux into EPH int)  */
#define CTR_EEPROM_SEL  0x0004  /* EEPROM select                             */
#define CTR_RELOAD      0x0002  /* Reload from EEPROM                        */
#define CTR_STORE       0x0001  /* Store to EEPROM                           */
#define CTR_DEFAULT     0x1210  /* Default bits set to 1 for write           */

/*-----MMUCR control bits-----*/
#define MMUCR_CMD_MASK  0x00E0  /* MMU Command mask                          */
#define MMUCR_BUSY      0x0001  /* MMU processing a release command          */

/*-----MMUCR Commands------*/
#define MMU_NOOP        0x0000  /* No operation                              */
#define MMU_ALLOC_TX    0x0020  /* Allocate memory for Tx                    */
#define MMU_RESET       0x0040  /* Reset MMU to initial state                */
#define MMU_REMV_RX     0x0060  /* Remove frame from top of Rx FIFO          */
#define MMU_REMV_REL_RX 0x0080  /* Remove and Release top of Rx FIFO         */
#define MMU_REL_PKT     0x00A0  /* Release specific packet                   */
#define MMU_ENQ_TX      0x00C0  /* Enqueue packet number into Tx FIFO        */
#define MMU_RESET_TX    0x00E0  /* Reset Tx FIFO                             */

/*-----FIFO status bits-----*/
#define FIFO_REMPTY     0x8000  /* No receive packets queued in Rx FIFO      */
#define FIFO_TEMPTY     0x0080  /* No transmit packets in completion queue   */

/*-----PTR control bits-----*/
#define PTR_RCV         0x8000  /* Address refers to Rx area (0= Tx area)    */
#define PTR_AUTO_INCR   0x4000  /* Auto increment on access                  */
#define PTR_READ        0x2000  /* Read access (0= write access)             */
#define PTR_ETEN        0x1000  /* Enable early transmit underrun detection  */
#define PTR_NOT_EMPTY   0x0800  /* Data FIFO not empty yet (read only bit)   */
#define PTR_MASK        0x03FF  /* Mask pointer value                        */

/*-----IST status bits-----*/
#define IST_MDINT       0x80    /* PHY MI Register 18 change status interrupt*/
#define IST_ERCV_INT    0x40    /* Early Receive interrupt                   */
#define IST_EPH_INT     0x20    /* EPH Type interrupt                        */
#define IST_RX_OVRN     0x10    /* Receive Overrun interrupt                 */
#define IST_ALLOC_INT   0x08    /* Tx ram Allocation interrupt               */
#define IST_TX_EMPTY    0x04    /* Tx FIFO empty interrupt                   */
#define IST_TX_INT      0x02    /* Tx Complete interrupt                     */
#define IST_RCV         0x01    /* Rx Complete intererupt                    */

/*-----ACK control bits-----*/
#define ACK_MDINT       0x80    /* PHY MI Register 18 change int. ack        */
#define ACK_ERCV_INT    0x40    /* Early Receive int. ack                    */
#define ACK_RX_OVRN     0x10    /* Receive Overrun int. ack                  */
#define ACK_TX_EMPTY    0x04    /* Tx FIFO empty int. ack                    */
#define ACK_TX_INT      0x02    /* Tx Complete int. ack                      */

/*-----MSK control bits-----*/
#define MSK_MDINT       0x80    /* PHY MI Register 18 change int. mask       */
#define MSK_ERCV_INT    0x40    /* Early Receive int. mask                   */
#define MSK_EPH_INT     0x20    /* EPH Type int. mask                        */
#define MSK_RX_OVRN     0x10    /* Receive Overrun int. mask                 */
#define MSK_ALLOC_INT   0x08    /* Tx ram Allocation int. mask               */
#define MSK_TX_EMPTY    0x04    /* Tx FIFO empty int. mask                   */
#define MSK_TX_INT      0x02    /* Tx Complete int. mask                     */
#define MSK_RCV         0x01    /* Rx Complete int. mask                     */

/*-----MGMT control bits-----*/
#define MGMT_MSK_CRS100 0x0040  /* Disables CRS100 detection in Tx Half Dupl.*/
#define MGMT_MDOE       0x0008  /* MII - 1= MDO pin output, 0= MDO tristated */
#define MGMT_MCLK       0x0004  /* MII - Value drives MDCLK pin              */
#define MGMT_MDI        0x0002  /* MII - Value of MDI pin when read          */
#define MGMT_MDO        0x0001  /* MII - Value drives MDO pin                */
#define MGMT_DEFAULT    0x3330  /* Default bits set to 1 for write           */

/*----- Receive Frame Status -----*/
#define RFS_ALGNERR     0x8000  /* Frame alignment error                     */
#define RFS_BROADCAST   0x4000  /* Received broadcast frame                  */
#define RFS_BADCRC      0x2000  /* Bad CRC error                             */
#define RFS_ODDFRM      0x1000  /* Frame with Odd number of bytes received   */
#define RFS_TOOLNG      0x0800  /* Too long frame received (max. 1518 bytes) */
#define RFS_TOOSHORT    0x0400  /* Too short frame received (min. 64 bytes)  */
#define RFS_MULTCAST    0x0001  /* Multicast frame received                  */
#define RFS_HASH_MASK   0x007E  /* Hash value index for multicast registers  */

/*----- Receive Frame Control -----*/
#define RFC_ODD         0x2000  /* Odd number of bytes in frame              */
#define RFC_CRC         0x1000  /* Append CRC (valid when TCR_NOCRC = 1)     */


// prototypes
void           Init91111(void);
unsigned short ReadFrameBE91111(void);
void           CopyToFrame91111(void *Source, unsigned int Size);
void           CopyFromFrame91111(void *Dest, unsigned short Size);
void           DummyReadFrame91111(unsigned short Size);
unsigned short StartReadFrame(void);
void           EndReadFrame(void);
unsigned int   CheckFrameReceived(void);
void           RequestSend(unsigned short FrameSize);
unsigned int   Rdy4Tx(void);

/*----------------------------------------------------------------------------
 * end of file
 *---------------------------------------------------------------------------*/
#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -