Handling a Wireless Device ISR
NetDev_ISR_Handler()
is the device interrupt handler. In general, the device interrupt handler must perform the following functions:
- Determine which type of interrupt event occurred by switching on the ISR type argument. The ISR handler should not access the SPI bus for reading an interrupt status register.
- If a receive event has occurred, the driver must post the interface number to the µC/TCP-IP Receive task by calling
NetOS_IF_RxTaskSignal()
for each new frame received (management or packet). - If a transmit complete event has occurred and it is specified in the ISR type argument, the driver must perform the following items for each transmitted packet.
- Post the address of the data area that has completed transmission to the transmit buffer de-allocation task by calling
NetOS_IF_TxDeallocTaskPost()
with the pointer to the data area that has completed transmission. - Call
NetOS_Dev_TxRdySignal()
with the interface number that has just completed transmission.
- Post the address of the data area that has completed transmission to the transmit buffer de-allocation task by calling
- Interrupt flags on the wireless device should not be cleared. CPU’s integrated interrupt controllers should be cleared from within the network device’s BSP-level ISR after
NetDev_WiFi_ISR_Handler()
returns.
Additionally, it is highly recommended that device driver ISR handlers be kept as short as possible to reduce the amount of interrupt latency in the system.
If the wireless module support transmit complete event, but reading an interrupt status register is required to know it, the receive task must be signaled and in NetDev_Rx()
should return a management frame which will be passed to NetDev_MgmtDemux()
and then you can perform the transmit complete operations.