Machine
The machine module contains specific functions related to the micro:bit hardware. Most functions in this module allow to achieve direct and unrestricted access to and control of hardware blocks on a system (like CPU, timers, buses, etc.). Used incorrectly, this can lead to malfunction, lockups, crashes of your board, and in extreme cases, hardware damage.
Functions
- machine.unique_id()
Returns a byte string with a unique identifier of a board. It will vary from one board instance to another.
- machine.reset()
Resets the device in a manner similar to pushing the external RESET button.
- machine.freq()
Returns CPU frequency in hertz.
- machine.disable_irq()
Disable interrupt requests. Returns the previous IRQ state which should be considered an opaque value. This return value should be passed to the
machine.enable_irq()
function to restore interrupts to their original state, beforemachine.disable_irq()
was called.
- machine.enable_irq(state)
Re-enable interrupt requests. The state parameter should be the value that was returned from the most recent call to the
machine.disable_irq()
function.
- machine.time_pulse_us(pin, pulse_level, timeout_us=1000000)
Time a pulse on the given pin, and return the duration of the pulse in microseconds. The pulse_level argument should be 0 to time a low pulse or 1 to time a high pulse.
If the current input value of the pin is different to pulse_level, the function first (*) waits until the pin input becomes equal to pulse_level, then (**) times the duration that the pin is equal to pulse_level. If the pin is already equal to pulse_level then timing starts straight away.
The function will return -2 if there was timeout waiting for condition marked (*) above, and -1 if there was timeout during the main measurement, marked (**) above. The timeout is the same for both cases and given by timeout_us (which is in microseconds).
Reading Memory
The machine
module allows you to read from the device’s memory, getting 1
byte (8 bits; mem8
), 2 byte (16 bits; mem16
), or 4 byte (32 bits;
mem32
) words from physical addresses. For example: mem8[0x00]
reads 1
byte on physical address 0x00
. This has a number of uses, for example if
you’d like to read data from the nRF51 registers.