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

📄 net_nic.c

📁 在uCosii操作系统中进行以太网控制芯片lan91c111的控制传输程序
💻 C
📖 第 1 页 / 共 5 页
字号:
*
*
*                   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 + -