diff options
| author | Jim Mussared <jim.mussared@gmail.com> | 2020-08-14 16:35:25 +1000 |
|---|---|---|
| committer | Damien George <damien@micropython.org> | 2020-09-08 10:47:27 +1000 |
| commit | 5ff265a3db998fd86a45d83ccca98fda153991c4 (patch) | |
| tree | 5f3eea8a5c32f914e0acf81dc351b4b51672ff73 | |
| parent | 23109988c29447067b15f1943f72c0b486819c6c (diff) | |
stm32/modbluetooth_hci: Use a static mp_irq_obj_t for BT HCI UART IRQ.
So that the IRQ handler does not need to be traced by the GC.
| -rw-r--r-- | ports/stm32/modbluetooth_hci.c | 18 |
1 files changed, 9 insertions, 9 deletions
diff --git a/ports/stm32/modbluetooth_hci.c b/ports/stm32/modbluetooth_hci.c index 4e016eae8..54c60adc0 100644 --- a/ports/stm32/modbluetooth_hci.c +++ b/ports/stm32/modbluetooth_hci.c @@ -135,6 +135,7 @@ int mp_bluetooth_hci_uart_readchar(void) { #include "uart.h" pyb_uart_obj_t mp_bluetooth_hci_uart_obj; +mp_irq_obj_t mp_bluetooth_hci_uart_irq_obj; static uint8_t hci_uart_rxbuf[512]; @@ -163,15 +164,14 @@ int mp_bluetooth_hci_uart_set_baudrate(uint32_t baudrate) { } int mp_bluetooth_hci_uart_activate(void) { - // Interrupt on RX chunk received (idle) - // Trigger stack poll when this happens - mp_obj_t uart_irq_fn = mp_load_attr(MP_OBJ_FROM_PTR(&mp_bluetooth_hci_uart_obj), MP_QSTR_irq); - mp_obj_t uargs[] = { - MP_OBJ_FROM_PTR(&mp_uart_interrupt_obj), - MP_OBJ_NEW_SMALL_INT(UART_FLAG_IDLE), - mp_const_true, - }; - mp_call_function_n_kw(uart_irq_fn, 3, 0, uargs); + // Add IRQ handler for IDLE (i.e. packet finished). + uart_irq_config(&mp_bluetooth_hci_uart_obj, false); + mp_irq_init(&mp_bluetooth_hci_uart_irq_obj, &uart_irq_methods, MP_OBJ_FROM_PTR(&mp_bluetooth_hci_uart_obj)); + mp_bluetooth_hci_uart_obj.mp_irq_obj = &mp_bluetooth_hci_uart_irq_obj; + mp_bluetooth_hci_uart_obj.mp_irq_trigger = UART_FLAG_IDLE; + mp_bluetooth_hci_uart_irq_obj.handler = MP_OBJ_FROM_PTR(&mp_uart_interrupt_obj); + mp_bluetooth_hci_uart_irq_obj.ishard = true; + uart_irq_config(&mp_bluetooth_hci_uart_obj, true); mp_bluetooth_hci_controller_init(); mp_bluetooth_hci_controller_activate(); |
