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.
a 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.
b Call NetOS_Dev_TxRdySignal() with the interface number that has just completed transmission.
- 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. |