/***************************************************************************** * FUNCTION: WF_EintInit (Specific to PIC24) * * RETURNS: None * * PARAMS: None * * NOTES: Called by WiFi Driver to initialize the MRF24W External Interrupt. *****************************************************************************/ void WF_EintInit(void) { /* disable the external interrupt */ WF_INT_IE = 0; #if !defined(TCPIP_STACK_USE_EVENT_NOTIFICATION) #if defined(MRF24W_IN_SPI2 ) || defined( MRF24W_IN_SPI4 ) SYS_INT_DynamicRegister(PLIB_INT_SOURCE_EXTERNAL_3, WF_NoEventISR, 0); #else SYS_INT_DynamicRegister(PLIB_INT_SOURCE_EXTERNAL_1, WF_NoEventISR, 0); #endif // #else the MRF ISR is already hooked by MRF24W_MACEventInit()! #endif // !defined(TCPIP_STACK_USE_EVENT_NOTIFICATION) /* configure IO pin as input and External Interrupt pin*/ /* set the I/O high since we do not have pull-ups */ WF_INT_IO = 1; WF_INT_TRIS = 1; WF_INT_EDGE = 1; /* falling edge triggered */ IPC13bits.INT3IP = 7; /* clear and enable the interrupt */ WF_INT_IF = 0; // WF_INT_IE = 1; // Should not enable interrupt here }
/******************************************************************************* Function: TCPIP_MAC_EVENT_RESULT PIC32MACEventInit(TCPIP_MAC_HANDLE hMac, int intPri, int intSubPri) Summary: Initializes the ethernet event notification. Description: This function initializes the ethernet event notification. It performs any resource allocation that may be needed. Precondition: None. Parameters: hMac - parameter identifying the intended MAC intPri - priority of the TCPIP interrupt events intSubPri - sub-priority of the TCPIP interrupt events Returns: TCPIP_MAC_EVRES_OK if initialization succeeded, an error code otherwise Example: <code> PIC32MACEventInit( hMac, 4, 3 ); </code> Remarks: Not multi-threaded safe. *****************************************************************************/ TCPIP_MAC_EVENT_RESULT PIC32MACEventInit(TCPIP_MAC_HANDLE hMac, int intPri, int intSubPri) { int grpIx; PIC32_EV_GROUP_DCPT* pDcpt; PIC32_EMB_MAC_DCPT* pMacD = (PIC32_EMB_MAC_DCPT*)hMac; SYS_INT_SourceDisable(pMacD->mData._macIntSrc); // stop Eth ints SYS_INT_SourceStatusClear(pMacD->mData._macIntSrc); SYS_INT_PrioritySet(pMacD->mData._macIntSrc, (INT_PRIORITY_LEVEL_1-1)+intPri); SYS_INT_SubprioritySet(pMacD->mData._macIntSrc, INT_SUB_PRIORITY_LEVEL_0+intSubPri); SYS_INT_DynamicRegister(pMacD->mData._macIntSrc, TcpIpEthIsr, pMacD); pDcpt = pMacD->mData._pic32_ev_group_dcpt; for(grpIx = 0; grpIx < sizeof(pMacD->mData._pic32_ev_group_dcpt)/sizeof(*pMacD->mData._pic32_ev_group_dcpt); grpIx++) { pDcpt->_TcpGroupEventsMask = _pic32_mac_group_ev_mask[grpIx]; pDcpt->_TcpEnabledEvents = pDcpt->_TcpPendingEvents = TCPIP_EV_NONE; pDcpt->_EthEnabledEvents = pDcpt->_EthPendingEvents = 0; pDcpt->_TcpNotifyFnc = 0; pDcpt++; } _hEventMac = hMac; return TCPIP_MAC_EVRES_OK; }
void WF_EintInit(void) { /* disable the external interrupt */ INTEnable(INT_INT1, INT_DISABLED); // disable interrupt #if !defined(TCPIP_STACK_USE_EVENT_NOTIFICATION) SYS_INT_DynamicRegister(MRFWB0M_INT_SOURCE, WF_NoEventISR, 0); // #else the MRF ISR is already hooked by MRF24W_MACEventInit()! #endif /* configure IO pin as input and External Interrupt pin*/ /* set the I/O high since we do not have pull-ups */ INT1Rbits.INT1R = 0x0d; //select INT1 pin = RPE8 ANSELEbits.ANSE8 = 0; /* configure IO pin as input and External Interrupt pin*/ WF_INT_IO = 1; // PORTEbits.RE8 = 1; /* configure IO pin as input and External Interrupt pin*/ WF_INT_TRIS = 1; //TRISEbits.TRISE8 = 1 ; // ; /* set the I/O high since we do not have pull-ups */ WF_INT_EDGE = 0; //INTCONbits.INT1EP = 0; /* falling edge triggered */ /* clear and enable the interrupt */ INTClearFlag(INT_INT1) ; // clear status INTSetVectorPriority(INT_EXTERNAL_1_VECTOR, 5); //set security level to 5 INTSetVectorSubPriority(INT_EXTERNAL_1_VECTOR,1); //set sub_security level to 1 // INTEnable(INT_INT1, INT_ENABLED); // Should not enable interrupt here //--- }
void WF_EintInit(void) { /* disable the external interrupt */ WF_INT_IE_CLEAR = WF_INT_BIT; #if !defined(TCPIP_STACK_USE_EVENT_NOTIFICATION) SYS_INT_DynamicRegister(MRFWB0M_INT_SOURCE, WF_NoEventISR, 0); // #else the MRF ISR is already hooked by MRF24W_MACEventInit()! #endif /* configure IO pin as input and External Interrupt pin*/ /* set the I/O high since we do not have pull-ups */ #if defined(MRF24W_USE_CN_INT) WF_INT_TRIS = 1; WF_INT_CNPUE_SET = WF_INT_BIT_MASK; WF_INT_CN_ENABLE = 1; WF_INT_CNEN_SET = WF_INT_BIT_MASK; #elif defined(MRF24W_USE_INT3_INT) || defined(MRF24W_USE_INT1_INT) WF_INT_IO = 1; WF_INT_TRIS = 1; WF_INT_EDGE = 0; /* falling edge triggered */ #endif /* clear and enable the interrupt */ WF_INT_IF_CLEAR = WF_INT_BIT; WF_INT_IPCCLR = WF_INT_IPC_MASK; WF_INT_IPCSET = WF_INT_IPC_VALUE; //WF_INT_IE_SET = WF_INT_BIT; // Should not enable interrupt here }
/******************************************************************************* Function: TCPIP_MAC_EVENT_RESULT MRF24W_MACEventDeInit(TCPIP_MAC_HANDLE hMac ) Summary: De-initializes the ethernet event notification. Description: This function de-initializes the ethernet event notification. It performs any resource clean-up that may be needed. Precondition: None. Parameters: hMac - parameter identifying the intended MAC Returns: TCPIP_MAC_EVRES_OK always Example: <code> MRF24W_MACEventDeInit( hMac ); </code> Remarks: Not multi-threaded safe. *****************************************************************************/ TCPIP_MAC_EVENT_RESULT MRF24W_MACEventDeInit(TCPIP_MAC_HANDLE hMac) { SYS_INT_SourceDisable(MRFWB0M_INT_SOURCE); // stop MRF ints SYS_INT_SourceStatusClear(MRFWB0M_INT_SOURCE); SYS_INT_DynamicRegister(MRFWB0M_INT_SOURCE, 0, 0); _mrfGroupDcpt._mrfNotifyFnc = 0; _mrfGroupDcpt._mrfEnabledEvents = false; _mrfGroupDcpt._mrfPendingEvents = 0; return TCPIP_MAC_EVRES_OK; }
/******************************************************************************* Function: TCPIP_MAC_EVENT_RESULT MRF24W_MACEventInit(TCPIP_MAC_HANDLE hMac, int intPri, int intSubPri) Summary: Initializes the ethernet event notification. Description: This function initializes the ethernet event notification. It performs any resource allocation that may be needed. Precondition: None. Parameters: hMac - parameter identifying the intended MAC intPri - priority of the TCPIP interrupt events intSubPri - sub-priority of the TCPIP interrupt events Returns: TCPIP_MAC_EVRES_OK if initialization succeeded, an error code otherwise Example: <code> MRF24W_MACEventInit( hMac, 4, 3 ); </code> Remarks: Not multi-threaded safe. *****************************************************************************/ TCPIP_MAC_EVENT_RESULT MRF24W_MACEventInit(TCPIP_MAC_HANDLE hMac, int intPri, int intSubPri) { SYS_INT_SourceDisable(MRFWB0M_INT_SOURCE); // stop MRF ints SYS_INT_SourceStatusClear(MRFWB0M_INT_SOURCE); SYS_INT_PrioritySet(MRFWB0M_INT_SOURCE, (INT_PRIORITY_LEVEL_1-1)+intPri); #if defined (__C32__) SYS_INT_SubprioritySet(MRFWB0M_INT_SOURCE, INT_SUB_PRIORITY_LEVEL_0+intSubPri); #endif SYS_INT_DynamicRegister(MRFWB0M_INT_SOURCE, MRF24W_ISR, 0); _mrfGroupDcpt._mrfNotifyFnc = 0; _mrfGroupDcpt._mrfEnabledEvents = false; _mrfGroupDcpt._mrfPendingEvents = 0; _mrfUsrEvent.trafficEvents = _mrfUsrEvent.mgmtEvents = 0; _mrfUsrEvent.trafficEventInfo = _mrfUsrEvent.mgmtEventInfo =0; return TCPIP_MAC_EVRES_OK; }
/**************************************************************************** * Function: DRV_EXTPHY_IntInit * * PreCondition: EthInit and EthPhyInit should have been called. * * Input: hClientObj - A valid open-instance handle, returned from the driver's open routine * src - interrupt source * intPri - intrrupt priority * intSubPri - Interuupt Sub Priority * * Output: none * * * Side Effects: None * * Overview: Initialize External Interrupt 3. One can take this as refreence for their WOL * Interrupt. * * Note: None *****************************************************************************/ static void DRV_EXTPHY_IntInit(DRV_HANDLE hClientObj,SYS_INT_SOURCE src,int intPri, int intSubPri) { // set up the External Interrupt 3 with a prioirty of 5 and 1 sub-priority SYS_INT_SourceDisable(src); // stop Eth ints SYS_INT_SourceStatusClear(src); #if defined (HARMONY_INT) SYS_INT_VectorPrioritySet(src, intPri); SYS_INT_VectorSubprioritySet(src, intSubPri); #else SYS_INT_PrioritySet(src, intPri); SYS_INT_SubprioritySet(src, intSubPri); SYS_INT_DynamicRegister(src, LAN8740WOLIsr, (void*)&hClientObj); #endif SYS_INT_SourceEnable(src); }
/******************************************************************************* Function: TCPIP_MAC_RES MRF24W_MACEventInit(TCPIP_MAC_HANDLE hMac, TCPIP_MAC_EventF eventF, const void* eventParam, int intPri, int intSubPri) Summary: Initializes the ethernet event notification. Description: This function initializes the ethernet event notification. It performs any resource allocation that may be needed. Precondition: None. Parameters: hMac - parameter identifying the intended MAC intPri - priority of the TCPIP interrupt events intSubPri - sub-priority of the TCPIP interrupt events Returns: TCPIP_MAC_RES_OK if initialization succeeded, an error code otherwise Example: <code> MRF24W_MACEventInit( hMac, 4, 3 ); </code> Remarks: Not multi-threaded safe. *****************************************************************************/ TCPIP_MAC_RES MRF24W_MACEventInit(TCPIP_MAC_HANDLE hMac, TCPIP_MAC_EventF eventF, const void* eventParam, int intPri, int intSubPri) { #if 0 //todo: jian. you should fix this SYS_INT_SourceDisable(MRFWB0M_INT_SOURCE); // stop MRF ints SYS_INT_SourceStatusClear(MRFWB0M_INT_SOURCE); SYS_INT_PrioritySet(MRFWB0M_INT_SOURCE, (INT_PRIORITY_LEVEL_1-1)+intPri); SYS_INT_SubprioritySet(MRFWB0M_INT_SOURCE, INT_SUB_PRIORITY_LEVEL_0+intSubPri); #endif SYS_INT_DynamicRegister(MRFWB0M_INT_SOURCE, MRF24W_ISR, 0); _mrfGroupDcpt._mrfNotifyFnc = eventF; // set new handler _mrfGroupDcpt._mrfNotifyParam = eventParam; _mrfGroupDcpt._mrfEnabledEvents = false; _mrfGroupDcpt._mrfPendingEvents = 0; _mrfUsrEvent.trafficEvents = _mrfUsrEvent.mgmtEvents = 0; _mrfUsrEvent.trafficEventInfo = _mrfUsrEvent.mgmtEventInfo =0; return TCPIP_MAC_RES_OK; }
/******************************************************************************* Function: TCPIP_MAC_EVENT_RESULT PIC32MACEventDeInit(TCPIP_MAC_HANDLE hMac ) Summary: De-initializes the ethernet event notification. Description: This function de-initializes the ethernet event notification. It performs any resource clean-up that may be needed. Precondition: None. Parameters: hMac - parameter identifying the intended MAC Returns: TCPIP_MAC_EVRES_OK always Example: <code> PIC32MACEventDeInit( hMac ); </code> Remarks: Not multi-threaded safe. *****************************************************************************/ TCPIP_MAC_EVENT_RESULT PIC32MACEventDeInit(TCPIP_MAC_HANDLE hMac) { int grpIx; PIC32_EV_GROUP_DCPT* pDcpt; PIC32_EMB_MAC_DCPT* pMacD = (PIC32_EMB_MAC_DCPT*)hMac; SYS_INT_SourceDisable(pMacD->mData._macIntSrc); // stop Eth ints SYS_INT_SourceStatusClear(pMacD->mData._macIntSrc); SYS_INT_DynamicRegister(pMacD->mData._macIntSrc, 0, 0); pDcpt = pMacD->mData._pic32_ev_group_dcpt; for(grpIx = 0; grpIx < sizeof(pMacD->mData._pic32_ev_group_dcpt)/sizeof(*pMacD->mData._pic32_ev_group_dcpt); grpIx++) { pDcpt->_TcpNotifyFnc = 0; pDcpt->_TcpEnabledEvents = pDcpt->_TcpPendingEvents = TCPIP_EV_NONE; pDcpt->_EthEnabledEvents = pDcpt->_EthPendingEvents = 0; pDcpt++; } _hEventMac = 0; return TCPIP_MAC_EVRES_OK; }