• Alexander Aring's avatar
    at86rf230: support edge triggered irq · 57c1bc7e
    Alexander Aring authored
    This patch adds support for edge triggered irq types. We remove the
    locking for irq resources by enable/disable irq and allocate directly
    some heap buffer at isr. We have still a enable/disable irq path but
    this is for level-triggered irq's which need to be disabled until
    spi_async clear the irq line.
    
    There is usually a little race condition between "irq line cleared" and
    "enable_irq". When in this time a edge triggered irq arrived, we will
    not recognize this interrupt. This case can't happend at at86rf230. The
    reason is that we unmask TRX_END irq's only which indicates a transmit
    or receive completion, which depends on the current state.
    
    On Transmit:
    
    TRX_END arrived and transceiver is in TX_ARET_ON state again, in this
    state no other TRX_END can happen until we leave the state.
    
    On Receive:
    
    This is protected with the RX_SAFE_MODE bit which leaves the transceiver
    in RX_AACK_BUSY until we readed the framebuffer. In this state no other
    TRX_END can happen.
    
    Tested with RPi where I first detected issues between edge/level irq's.
    Signed-off-by: default avatarAlexander Aring <alex.aring@gmail.com>
    Signed-off-by: default avatarMarcel Holtmann <marcel@holtmann.org>
    57c1bc7e
at86rf230.c 43.3 KB