diff options
author | Damien George <damien.p.george@gmail.com> | 2019-11-29 12:57:07 +1100 |
---|---|---|
committer | Damien George <damien.p.george@gmail.com> | 2019-12-04 13:39:22 +1100 |
commit | 40cc7ec677e962c47db567479e42c27ed8911ff6 (patch) | |
tree | 8facce5c24dbb336523c62e6d5f27a1113f81aa0 | |
parent | 82a19cb39f1312a6349c481663905477c878a38d (diff) |
stm32/mpconfigport.h: Use IRQ_PRI_PENDSV to protect bluetooth ringbuf.
The default protection for the BLE ringbuf is to use
MICROPY_BEGIN_ATOMIC_SECTION, which disables all interrupts. On stm32 it
only needs to disable the lowest priority IRQ, pendsv, because that's the
IRQ level at which the BLE stack is driven.
-rw-r--r-- | extmod/modbluetooth.c | 1 | ||||
-rw-r--r-- | ports/stm32/mpconfigport.h | 4 |
2 files changed, 5 insertions, 0 deletions
diff --git a/extmod/modbluetooth.c b/extmod/modbluetooth.c index 96cd41ae4..2293e0367 100644 --- a/extmod/modbluetooth.c +++ b/extmod/modbluetooth.c @@ -33,6 +33,7 @@ #include "py/objarray.h" #include "py/qstr.h" #include "py/runtime.h" +#include "py/mphal.h" #include "extmod/modbluetooth.h" #include <string.h> diff --git a/ports/stm32/mpconfigport.h b/ports/stm32/mpconfigport.h index fc54026f6..becde2b91 100644 --- a/ports/stm32/mpconfigport.h +++ b/ports/stm32/mpconfigport.h @@ -366,6 +366,10 @@ static inline mp_uint_t disable_irq(void) { #define MICROPY_PY_LWIP_REENTER irq_state = raise_irq_pri(IRQ_PRI_PENDSV); #define MICROPY_PY_LWIP_EXIT restore_irq_pri(irq_state); +// Bluetooth calls must run at a raised IRQ priority +#define MICROPY_PY_BLUETOOTH_ENTER MICROPY_PY_LWIP_ENTER +#define MICROPY_PY_BLUETOOTH_EXIT MICROPY_PY_LWIP_EXIT + // We need an implementation of the log2 function which is not a macro #define MP_NEED_LOG2 (1) |