📄 net_nic.c
字号:
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 + -