The QN908x has four FLEXCOMM interfaces that support a subset of UART,
SPI or I2C each one. This patch adds generic support for dealing with
the FLEXCOMM initialization and interrupts and adds a driver for
RX/TX support in UART.
With this patch is now possible to use a shell on the device over UART.
QN908X CPUs require the image to have a valid checksum. The checksum is
a simple addition of the first 7 uint32_t values stored in the 8th
position of the image header. This position is a reseved entry of the
Cortex-M Vector Table and its value depends on other fields that are
computed at link time. Performing this checksum at link time seems
hard to do, so instead this patch uses a python script to patch the
checksum from the ELF file. This redefines the value of FLASHFILE
to the new .elf file with the checksum fixed.
With this patch, OpenOCD can program and verify QN908X images since
now they have a valid checksum value.
Allow using `event_loop_multi()` to handle event queues of multiple priorities
in an single thread. In the extreme case, all three event queues are handled
by a single thread (thus saving two stacks). This comes for the price of
increased worst case latency, as already running event handlers will no longer
be preempted by higher priority events.
With this, all three event queue priorities are always provided. Using modules,
the old behavior of one thread per event queue can be restored for better worst
case latency at the expense of additional thread size.
When using SUIT over a link-layer that supports larger PDU, a larger
CoAP blocksize is desirable to speed up firmware downloads.
To support this, make the CoAP blocksize used by SUIT configurable.
Having NS_PER_SEC defined as `1000000000U` is quite a foot gun, as
multiplication even with small numbers in 32 bit quickly overflows. Using the
`1000000000LLU` instead forces 64 bit math.
To calibrate the at86rf215 radio, trim value has to be set at run-time
during board production.
Add two helper functions to control the trim value and clock output register.
- include serial.inc.mk is not needed as it's handled in the main Makefile.include
- the default serial ports are already defined in serial.inc.mk
- use PROGRAMMER to specify the default programmer (openocd) and don't include openocd.inc.mk
- FLASHFILE is already defined as ELFILE in openocd.inc.mk