nucleo version

Fork of PololuLedStrip by David Grayson

Committer:
michaeljkoster
Date:
Wed Dec 24 19:01:54 2014 +0000
Revision:
23:aa89fb2a5769
Parent:
22:7a2bda46a606
Updates for Nucleo F411RE

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 7:9a088f042ee0 9 ldr r4, =delay_region_end
DavidEGrayson 9:6ffb85d69eaf 10 subs r4, r4, r5
DavidEGrayson 7:9a088f042ee0 11 blx r4
DavidEGrayson 7:9a088f042ee0 12 MEND
DavidEGrayson 7:9a088f042ee0 13
DavidEGrayson 0:06475317f283 14 led_strip_write_color
DavidEGrayson 5:690fdfb595de 15 ; Register usage:
DavidEGrayson 5:690fdfb595de 16 ; These are the first 4 arguments to the method:
DavidEGrayson 5:690fdfb595de 17 ; R0: pointer to the color to send
DavidEGrayson 5:690fdfb595de 18 ; R1: pointer to the register for setting the pin
DavidEGrayson 5:690fdfb595de 19 ; R2: pointer to the register for clearing the pin
DavidEGrayson 5:690fdfb595de 20 ; R3: pin mask
DavidEGrayson 5:690fdfb595de 21 ; Additionally, we use these registers:
DavidEGrayson 5:690fdfb595de 22 ; R4: temporary register
DavidEGrayson 6:9d0530b7dae2 23 ; R5: temporary register
DavidEGrayson 20:656bbcb64e3b 24 ; R6: shift register that holds the 24-bit color
DavidEGrayson 5:690fdfb595de 25 ; R7: the number of bits we still need to send
DavidEGrayson 5:690fdfb595de 26 ; R13: Link Register, holds return addresses.
DavidEGrayson 7:9a088f042ee0 27
DavidEGrayson 9:6ffb85d69eaf 28 ; Push those registers so we can restore them later.
DavidEGrayson 11:e00ba70ac54c 29 push {r4, r5, r6, r7, lr}
DavidEGrayson 10:f1bb84b97788 30
DavidEGrayson 20:656bbcb64e3b 31 ldrb r6, [r0, #1] ; Load green.
DavidEGrayson 20:656bbcb64e3b 32 lsls r6, r6, #24 ; Put green in MSB of r6.
DavidEGrayson 9:6ffb85d69eaf 33 ldrb r4, [r0, #0] ; Load red.
DavidEGrayson 9:6ffb85d69eaf 34 lsls r4, r4, #16
DavidEGrayson 20:656bbcb64e3b 35 orrs r6, r6, r4 ; Put red in r6.
DavidEGrayson 9:6ffb85d69eaf 36 ldrb r4, [r0, #2] ; Load blue.
DavidEGrayson 9:6ffb85d69eaf 37 lsls r4, r4, #8
DavidEGrayson 21:87fd6273e0ff 38 orrs r6, r6, r4 ; Put blue in r6.
DavidEGrayson 9:6ffb85d69eaf 39
DavidEGrayson 21:87fd6273e0ff 40 ; On the Cortex-M3 we simply did:
DavidEGrayson 9:6ffb85d69eaf 41 ; ldr r6, [r0] ; Read the color. Now we have: xxBbGgRr
DavidEGrayson 9:6ffb85d69eaf 42 ; rbit r6, r6 ; Reverse the order of the bits: rRgGbBxx
DavidEGrayson 9:6ffb85d69eaf 43 ; rev r6, r6 ; Reverse the order of the bytes: xxbBgGrR
DavidEGrayson 9:6ffb85d69eaf 44 ; and then we used rrxs for shifting to the right through carry.
DavidEGrayson 9:6ffb85d69eaf 45
DavidEGrayson 9:6ffb85d69eaf 46 ldr r7, =24 ; Initialize the loop counter register.
DavidEGrayson 0:06475317f283 47
DavidEGrayson 0:06475317f283 48 send_led_strip_bit
DavidEGrayson 0:06475317f283 49 str r3, [r1] ; Drive the line high.
DavidEGrayson 0:06475317f283 50
DavidEGrayson 19:46d7ab0ba3e7 51 ; It doesn't really matter exactly how long we delay here as long as it is
DavidEGrayson 19:46d7ab0ba3e7 52 ; less than 540 microseconds.
DavidEGrayson 19:46d7ab0ba3e7 53 nop
DavidEGrayson 19:46d7ab0ba3e7 54 nop
DavidEGrayson 19:46d7ab0ba3e7 55 nop
DavidEGrayson 19:46d7ab0ba3e7 56 nop
DavidEGrayson 19:46d7ab0ba3e7 57 nop
DavidEGrayson 19:46d7ab0ba3e7 58 nop
michaeljkoster 22:7a2bda46a606 59
michaeljkoster 23:aa89fb2a5769 60 ; More delay for longer 1H pulse F411RE
michaeljkoster 22:7a2bda46a606 61 nop
michaeljkoster 22:7a2bda46a606 62 nop
michaeljkoster 22:7a2bda46a606 63 nop
michaeljkoster 22:7a2bda46a606 64 nop
michaeljkoster 22:7a2bda46a606 65 nop
michaeljkoster 22:7a2bda46a606 66 nop
michaeljkoster 22:7a2bda46a606 67 nop
michaeljkoster 22:7a2bda46a606 68 nop
michaeljkoster 22:7a2bda46a606 69 nop
michaeljkoster 22:7a2bda46a606 70 nop
michaeljkoster 22:7a2bda46a606 71 nop
michaeljkoster 22:7a2bda46a606 72 nop
michaeljkoster 22:7a2bda46a606 73 nop
michaeljkoster 22:7a2bda46a606 74 nop
michaeljkoster 22:7a2bda46a606 75 nop
michaeljkoster 22:7a2bda46a606 76 nop
michaeljkoster 22:7a2bda46a606 77 nop
michaeljkoster 22:7a2bda46a606 78 nop
michaeljkoster 22:7a2bda46a606 79 nop
michaeljkoster 22:7a2bda46a606 80 nop
michaeljkoster 22:7a2bda46a606 81 nop
michaeljkoster 22:7a2bda46a606 82 nop
michaeljkoster 22:7a2bda46a606 83 nop
michaeljkoster 22:7a2bda46a606 84 nop
michaeljkoster 22:7a2bda46a606 85 nop
michaeljkoster 22:7a2bda46a606 86 nop
michaeljkoster 22:7a2bda46a606 87 nop
michaeljkoster 22:7a2bda46a606 88 nop
michaeljkoster 22:7a2bda46a606 89 nop
michaeljkoster 22:7a2bda46a606 90 nop
michaeljkoster 22:7a2bda46a606 91
DavidEGrayson 0:06475317f283 92
DavidEGrayson 9:6ffb85d69eaf 93 ldr r4, =0x80000000
DavidEGrayson 9:6ffb85d69eaf 94 tst r6, r4
DavidEGrayson 19:46d7ab0ba3e7 95 bne delay0
DavidEGrayson 12:b6df8ac053c8 96 str r3, [r2] ; If the bit to send it 0, drive the line low.
DavidEGrayson 19:46d7ab0ba3e7 97 delay0
DavidEGrayson 0:06475317f283 98
DavidEGrayson 19:46d7ab0ba3e7 99 delay #0
DavidEGrayson 0:06475317f283 100
DavidEGrayson 21:87fd6273e0ff 101 tst r6, r8
DavidEGrayson 9:6ffb85d69eaf 102 ldr r4, =0x80000000
DavidEGrayson 9:6ffb85d69eaf 103 tst r6, r4
DavidEGrayson 19:46d7ab0ba3e7 104 beq delay1
DavidEGrayson 12:b6df8ac053c8 105 str r3, [r2] ; If the bit to send is 1, drive the line low.
DavidEGrayson 19:46d7ab0ba3e7 106 delay1
DavidEGrayson 0:06475317f283 107
DavidEGrayson 19:46d7ab0ba3e7 108 delay #1
DavidEGrayson 4:d3b60bd43811 109
DavidEGrayson 12:b6df8ac053c8 110 lsls r6, r6, #1 ; Shift color bits.
DavidEGrayson 6:9d0530b7dae2 111 subs r7, r7, #1 ; Decrement the loop counter.
DavidEGrayson 12:b6df8ac053c8 112 bne send_led_strip_bit ; Send another bit if we have not reached zero.
DavidEGrayson 12:b6df8ac053c8 113 pop {r4, r5, r6, r7, pc} ; Otherwise, restore the registers and return.
DavidEGrayson 19:46d7ab0ba3e7 114 bx lr;
DavidEGrayson 4:d3b60bd43811 115
DavidEGrayson 4:d3b60bd43811 116 delay_region
DavidEGrayson 5:690fdfb595de 117 ; The following is 128 nops.
DavidEGrayson 0:06475317f283 118 nop
DavidEGrayson 0:06475317f283 119 nop
DavidEGrayson 0:06475317f283 120 nop
DavidEGrayson 0:06475317f283 121 nop
DavidEGrayson 0:06475317f283 122 nop
DavidEGrayson 0:06475317f283 123 nop
DavidEGrayson 0:06475317f283 124 nop
DavidEGrayson 0:06475317f283 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 4:d3b60bd43811 131 nop
DavidEGrayson 4:d3b60bd43811 132 nop
DavidEGrayson 4:d3b60bd43811 133 nop
DavidEGrayson 4:d3b60bd43811 134
DavidEGrayson 0:06475317f283 135 nop
DavidEGrayson 0:06475317f283 136 nop
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 0:06475317f283 147 nop
DavidEGrayson 0:06475317f283 148 nop
DavidEGrayson 0:06475317f283 149 nop
DavidEGrayson 0:06475317f283 150 nop
DavidEGrayson 4:d3b60bd43811 151
DavidEGrayson 0:06475317f283 152 nop
DavidEGrayson 0:06475317f283 153 nop
DavidEGrayson 0:06475317f283 154 nop
DavidEGrayson 0:06475317f283 155 nop
DavidEGrayson 4:d3b60bd43811 156 nop
DavidEGrayson 4:d3b60bd43811 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 0:06475317f283 164 nop
DavidEGrayson 0:06475317f283 165 nop
DavidEGrayson 0:06475317f283 166 nop
DavidEGrayson 0:06475317f283 167 nop
DavidEGrayson 0:06475317f283 168
DavidEGrayson 0:06475317f283 169 nop
DavidEGrayson 0:06475317f283 170 nop
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 4:d3b60bd43811 179 nop
DavidEGrayson 4:d3b60bd43811 180 nop
DavidEGrayson 4:d3b60bd43811 181 nop
DavidEGrayson 4:d3b60bd43811 182 nop
DavidEGrayson 4:d3b60bd43811 183 nop
DavidEGrayson 4:d3b60bd43811 184 nop
DavidEGrayson 0:06475317f283 185
DavidEGrayson 0:06475317f283 186 nop
DavidEGrayson 0:06475317f283 187 nop
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 4:d3b60bd43811 196 nop
DavidEGrayson 4:d3b60bd43811 197 nop
DavidEGrayson 4:d3b60bd43811 198 nop
DavidEGrayson 4:d3b60bd43811 199 nop
DavidEGrayson 4:d3b60bd43811 200 nop
DavidEGrayson 4:d3b60bd43811 201 nop
DavidEGrayson 0:06475317f283 202
DavidEGrayson 0:06475317f283 203 nop
DavidEGrayson 0:06475317f283 204 nop
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 0:06475317f283 211 nop
DavidEGrayson 0:06475317f283 212 nop
DavidEGrayson 0:06475317f283 213 nop
DavidEGrayson 0:06475317f283 214 nop
DavidEGrayson 0:06475317f283 215 nop
DavidEGrayson 0:06475317f283 216 nop
DavidEGrayson 0:06475317f283 217 nop
DavidEGrayson 0:06475317f283 218 nop
DavidEGrayson 0:06475317f283 219
DavidEGrayson 0:06475317f283 220 nop
DavidEGrayson 0:06475317f283 221 nop
DavidEGrayson 0:06475317f283 222 nop
DavidEGrayson 0:06475317f283 223 nop
DavidEGrayson 0:06475317f283 224 nop
DavidEGrayson 0:06475317f283 225 nop
DavidEGrayson 0:06475317f283 226 nop
DavidEGrayson 0:06475317f283 227 nop
DavidEGrayson 0:06475317f283 228 nop
DavidEGrayson 0:06475317f283 229 nop
DavidEGrayson 4:d3b60bd43811 230 nop
DavidEGrayson 4:d3b60bd43811 231 nop
DavidEGrayson 4:d3b60bd43811 232 nop
DavidEGrayson 4:d3b60bd43811 233 nop
DavidEGrayson 4:d3b60bd43811 234 nop
DavidEGrayson 4:d3b60bd43811 235 nop
DavidEGrayson 4:d3b60bd43811 236
DavidEGrayson 0:06475317f283 237 nop
DavidEGrayson 0:06475317f283 238 nop
DavidEGrayson 0:06475317f283 239 nop
DavidEGrayson 0:06475317f283 240 nop
DavidEGrayson 0:06475317f283 241 nop
DavidEGrayson 0:06475317f283 242 nop
DavidEGrayson 4:d3b60bd43811 243 nop
DavidEGrayson 4:d3b60bd43811 244 nop
DavidEGrayson 4:d3b60bd43811 245 nop
DavidEGrayson 4:d3b60bd43811 246 nop
DavidEGrayson 4:d3b60bd43811 247 nop
DavidEGrayson 4:d3b60bd43811 248 nop
DavidEGrayson 4:d3b60bd43811 249 nop
DavidEGrayson 4:d3b60bd43811 250 nop
DavidEGrayson 4:d3b60bd43811 251 nop
DavidEGrayson 4:d3b60bd43811 252 nop
DavidEGrayson 5:690fdfb595de 253 delay_region_end
DavidEGrayson 4:d3b60bd43811 254 bx lr ; return
DavidEGrayson 0:06475317f283 255
DavidEGrayson 0:06475317f283 256 END