Description
MSP430 port details. This section how the ChibiOS/RT features are implemented on this architecture.
The ChibiOS/RT logical System States are mapped as follow in the MSP430 port:
- Init. This state is represented by the startup code and the initialization code before
chSysInit()
is executed. It has not a special hardware state associated.
- Normal. This is the state the system has after executing
chSysInit()
. Interrupts are enabled.
- Suspended. Interrupts are disabled.
- Disabled. Interrupts are enabled. This state is equivalent to the Suspended state because there are no fast interrupts in this architecture.
- Sleep. Not yet implemented.
- S-Locked. Interrupts are disabled.
- I-Locked. This state is equivalent to the SRI state, the
chSysLockI()
and chSysUnlockI()
APIs do nothing (still use them in order to formally change state because this may change).
- Serving Regular Interrupt. Normal interrupt service code.
- Serving Fast Interrupt. Not present in this architecture.
- Serving Non-Maskable Interrupt. The MSP430 has several non maskable interrupt sources that can be associated to this state.
- Halted. Implemented as an infinite loop with interrupts disabled.
- The MSP430 does not have a dedicated interrupt stack, make sure to reserve enough stack space for interrupts in each thread stack. This can be done by modifying the
INT_REQUIRED_STACK
macro into ./ports/MSP430/chcore.h.
- The state of the hardware multiplier is not saved in the thread context, make sure to use it in Suspended state (interrupts masked).
- The port code does not define the switch to a low power mode for the idle thread because the MSP430 has several low power modes. You can select the proper low power mode for you application by defining the macro
port_wait_for_interrupt()
.