summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDamien George <damien.p.george@gmail.com>2019-11-29 12:57:07 +1100
committerDamien George <damien.p.george@gmail.com>2019-12-04 13:39:22 +1100
commit40cc7ec677e962c47db567479e42c27ed8911ff6 (patch)
tree8facce5c24dbb336523c62e6d5f27a1113f81aa0
parent82a19cb39f1312a6349c481663905477c878a38d (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.c1
-rw-r--r--ports/stm32/mpconfigport.h4
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)