Forked PololuLedStrip and modified it to work with the KL25Z. Renamed it to Adafruit_NeoPixel.

Dependents:   idd_hw3 idd_fa15_hw3_lauren_bill_tomas idd_fa15_hw3_lauren_bill_tomas Raiden ... more

Fork of PololuLedStrip by David Grayson

Committer:
DavidEGrayson
Date:
Fri Mar 01 03:57:49 2013 +0000
Revision:
9:6ffb85d69eaf
Parent:
8:1578776ceac5
Child:
10:f1bb84b97788
Successfully transmitted colors on the M0.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
DavidEGrayson 0:06475317f283 1 AREA asm_func, CODE, READONLY
DavidEGrayson 0:06475317f283 2 EXPORT led_strip_write_color
DavidEGrayson 6:9d0530b7dae2 3 IMPORT led_strip_write_delays
DavidEGrayson 0:06475317f283 4
DavidEGrayson 7:9a088f042ee0 5 MACRO
DavidEGrayson 7:9a088f042ee0 6 delay $id
DavidEGrayson 7:9a088f042ee0 7 ldr r5, =led_strip_write_delays
DavidEGrayson 7:9a088f042ee0 8 ldrb r5, [r5, $id]
DavidEGrayson 9:6ffb85d69eaf 9 lsls r5, r5, #1
DavidEGrayson 7:9a088f042ee0 10 ldr r4, =delay_region_end
DavidEGrayson 9:6ffb85d69eaf 11 subs r4, r4, r5
DavidEGrayson 7:9a088f042ee0 12 blx r4
DavidEGrayson 7:9a088f042ee0 13 MEND
DavidEGrayson 7:9a088f042ee0 14
DavidEGrayson 0:06475317f283 15 led_strip_write_color
DavidEGrayson 5:690fdfb595de 16 ; Register usage:
DavidEGrayson 5:690fdfb595de 17 ; These are the first 4 arguments to the method:
DavidEGrayson 5:690fdfb595de 18 ; R0: pointer to the color to send
DavidEGrayson 5:690fdfb595de 19 ; R1: pointer to the register for setting the pin
DavidEGrayson 5:690fdfb595de 20 ; R2: pointer to the register for clearing the pin
DavidEGrayson 5:690fdfb595de 21 ; R3: pin mask
DavidEGrayson 5:690fdfb595de 22 ; Additionally, we use these registers:
DavidEGrayson 5:690fdfb595de 23 ; R4: temporary register
DavidEGrayson 6:9d0530b7dae2 24 ; R5: temporary register
DavidEGrayson 8:1578776ceac5 25 ; R6: shift register that holds the 24-bit color
DavidEGrayson 5:690fdfb595de 26 ; R7: the number of bits we still need to send
DavidEGrayson 5:690fdfb595de 27 ; R13: Link Register, holds return addresses.
DavidEGrayson 7:9a088f042ee0 28
DavidEGrayson 9:6ffb85d69eaf 29 ; Push those registers so we can restore them later.
DavidEGrayson 9:6ffb85d69eaf 30 push {r4, r5, r6, r7}
DavidEGrayson 9:6ffb85d69eaf 31 mov r4, lr
DavidEGrayson 9:6ffb85d69eaf 32 push {r4}
DavidEGrayson 5:690fdfb595de 33
DavidEGrayson 9:6ffb85d69eaf 34 ldrb r4, [r0, #0] ; Load red.
DavidEGrayson 9:6ffb85d69eaf 35 lsls r4, r4, #24
DavidEGrayson 9:6ffb85d69eaf 36 mov r6, r4 ; Put red in MSB of r6.
DavidEGrayson 9:6ffb85d69eaf 37 ldrb r4, [r0, #1] ; Load green.
DavidEGrayson 9:6ffb85d69eaf 38 lsls r4, r4, #16
DavidEGrayson 9:6ffb85d69eaf 39 orrs r6, r6, r4 ; Put green in r6.
DavidEGrayson 9:6ffb85d69eaf 40 ldrb r4, [r0, #2] ; Load blue.
DavidEGrayson 9:6ffb85d69eaf 41 lsls r4, r4, #8
DavidEGrayson 9:6ffb85d69eaf 42 orrs r6, r6, r4 ; Put blue in MSB of r6.
DavidEGrayson 9:6ffb85d69eaf 43
DavidEGrayson 9:6ffb85d69eaf 44 ; On the Cortex M0 we simply did:
DavidEGrayson 9:6ffb85d69eaf 45 ; ldr r6, [r0] ; Read the color. Now we have: xxBbGgRr
DavidEGrayson 9:6ffb85d69eaf 46 ; rbit r6, r6 ; Reverse the order of the bits: rRgGbBxx
DavidEGrayson 9:6ffb85d69eaf 47 ; rev r6, r6 ; Reverse the order of the bytes: xxbBgGrR
DavidEGrayson 9:6ffb85d69eaf 48 ; and then we used rrxs for shifting to the right through carry.
DavidEGrayson 9:6ffb85d69eaf 49
DavidEGrayson 9:6ffb85d69eaf 50 ldr r7, =24 ; Initialize the loop counter register.
DavidEGrayson 0:06475317f283 51
DavidEGrayson 0:06475317f283 52 send_led_strip_bit
DavidEGrayson 0:06475317f283 53 str r3, [r1] ; Drive the line high.
DavidEGrayson 0:06475317f283 54
DavidEGrayson 7:9a088f042ee0 55 delay #0
DavidEGrayson 0:06475317f283 56
DavidEGrayson 9:6ffb85d69eaf 57 ldr r4, =0x80000000
DavidEGrayson 9:6ffb85d69eaf 58 tst r6, r4
DavidEGrayson 9:6ffb85d69eaf 59 bne delay1
DavidEGrayson 9:6ffb85d69eaf 60 str r3, [r2] ; If the bit to send it 0, drive the line low.
DavidEGrayson 9:6ffb85d69eaf 61 delay1
DavidEGrayson 0:06475317f283 62
DavidEGrayson 7:9a088f042ee0 63 delay #1
DavidEGrayson 0:06475317f283 64
DavidEGrayson 9:6ffb85d69eaf 65 ldr r4, =0x80000000
DavidEGrayson 9:6ffb85d69eaf 66 tst r6, r4
DavidEGrayson 9:6ffb85d69eaf 67 beq delay2
DavidEGrayson 9:6ffb85d69eaf 68 str r3, [r2] ; If the bit to send is 1, drive the line low.
DavidEGrayson 9:6ffb85d69eaf 69 delay2
DavidEGrayson 0:06475317f283 70
DavidEGrayson 7:9a088f042ee0 71 delay #2
DavidEGrayson 4:d3b60bd43811 72
DavidEGrayson 9:6ffb85d69eaf 73 lsls r6, r6, #1 ; Shift color bits.
DavidEGrayson 6:9d0530b7dae2 74 subs r7, r7, #1 ; Decrement the loop counter.
DavidEGrayson 5:690fdfb595de 75 bne send_led_strip_bit ; Send another bit if we have not reached zero.
DavidEGrayson 4:d3b60bd43811 76
DavidEGrayson 4:d3b60bd43811 77 led_strip_asm_end
DavidEGrayson 9:6ffb85d69eaf 78 pop {r4}
DavidEGrayson 9:6ffb85d69eaf 79 mov lr, r4
DavidEGrayson 9:6ffb85d69eaf 80 pop {r4, r5, r6, r7}
DavidEGrayson 4:d3b60bd43811 81 bx lr
DavidEGrayson 4:d3b60bd43811 82
DavidEGrayson 4:d3b60bd43811 83
DavidEGrayson 4:d3b60bd43811 84 delay_region
DavidEGrayson 5:690fdfb595de 85 ; The following is 128 nops.
DavidEGrayson 0:06475317f283 86 nop
DavidEGrayson 0:06475317f283 87 nop
DavidEGrayson 0:06475317f283 88 nop
DavidEGrayson 0:06475317f283 89 nop
DavidEGrayson 0:06475317f283 90 nop
DavidEGrayson 0:06475317f283 91 nop
DavidEGrayson 0:06475317f283 92 nop
DavidEGrayson 0:06475317f283 93 nop
DavidEGrayson 0:06475317f283 94 nop
DavidEGrayson 0:06475317f283 95 nop
DavidEGrayson 0:06475317f283 96 nop
DavidEGrayson 0:06475317f283 97 nop
DavidEGrayson 0:06475317f283 98 nop
DavidEGrayson 4:d3b60bd43811 99 nop
DavidEGrayson 4:d3b60bd43811 100 nop
DavidEGrayson 4:d3b60bd43811 101 nop
DavidEGrayson 4:d3b60bd43811 102
DavidEGrayson 0:06475317f283 103 nop
DavidEGrayson 0:06475317f283 104 nop
DavidEGrayson 0:06475317f283 105 nop
DavidEGrayson 0:06475317f283 106 nop
DavidEGrayson 0:06475317f283 107 nop
DavidEGrayson 0:06475317f283 108 nop
DavidEGrayson 0:06475317f283 109 nop
DavidEGrayson 0:06475317f283 110 nop
DavidEGrayson 0:06475317f283 111 nop
DavidEGrayson 0:06475317f283 112 nop
DavidEGrayson 0:06475317f283 113 nop
DavidEGrayson 0:06475317f283 114 nop
DavidEGrayson 0:06475317f283 115 nop
DavidEGrayson 0:06475317f283 116 nop
DavidEGrayson 0:06475317f283 117 nop
DavidEGrayson 0:06475317f283 118 nop
DavidEGrayson 4:d3b60bd43811 119
DavidEGrayson 0:06475317f283 120 nop
DavidEGrayson 0:06475317f283 121 nop
DavidEGrayson 0:06475317f283 122 nop
DavidEGrayson 0:06475317f283 123 nop
DavidEGrayson 4:d3b60bd43811 124 nop
DavidEGrayson 4:d3b60bd43811 125 nop
DavidEGrayson 0:06475317f283 126 nop
DavidEGrayson 0:06475317f283 127 nop
DavidEGrayson 0:06475317f283 128 nop
DavidEGrayson 0:06475317f283 129 nop
DavidEGrayson 0:06475317f283 130 nop
DavidEGrayson 0:06475317f283 131 nop
DavidEGrayson 0:06475317f283 132 nop
DavidEGrayson 0:06475317f283 133 nop
DavidEGrayson 0:06475317f283 134 nop
DavidEGrayson 0:06475317f283 135 nop
DavidEGrayson 0:06475317f283 136
DavidEGrayson 0:06475317f283 137 nop
DavidEGrayson 0:06475317f283 138 nop
DavidEGrayson 0:06475317f283 139 nop
DavidEGrayson 0:06475317f283 140 nop
DavidEGrayson 0:06475317f283 141 nop
DavidEGrayson 0:06475317f283 142 nop
DavidEGrayson 0:06475317f283 143 nop
DavidEGrayson 0:06475317f283 144 nop
DavidEGrayson 0:06475317f283 145 nop
DavidEGrayson 0:06475317f283 146 nop
DavidEGrayson 4:d3b60bd43811 147 nop
DavidEGrayson 4:d3b60bd43811 148 nop
DavidEGrayson 4:d3b60bd43811 149 nop
DavidEGrayson 4:d3b60bd43811 150 nop
DavidEGrayson 4:d3b60bd43811 151 nop
DavidEGrayson 4:d3b60bd43811 152 nop
DavidEGrayson 0:06475317f283 153
DavidEGrayson 0:06475317f283 154 nop
DavidEGrayson 0:06475317f283 155 nop
DavidEGrayson 0:06475317f283 156 nop
DavidEGrayson 0:06475317f283 157 nop
DavidEGrayson 0:06475317f283 158 nop
DavidEGrayson 0:06475317f283 159 nop
DavidEGrayson 0:06475317f283 160 nop
DavidEGrayson 0:06475317f283 161 nop
DavidEGrayson 0:06475317f283 162 nop
DavidEGrayson 0:06475317f283 163 nop
DavidEGrayson 4:d3b60bd43811 164 nop
DavidEGrayson 4:d3b60bd43811 165 nop
DavidEGrayson 4:d3b60bd43811 166 nop
DavidEGrayson 4:d3b60bd43811 167 nop
DavidEGrayson 4:d3b60bd43811 168 nop
DavidEGrayson 4:d3b60bd43811 169 nop
DavidEGrayson 0:06475317f283 170
DavidEGrayson 0:06475317f283 171 nop
DavidEGrayson 0:06475317f283 172 nop
DavidEGrayson 0:06475317f283 173 nop
DavidEGrayson 0:06475317f283 174 nop
DavidEGrayson 0:06475317f283 175 nop
DavidEGrayson 0:06475317f283 176 nop
DavidEGrayson 0:06475317f283 177 nop
DavidEGrayson 0:06475317f283 178 nop
DavidEGrayson 0:06475317f283 179 nop
DavidEGrayson 0:06475317f283 180 nop
DavidEGrayson 0:06475317f283 181 nop
DavidEGrayson 0:06475317f283 182 nop
DavidEGrayson 0:06475317f283 183 nop
DavidEGrayson 0:06475317f283 184 nop
DavidEGrayson 0:06475317f283 185 nop
DavidEGrayson 0:06475317f283 186 nop
DavidEGrayson 0:06475317f283 187
DavidEGrayson 0:06475317f283 188 nop
DavidEGrayson 0:06475317f283 189 nop
DavidEGrayson 0:06475317f283 190 nop
DavidEGrayson 0:06475317f283 191 nop
DavidEGrayson 0:06475317f283 192 nop
DavidEGrayson 0:06475317f283 193 nop
DavidEGrayson 0:06475317f283 194 nop
DavidEGrayson 0:06475317f283 195 nop
DavidEGrayson 0:06475317f283 196 nop
DavidEGrayson 0:06475317f283 197 nop
DavidEGrayson 4:d3b60bd43811 198 nop
DavidEGrayson 4:d3b60bd43811 199 nop
DavidEGrayson 4:d3b60bd43811 200 nop
DavidEGrayson 4:d3b60bd43811 201 nop
DavidEGrayson 4:d3b60bd43811 202 nop
DavidEGrayson 4:d3b60bd43811 203 nop
DavidEGrayson 4:d3b60bd43811 204
DavidEGrayson 0:06475317f283 205 nop
DavidEGrayson 0:06475317f283 206 nop
DavidEGrayson 0:06475317f283 207 nop
DavidEGrayson 0:06475317f283 208 nop
DavidEGrayson 0:06475317f283 209 nop
DavidEGrayson 0:06475317f283 210 nop
DavidEGrayson 4:d3b60bd43811 211 nop
DavidEGrayson 4:d3b60bd43811 212 nop
DavidEGrayson 4:d3b60bd43811 213 nop
DavidEGrayson 4:d3b60bd43811 214 nop
DavidEGrayson 4:d3b60bd43811 215 nop
DavidEGrayson 4:d3b60bd43811 216 nop
DavidEGrayson 4:d3b60bd43811 217 nop
DavidEGrayson 4:d3b60bd43811 218 nop
DavidEGrayson 4:d3b60bd43811 219 nop
DavidEGrayson 4:d3b60bd43811 220 nop
DavidEGrayson 5:690fdfb595de 221 delay_region_end
DavidEGrayson 4:d3b60bd43811 222 bx lr ; return
DavidEGrayson 0:06475317f283 223
DavidEGrayson 0:06475317f283 224 END