From 5a427fbf1fac4f7398ffb9e153910808489f70f7 Mon Sep 17 00:00:00 2001 From: Graham Sanderson Date: Fri, 29 Apr 2022 14:34:20 -0500 Subject: [PATCH] irq_add_shared_handler assertion fix #724 (#747) --- src/rp2_common/hardware_irq/irq.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/rp2_common/hardware_irq/irq.c b/src/rp2_common/hardware_irq/irq.c index 211f6d0..770ed49 100644 --- a/src/rp2_common/hardware_irq/irq.c +++ b/src/rp2_common/hardware_irq/irq.c @@ -135,9 +135,9 @@ irq_handler_t irq_get_exclusive_handler(uint num) { static uint16_t make_branch(uint16_t *from, void *to) { uint32_t ui_from = (uint32_t)from; uint32_t ui_to = (uint32_t)to; - uint32_t delta = (ui_to - ui_from - 4) / 2; - assert(!(delta >> 11u)); - return (uint16_t)(0xe000 | (delta & 0x7ff)); + int32_t delta = (int32_t)(ui_to - ui_from - 4); + assert(delta >= -2048 && delta <= 2046 && !(delta & 1)); + return (uint16_t)(0xe000 | ((delta >> 1) & 0x7ff)); } static void insert_branch_and_link(uint16_t *from, void *to) {