nucleo version
Fork of PololuLedStrip by
led_strip_write_color.s@22:7a2bda46a606, 2014-12-24 (annotated)
- Committer:
- michaeljkoster
- Date:
- Wed Dec 24 18:15:59 2014 +0000
- Revision:
- 22:7a2bda46a606
- Parent:
- 21:87fd6273e0ff
- Child:
- 23:aa89fb2a5769
ST Nucleo F411RE changes and tweaks
Who changed what in which revision?
User | Revision | Line number | New 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 | 22:7a2bda46a606 | 60 | nop |
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 | |
DavidEGrayson | 0:06475317f283 | 91 | |
DavidEGrayson | 9:6ffb85d69eaf | 92 | ldr r4, =0x80000000 |
DavidEGrayson | 9:6ffb85d69eaf | 93 | tst r6, r4 |
DavidEGrayson | 19:46d7ab0ba3e7 | 94 | bne delay0 |
DavidEGrayson | 12:b6df8ac053c8 | 95 | str r3, [r2] ; If the bit to send it 0, drive the line low. |
DavidEGrayson | 19:46d7ab0ba3e7 | 96 | delay0 |
DavidEGrayson | 0:06475317f283 | 97 | |
DavidEGrayson | 19:46d7ab0ba3e7 | 98 | delay #0 |
DavidEGrayson | 0:06475317f283 | 99 | |
DavidEGrayson | 21:87fd6273e0ff | 100 | tst r6, r8 |
DavidEGrayson | 9:6ffb85d69eaf | 101 | ldr r4, =0x80000000 |
DavidEGrayson | 9:6ffb85d69eaf | 102 | tst r6, r4 |
DavidEGrayson | 19:46d7ab0ba3e7 | 103 | beq delay1 |
DavidEGrayson | 12:b6df8ac053c8 | 104 | str r3, [r2] ; If the bit to send is 1, drive the line low. |
DavidEGrayson | 19:46d7ab0ba3e7 | 105 | delay1 |
DavidEGrayson | 0:06475317f283 | 106 | |
DavidEGrayson | 19:46d7ab0ba3e7 | 107 | delay #1 |
DavidEGrayson | 4:d3b60bd43811 | 108 | |
DavidEGrayson | 12:b6df8ac053c8 | 109 | lsls r6, r6, #1 ; Shift color bits. |
DavidEGrayson | 6:9d0530b7dae2 | 110 | subs r7, r7, #1 ; Decrement the loop counter. |
DavidEGrayson | 12:b6df8ac053c8 | 111 | bne send_led_strip_bit ; Send another bit if we have not reached zero. |
DavidEGrayson | 12:b6df8ac053c8 | 112 | pop {r4, r5, r6, r7, pc} ; Otherwise, restore the registers and return. |
DavidEGrayson | 19:46d7ab0ba3e7 | 113 | bx lr; |
DavidEGrayson | 4:d3b60bd43811 | 114 | |
DavidEGrayson | 4:d3b60bd43811 | 115 | delay_region |
DavidEGrayson | 5:690fdfb595de | 116 | ; The following is 128 nops. |
DavidEGrayson | 0:06475317f283 | 117 | nop |
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 | 4:d3b60bd43811 | 130 | nop |
DavidEGrayson | 4:d3b60bd43811 | 131 | nop |
DavidEGrayson | 4:d3b60bd43811 | 132 | nop |
DavidEGrayson | 4:d3b60bd43811 | 133 | |
DavidEGrayson | 0:06475317f283 | 134 | nop |
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 | 4:d3b60bd43811 | 150 | |
DavidEGrayson | 0:06475317f283 | 151 | nop |
DavidEGrayson | 0:06475317f283 | 152 | nop |
DavidEGrayson | 0:06475317f283 | 153 | nop |
DavidEGrayson | 0:06475317f283 | 154 | nop |
DavidEGrayson | 4:d3b60bd43811 | 155 | nop |
DavidEGrayson | 4:d3b60bd43811 | 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 | 0:06475317f283 | 164 | nop |
DavidEGrayson | 0:06475317f283 | 165 | nop |
DavidEGrayson | 0:06475317f283 | 166 | nop |
DavidEGrayson | 0:06475317f283 | 167 | |
DavidEGrayson | 0:06475317f283 | 168 | nop |
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 | 4:d3b60bd43811 | 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 | 0:06475317f283 | 184 | |
DavidEGrayson | 0:06475317f283 | 185 | nop |
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 | 4:d3b60bd43811 | 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 | 0:06475317f283 | 201 | |
DavidEGrayson | 0:06475317f283 | 202 | nop |
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 | |
DavidEGrayson | 0:06475317f283 | 219 | nop |
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 | 4:d3b60bd43811 | 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 | |
DavidEGrayson | 0:06475317f283 | 236 | nop |
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 | 4:d3b60bd43811 | 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 | 5:690fdfb595de | 252 | delay_region_end |
DavidEGrayson | 4:d3b60bd43811 | 253 | bx lr ; return |
DavidEGrayson | 0:06475317f283 | 254 | |
DavidEGrayson | 0:06475317f283 | 255 | END |