This library lets you control the addressable RGB LED strips from Pololu Robotics. Forked to add selectable colour order (Support RGB or GRB Leds)

Fork of PololuLedStrip by David Grayson

Files at this revision

API Documentation at this revision

Comitter:
DavidEGrayson
Date:
Fri Mar 01 00:31:24 2013 +0000
Parent:
5:690fdfb595de
Child:
7:9a088f042ee0
Commit message:
Successfully read the delay amount from a table.

Changed in this revision

PololuLedStrip.cpp Show annotated file Show diff for this revision Revisions of this file
led_strip_write_color.s Show annotated file Show diff for this revision Revisions of this file
--- a/PololuLedStrip.cpp	Fri Mar 01 00:05:26 2013 +0000
+++ b/PololuLedStrip.cpp	Fri Mar 01 00:31:24 2013 +0000
@@ -5,6 +5,8 @@
 // TODO: read clock frequency from SystemCoreClock and use that to make this work on different boards.
 // calculate the three delays needed and pass them to the assembly.  The assembly can implement them with computed jumps.
 
+uint8_t led_strip_write_delays[3];
+
 PololuLedStrip::PololuLedStrip(PinName pinName)
 {
     gpio_init(&gpio, pinName, PIN_OUTPUT);
@@ -14,6 +16,12 @@
 {
     __disable_irq();   // Disable interrupts temporarily because we don't want our pulse timing to be messed up.
     
+    int f = SystemCoreClock/1000000;
+    led_strip_write_delays[0] = 700*f/1000 - 10;
+    led_strip_write_delays[1] = 600*f/1000 - 10;
+    led_strip_write_delays[2] = 1200*f/1000 - 10;
+    led_strip_write_delays[0] = 59;
+    
     while(count--)
     {
         led_strip_write_color(colors++, gpio.reg_set, gpio.reg_clr, gpio.mask);
--- a/led_strip_write_color.s	Fri Mar 01 00:05:26 2013 +0000
+++ b/led_strip_write_color.s	Fri Mar 01 00:31:24 2013 +0000
@@ -1,5 +1,6 @@
     AREA asm_func, CODE, READONLY
     EXPORT led_strip_write_color
+    IMPORT led_strip_write_delays
 
 led_strip_write_color
     ; Register usage:
@@ -10,12 +11,13 @@
     ;   R3:  pin mask
     ; Additionally, we use these registers:
     ;   R4:  temporary register
+    ;   R5:  temporary register
     ;   R7:  the number of bits we still need to send
     ;   R12: shift register that holds the 24-bit color
     ;   R13: Link Register, holds return addresses.
     
     
-    push    {r4, r12, r7, lr}
+    push {r4, r5, r12, r7, lr}
    
     ldr r12, [r0]      ; Read the next color.
     rbit r12, r12      ; Reverse the order of the bits.
@@ -26,8 +28,11 @@
     str r3, [r1]       ; Drive the line high.
     rrxs r12, r12      ; Rotate right through carry.
     
+    ldr r5, =led_strip_write_delays
+    ldrb r5, [r5, #0]
+    lsl r5, r5, #1
     ldr r4, =delay_region_end
-    sub r4, r4, #59*2
+    sub r4, r4, r5
     blx r4
     
     it cc                ; If the bit to send it 0...
@@ -44,11 +49,11 @@
     add r4, r4, #68
     blx r4
     
-    subs r7, r7, #1            ; Decrement the loop counter.
+    subs r7, r7, #1           ; Decrement the loop counter.
     bne send_led_strip_bit    ; Send another bit if we have not reached zero.
     
 led_strip_asm_end
-    pop {r4, r12, r7, lr}
+    pop {r4, r5, r12, r7, lr}
     bx lr