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

📄 net_nic.c

📁 实现AT91RM9200的以太网底层驱动
💻 C
📖 第 1 页 / 共 3 页
字号:
static  void        AT91RM9200_EMAC_Init          (void);


                                                                        /* -------- AT91RM9200 EMAC RX FNCTS ----------------- */
static  void        AT91RM9200_EMAC_RxEn          (void);
static  void        AT91RM9200_EMAC_RxIntEn       (void);
static  CPU_INT16U  AT91RM9200_EMAC_RxPktGetSize  (void);
static  void        AT91RM9200_EMAC_RxPkt         (void        *ppkt,
                                                   CPU_INT16U   size,
                                                   NET_ERR     *perr);
static  void        AT91RM9200_EMAC_RxPktDiscard  (CPU_INT16U   size);


                                                                        /* -------- AT91RM9200 EMAC TX FNCTS ----------------- */
static  void        AT91RM9200_EMAC_TxEn          (void);
static  void        AT91RM9200_EMAC_TxIntEn       (void);
static  void        AT91RM9200_EMAC_TxPkt         (void        *ppkt,
                                                   CPU_INT16U   size,
                                                   NET_ERR     *perr);
static  void        AT91RM9200_EMAC_TxPktPrepare  (void        *ppkt,
                                                   CPU_INT16U   size,
                                                   NET_ERR     *perr);


                                                                        /* -------- PHYTER REG ACCESS FNCTS ------------------ */
static  CPU_INT16U  AT91RM9200_EMAC_PhyRegRd      (CPU_INT08U   phy,
                                                   CPU_INT08U   reg);
static  void        AT91RM9200_EMAC_PhyRegWr      (CPU_INT08U   phy,
                                                   CPU_INT08U   reg,
                                                   CPU_INT16U   val);


                                                                        /* -------- HELPER FUNCTIONS ------------------------- */
static  CPU_INT16U  AT91RM9200_EMAC_RxBufNbrInc     (CPU_INT16U   val);


/*
*********************************************************************************************************
*                                             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 AT91RM9200
*
* Argument(s) : none.
*
* Return(s)   : none.
*
* Caller(s)   : Net_Init().
*********************************************************************************************************
*/

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 AT91RM9200 ----------------- */
    AT91RM9200_EMAC_Init();

   *perr = NET_NIC_ERR_NONE;
}


/*
*********************************************************************************************************
*                                            NetNIC_IntEn()
*
* Description : Enable NIC interrupts.
*
* Argument(s) : none.
*
* Return(s)   : none.
*
* Caller(s)   : Net_Init().
*********************************************************************************************************
*/

void  NetNIC_IntEn (NET_ERR  *perr)
{
    AT91RM9200_EMAC_RxIntEn();
    AT91RM9200_EMAC_TxIntEn();

    *perr = NET_NIC_ERR_NONE;
}


/*
*********************************************************************************************************
*                                        NetNIC_ConnStatusGet()
*
* Description : Get NIC's network connection status.
*
*               (1) Obtaining the NIC's network connection status is encapsulated in this function for the
*                   possibility that obtaining a NIC's connection status requires a non-trivial procedure.
*
*
* Argument(s) : none.
*
* Return(s)   : NIC network connection status :
*
*                   DEF_OFF     Network connection DOWN.
*                   DEF_ON      Network connection UP.
*
* Caller(s)   : NetIF_Pkt_Tx().
*********************************************************************************************************
*/

CPU_BOOLEAN  NetNIC_ConnStatusGet (void)
{
    return (NetNIC_ConnStatus);
}


/*
*********************************************************************************************************
*                                         NetNIC_ISR_Handler()
*
* Description : (1) Decode ISR & call appropriate ISR handler :
*
*                   (a) AT91RM9200 Receive Buffer Not Available ISR     NetNIC_RxPktDiscard().
*                   (b) AT91RM9200 Receive  ISR                         NetNIC_RxISR_Handler().
*                   (c) AT91RM9200 Transmit ISR                         NetNIC_TxISR_Handler().
*
* Argument(s) : none.
*
* Return(s)   : none.
*
* Caller(s)   : NetNIC_ISR() [see Note #2].
*
* Note(s)     : (2) AT91RM9200 ISR  MUST call NetNIC_ISR_Handler() & MUST be developer-implemented in
*
*                       \<Your Product Application>\net_isr*.*
*
*                           where
*                                   <Your Product Application>    directory path for Your Product's Application.
*
*               (3) This function clears the interrupt source(s) on an external interrupt controller &, if
*                   ENABLED, MUST be developer-implemented in
*
*                       \<Your Product Application>\net_isr.c
*
*                           where
*                                   <Your Product Application>    directory path for Your Product's Application.
*********************************************************************************************************
*/

void  NetNIC_ISR_Handler (void)
{
    CPU_INT16U  int_reg;


    int_reg = AT91RM9200_EMAC_RegRd(AT91RM9200_REG_EMAC_ISR_OFFSET);    /* -------------- DETERMINE NIC INT SRC -------------- */
                                                                        /* Interrupts are acknowledged when ISR read.          */
                                                                        /* See 'ATMEL AT91RM9200; Revision 1768B-ATARM

⌨️ 快捷键说明

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