Hi, I am developing a fixed-point MP3 & ACELP decoder on an Arduino Due. I realize that bit-banding makes a RMW sequence atomic but I notice fields in the Due hardware are multi-bit fields. Is there an atomic way to alter multiple bits? I realize that the atomic RMW can probably allow the applications/IRQ/NMI to resolve which gets access to the bus but if that is the only real use, wouldn't it have been simpler to use atomic test-and-set as the SuperH does?Examples like the PERIPH_PTSR (bits 0 & 8 used) are classic. Do you write to separate bytes, perform 2 bit-band operations or write to 16 or 32 bits at once?I do appreciate that this is very low level. I also note that TCM (tightly coupled memory) is mentioned just once and I'm not quite sure if this refers to part of the cache or a PSX-like scratch-pad. The PSX was another machine that needed hand-written assembly language to get the full performance out of it.Many thanks,Sean
TBH the M3/4 are new to me, I've just been using M0 cores (in assembly language) and was considering if a suitable macro could deal with all HW writes as atomic. I will have to fall back on DMB instructions. You don't miss what you never had. I was looking into TCM with an eye to placing those very atomic operations within zero wait-state RAM.Many thanks for your help. It really is appreciated.
Yes, bit banding is for single bits only. Though you can use stm if the bits are adjacent. But this also alters the bits one after another.
Why do you need it to be atomic? Is there another task/thread also writing to the same register?
View all questions in Cortex-M / M-Profile forum