Resource usage for nRF52¶
CPU usage¶
Mira normally use at most 25% of the CPU measured over a 40ms window. Some infrequent processing uses the CPU, at thread/appplication level, for longer periods.
Note that delaying the SWI IRQ handler or IRQ handlers above priority 2 will decrease Mira's network performance.
Mira will drop further received packets until it has processed it at thread/application level. That will also lead to decreased network performance.
SoftDevice¶
For platforms using SoftDevice, see Nordic Semiconductor's S132/S140 SoftDevice Specification for its hardware requirements.
Mira uses the Radio Timeslot API, that makes it unavailable to other applications.
MiraOS consumes the SoftDevice events. To use them in an application, see here.
MiraMesh needs to have the SoftDevice events forwarded to it, see here.
Peripherals used by MiraOS¶
Some resources are available for direct access if special low level access is required. Others are available via specific APIs or used internally by Mira OS.
To use the peripherals of nRF52 directly, refer to the corresponding nRF52 product specification for information.
- Cells marked ✅ are available for application.
- Cells marked ⚠️ proviedes restricted access.
- Cells marked ❌ are not available for application.
Peripheral | nrf52832 | nrf52832ble | nrf52840 | nrf52840ble |
---|---|---|---|---|
AAR | ❌ | ❌ | ❌ | ❌ |
ACL/BPROT | ✅10 | ✅10 | ✅10 | ✅10 |
CCM | ❌ | ❌ | ❌ | ❌ |
CLOCK | ❌ | ❌ | ❌ | ❌ |
COMP | ✅1 | ✅1 | ✅1 | ✅1 |
CRYPTOCELL | ✅ | ✅ | ||
ECB | ❌ | ❌ | ❌ | ❌ |
FPU | ✅2 | ✅2 | ✅2 | ✅2 |
GPIOTE | ❌ | ❌ | ❌ | ❌ |
I2S | ✅ | ✅ | ✅ | ✅ |
LPCOMP | ✅1 | ✅1 | ✅1 | ✅1 |
MWU | ❌ | ❌ | ❌ | ❌ |
NFCT | ❌ | ❌ | ❌ | ❌ |
NVMC | ❌ | ❌ | ❌ | ❌ |
P0 (GPIO) | ⚠️3 | ⚠️3 | ⚠️3 | ⚠️3 |
P1 (GPIO) | ⚠️3 | ⚠️3 | ||
PDM | ✅ | ✅ | ✅ | ✅ |
POWER | ❌ | ❌ | ❌ | ❌ |
PPI | ⚠️4 | ⚠️4 | ⚠️4 | ⚠️4 |
PWM0 | ✅ | ✅ | ✅ | ✅ |
PWM1 | ✅ | ✅ | ✅ | ✅ |
PWM2 | ✅ | ✅ | ✅ | ✅ |
PWM3 | ✅ | ✅ | ||
QDEC | ✅ | ✅ | ✅ | ✅ |
QSPI5 | ✅ | ✅ | ||
RADIO | ❌ | ❌ | ❌ | ❌ |
RNG | ❌ | ❌ | ❌ | ❌ |
RTC0 | ✅ | ❌ | ✅ | ❌ |
RTC1 | ✅ | ✅ | ✅ | ✅ |
RTC2 | ❌ | ❌ | ❌ | ❌ |
SAADC | ⚠️6 | ⚠️6 | ⚠️6 | ⚠️6 |
SPIM0/SPIS0/SPI0 | ⚠️7 | ⚠️7 | ⚠️7 | ⚠️7 |
SPIM1/SPIS1/SPI1 | ⚠️7 | ⚠️7 | ⚠️7 | ⚠️7 |
SPIM2/SPIS2/SPI2 | ⚠️7 | ⚠️7 | ⚠️7 | ⚠️7 |
SPIM3 | ⚠️7 | ⚠️7 | ||
SWI0/EGU0 | ❌ | ❌ | ❌ | ❌ |
SWI1/EGU1 | ❌ | ❌ | ❌ | ❌ |
SWI2/EGU2 | ❌ | ❌ | ❌ | ❌ |
SWI3/EGU3 | ❌ | ❌ | ❌ | ❌ |
SWI4/EGU4 | ✅ | ✅ | ✅ | ✅ |
SWI5/EGU5 | ❌ | ❌ | ❌ | ❌ |
TEMP | ❌ | ❌ | ❌ | ❌ |
TIMER0 | ❌ | ❌ | ❌ | ❌ |
TIMER1 | ❌ | ❌ | ❌ | ❌ |
TIMER2 | ❌ | ❌ | ❌ | ❌ |
TIMER3 | ✅ | ✅ | ✅ | ✅ |
TIMER4 | ✅ | ✅ | ❌8 | ❌8 |
TWIM0/TWIS0/TWI0 | ⚠️7 | ⚠️7 | ⚠️7 | ⚠️7 |
TWIM1/TWIS1/TWI1 | ⚠️7 | ⚠️7 | ⚠️7 | ⚠️7 |
UARTE0/UART0 | ⚠️9 | ⚠️9 | ⚠️9 | ⚠️9 |
UARTE1/UART1 | ⚠️9 | ⚠️9 | ||
USBD | ✅ | ✅ | ||
WDT | ❌ | ❌ | ❌ | ❌ |
PPI availability with MiraOS¶
PPI | nrf52832 | nrf52832ble | nrf52840 | nrf52840ble |
---|---|---|---|---|
channel 0-12 | ❌ | ❌ | ❌ | ❌ |
channel 13-16 | ✅ | ✅ | ✅ | ✅ |
channel 17-31 | ❌ | ❌ | ❌ | ❌ |
group 0-5 | ❌ | ❌ | ❌ | ❌ |
PPI availability with MiraMesh¶
MiraMesh use two configurable PPIs and one configurable PPI group.
Interrupts used by MiraMesh¶
MiraMesh is only available with SoftDevice.
Besides SoftDevice's hardware requirements, MiraMesh also use one configurable RTC, one configurable SWI/EGU IRQ and the SWI1/EGU1 IRQ.
The integration code must call miramesh_rtc_irq_handler and miramesh_swi_irq_handler for their IRQs. It should also call miramesh_swi1_irq_handler for SWI1/EGU1 IRQ.
The confirgured SWI IRQ need to have a priority between 1 and the RTC's IRQ priority.
Interrupts used by MiraOS¶
MiraOS is delivered with an isr_vector.c
file containing the ISR vector.
MiraOS has default IRQ handlers for unused IRQs. They are weak
and
can be overridden by defining a function with the same name.
If MiraOS' HAL isn't used for a peripheral, its IRQ is free and an external ISR handler can be used.
With MiraOS 2.4.0 and 2.4.1 the IRQ handler's name isn't weak
and
an external IRQ handler need to have a unique name. That name must to
be put in the isr_vector.
With later versions of MiraOS, MiraOS' IRQ handlers have a mira_
-prefix,
leaving the default names free for use.
IRQ Priorities¶
IRQ/Event | Prio |
---|---|
GPIOTE | 7 |
NFCT | 7 |
POWER/CLOCK | 1 |
RADIO | 0 |
Reset | - |
RNG | 3 |
RTC2 | 6 |
SAADC | 5 |
SPIM0/SPIS0/TWIM0/TWIS0/SPI0/TWI0 | 5 |
SPIM1/SPIS1/TWIM1/TWIS1/SPI1/TWI1 | 7 |
SPIM2/SPIS2/SPI2 | 7 |
SoftDevice Event | 7 |
SoftDevice Radio Event | 0 |
SWI0/EGU0 | 5 |
TIMER0 | 0 |
TIMER4 | 7 |
UARTE0/UART0 | 3 |
WDT | 7 |
Notes¶
- LPCOMP/COMP can not use the same analog input as the ADC, when using Mira API for the ADC
- Errata 87 fix for nrf52840 implemented
- Only PIN_CNF[n], OUTSET/OUTCLR, DIRSET/DIRCLR are availavble for pins not managed by Mira API
- Some PPI channels are available, see separate table
- QSPI pins might not be available for all modules
- Available when ADC is not used via Mira API
- Available only when not using either SPI or I2C via Mira API
- Available when NFC is not used via Mira API
- Available when UART is not used via Mira API
- Make sure it doesn't hinder access from MiraOS to the SWAP area for the FOTA driver and CONFIG0/1 for mira_userconfig_*() if those APIs are used.