Fork us on GitHub Follow us on Facebook Follow us on Twitter

Version 6 (modified by Jiri Svoboda, 12 years ago) (diff)

Verified with C app run in Om 2008.

Programming Neo FreeRunner LEDs

Neo FreeRunner has three LED indicators:

Color Location IO Port/pin
orange behind power button GPB0
blue behind power button GPB1
red behind aux button GPB2

Combination of orange and blue behind the power button should give purple.

Port B Control Registers

Register Address Description Reset value
GPBCON 0x56000010 Pin configuration 0x0
GPBDAT 0x56000014 Data in/out undefined
GPBDN 0x56000018 Pull-down disable 0x0

GPB has 11 pins (GPB0 through GPB11 inclusive).

Register descriptions:

  • GPBCON: Two configuration bits per pin (GPBCON[1:0] for GPB0, GPBCON[3:2] for GPB1, etc.), 00 = Input, 01 = Output, 10 = XXX, 11 = reserved. XXX refers to internal signals, different for each pin.
  • GPBDAT[10:0]: Write GPB10..GPB0 in output mode and read GPB10..GPB0 in input mode.
  • GPBDN[10:0]: 0 = pull-down enabled, 1 = pull-down disabled in GPB10..GPB0.

For blinking LEDs, we select output mode (0b01) for GPB0..GPB2. Pull-down should be disabled. Then write to GPBDAT[0:2]. To turn the LED on, set the pin value to 1 (H level), to turn it off set pin value to 0 (L level).



  • Verified by accessing physical memory via /dev/mem in Om 2008.
  • From the documentation I've seen it is not clear whether the registers are sensitive to endianness and if so, what their endianness is. Little-endian access works.
  • Could not find in datasheet whether H drive is coded as 1 or 0. From experiments 1 is H because 1 lights the LED.