Let's hunt for MEPC (Machine Exception Program Counter) 0x2300 8fe2 in the Disassembly ... Yep my buggy code crashed in the I2C Interrupt Handler 🤔

github.com/lupyuen/bl_iot_sdk/

Found the bug in my I2C program ... There are two levels of BL602 I2C API: 1️⃣ High Level (which calls FreeRTOS) 2️⃣ Low Level (which doesn't call FreeRTOS) ... I'm using the Low Level API, so I shouldn't call "hal_i2c_init" in the High Level API

github.com/lupyuen/bl_iot_sdk/

Here's our simple I2C Interrupt Handler ... When we hit an I2C Interrupt, bump up the Interrupt Counters ... Remember: No funny business allowed in Interrupt Handlers (like Console Output)

github.com/lupyuen/bl_iot_sdk/

I2C "Slave Address" vs "Device Address" vs "Slave Device Address" vs "Slave Device Register Address" ... A little confusing 🤔

github.com/bouffalolab/bl_docs

@lupyuen recently I had to implement exception code 11 (M-mode ECALL) for a Risc-V software model. Modeling these things is no easy task

@lupyuen but I've always wanted to look at the upper layers such as HAL, which is way I enjoy your posts. Keep it up!🙂

Sign in to participate in the conversation
CleverLibre Social

CleverLibre Social is an inclusive social instance for open discussion, learning, and community.
All cultures welcome.
Hate speech and harassment strictly forbidden.