📄 net_nic.c
字号:
*
*
* where
* STATUS WORD Reports frame status &/or errors
* (see SMSC LAN91C111, Sections 8.2 & 8.6).
*
* PACKET SIZE Packet frame size, in octets & MUST be a multiple of 2.
*
* LAST DATA OCTET Last data octet if the total number of data octets is odd
* (see SMSC LAN91C111, Section 8.1).
*
* CONTROL Packet control status (see SMSC LAN91C111, Sections 8.1).
*********************************************************************************************************
*/
#define LAN91C111_PKT_FRAME_SIZE_OVRHD 6 /* Nbr ovrhd octets in frame. */
#define LAN91C111_PKT_FRAME_SIZE_MASK 0x07FE
#define LAN91C111_PKT_FRAME_CTRL_MASK 0xFF00
#define LAN91C111_PKT_FRAME_LAST_OCTET_MASK 0x00FF
#define LAN91C111_PKT_FRAME_IX_STATUS 0x0000
#define LAN91C111_PKT_FRAME_IX_SIZE 0x0002
#define LAN91C111_PKT_FRAME_IX_DATA 0x0004
#define LAN91C111_PKT_FRAME_STATUS_NONE 0x0000
#define LAN91C111_PKT_FRAME_TX_NBR_NONE (0xFFFF & LAN91C111_REG_PNR_TX_PKT_NBR)
/* ----------------- FRAME CTRL BITS ------------------ */
#define LAN91C111_PKT_FRAME_CTRL_RX_ODD DEF_BIT_13
#define LAN91C111_PKT_FRAME_CTRL_TX_ODD DEF_BIT_13
#define LAN91C111_PKT_FRAME_CTRL_TX_CRC DEF_BIT_12
/*$PAGE*/
/*
*********************************************************************************************************
* LOCAL CONSTANTS
*********************************************************************************************************
*/
/*
*********************************************************************************************************
* LOCAL DATA TYPES
*********************************************************************************************************
*/
/*
*********************************************************************************************************
* LOCAL TABLES
*********************************************************************************************************
*/
/*
*********************************************************************************************************
* LOCAL GLOBAL VARIABLES
*********************************************************************************************************
*/
/*$PAGE*/
/*
*********************************************************************************************************
* LOCAL FUNCTION PROTOTYPES
*********************************************************************************************************
*/
static void NetNIC_RxISR_Handler (void); /* Rx ISR signals Net Drv Task of NIC rx pkts. */
static void NetNIC_TxISR_Handler (void); /* Tx ISR signals Net Drv Tx of empty tx FIFO. */
static void NetNIC_TxPktDiscard (NET_ERR *perr);
/* ------------- LAN91C111 FNCTS -------------- */
static void LAN91C111_Init (void);
/* ------------ LAN91C111 RX FNCTS ------------ */
static void LAN91C111_RxEn (void);
static void LAN91C111_RxIntDis (void);
static void LAN91C111_RxIntEn (void);
static CPU_INT16U LAN91C111_RxPktGetSize (void);
static void LAN91C111_RxPkt (void *ppkt,
CPU_INT16U size);
static void LAN91C111_RxPktDiscard (CPU_INT16U size);
/* ------------ LAN91C111 TX FNCTS ------------ */
static void LAN91C111_TxEn (void);
static void LAN91C111_TxIntEn (void);
static void LAN91C111_TxPkt (void *ppkt,
CPU_INT16U size,
NET_ERR *perr);
static void LAN91C111_TxPktGet (NET_ERR *perr);
/* ---------- LAN91C111 PHY REG FNCTS --------- */
static CPU_INT16U LAN91C111_PhyRdData (void);
static CPU_BOOLEAN LAN91C111_PhyRdMDI (void);
static void LAN91C111_PhyWrData (CPU_INT16U reg_data);
static void LAN91C111_PhyWrIdle (void);
static void LAN91C111_PhyWrPhyAddr (void);
static void LAN91C111_PhyWrPhyReg (CPU_INT08U reg);
static void LAN91C111_PhyWrBitLow (void);
static void LAN91C111_PhyWrBitHigh (void);
static void LAN91C111_PhyWrBitZ (void);
/*
*********************************************************************************************************
* LOCAL CONFIGURATION ERRORS
*********************************************************************************************************
*/
/*$PAGE*/
/*
*********************************************************************************************************
* NetNIC_Init()
*
* Description : (1) Initialize Network Interface Card :
*
* (a) Perform NIC Layer OS initialization
* (b) Initialize NIC status
* (c) Initialize NIC statistics & error counters
* (d) Initialize LAN91C111
*
*
* Argument(s) : perr Pointer to variable that will hold the return error code from this function :
*
* NET_NIC_ERR_NONE Network interface card successfully initialized.
*
* -------- RETURNED BY NetOS_NIC_Init() : --------
* NET_OS_ERR_INIT_NIC_TX_RDY NIC transmit ready signal NOT successfully
* initialized.
* NET_OS_ERR_INIT_NIC_TX_RDY_NAME NIC transmit ready name NOT successfully
* configured.
* Return(s) : none.
*
* Caller(s) : Net_Init().
*
* Note(s) : none.
*********************************************************************************************************
*/
void NetNIC_Init (NET_ERR *perr)
{
/* --------------- PERFORM NIC/OS INIT ---------------- */
NetOS_NIC_Init(perr); /* Create NIC objs. */
if (*perr != NET_OS_ERR_NONE) {
return;
}
/* ----------------- INIT NIC STATUS ------------------ */
NetNIC_ConnStatus = DEF_OFF;
/* ------------- INIT NIC STAT & ERR CTRS ------------- */
#if (NET_CTR_CFG_STAT_EN == DEF_ENABLED)
NetNIC_StatRxPktCtr = 0;
NetNIC_StatTxPktCtr = 0;
#endif
#if (NET_CTR_CFG_ERR_EN == DEF_ENABLED)
NetNIC_ErrRxPktDiscardedCtr = 0;
NetNIC_ErrTxPktDiscardedCtr = 0;
#endif
/* ----------------- INIT LAN91C111 ------------------- */
LAN91C111_Init();
*perr = NET_NIC_ERR_NONE;
}
/*$PAGE*/
/*
*********************************************************************************************************
* NetNIC_IntEn()
*
* Description : Enable NIC interrupts.
*
* Argument(s) : perr Pointer to variable that will hold the return error code from this function :
*
* NET_NIC_ERR_NONE NIC interrupts successfully enabled.
*
* Return(s) : none.
*
* Caller(s) : Net_Init().
*
* Note(s) : none.
*********************************************************************************************************
*/
void NetNIC_IntEn (NET_ERR *perr)
{
LAN91C111_RxIntEn();
LAN91C111_TxIntEn();
*perr = NET_NIC_ERR_NONE;
}
/*$PAGE*/
/*
*********************************************************************************************************
* NetNIC_ConnStatusChk()
*
* Description : Check the NIC's network connection status. This function checks the PHY to see if the
* connection is still established and sets 'NetNIC_ConnStatus' accordingly.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -