![](/media/cache/img/default_profile.jpg.50x50_q85.jpg)
This allows an LPC1768 to take Art-Net data and send it to WS2812B LED's
Dependencies: mbed mbed-rtos EthernetInterface
NeoStrip/NeoCore.s@15:c730bd607d9a, 2018-12-26 (annotated)
- Committer:
- tonydbeck
- Date:
- Wed Dec 26 21:05:02 2018 +0000
- Revision:
- 15:c730bd607d9a
Full Working Version - December 18
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
tonydbeck | 15:c730bd607d9a | 1 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
tonydbeck | 15:c730bd607d9a | 2 | ; NeoCore.s |
tonydbeck | 15:c730bd607d9a | 3 | ; |
tonydbeck | 15:c730bd607d9a | 4 | ; Allen Wild |
tonydbeck | 15:c730bd607d9a | 5 | ; March 2014 |
tonydbeck | 15:c730bd607d9a | 6 | ; |
tonydbeck | 15:c730bd607d9a | 7 | ; ARM assembly functions for writing to Adafruit NeoPixels |
tonydbeck | 15:c730bd607d9a | 8 | ; with the mbed NXP LPC1768 |
tonydbeck | 15:c730bd607d9a | 9 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
tonydbeck | 15:c730bd607d9a | 10 | AREA neo_core, CODE, READONLY |
tonydbeck | 15:c730bd607d9a | 11 | |
tonydbeck | 15:c730bd607d9a | 12 | IMPORT neo_fio_reg |
tonydbeck | 15:c730bd607d9a | 13 | IMPORT neo_bitmask |
tonydbeck | 15:c730bd607d9a | 14 | |
tonydbeck | 15:c730bd607d9a | 15 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
tonydbeck | 15:c730bd607d9a | 16 | neo_write_pin |
tonydbeck | 15:c730bd607d9a | 17 | ; Set the GPIO pin to the value passed in R0 |
tonydbeck | 15:c730bd607d9a | 18 | ; Registers and bitmasks are stored in variables set by the C++ library |
tonydbeck | 15:c730bd607d9a | 19 | LDR R1, =neo_fio_reg ; load pointers to register values |
tonydbeck | 15:c730bd607d9a | 20 | LDR R2, =neo_bitmask |
tonydbeck | 15:c730bd607d9a | 21 | LDR R1, [R1] ; load actual values from memory |
tonydbeck | 15:c730bd607d9a | 22 | LDR R2, [R2] |
tonydbeck | 15:c730bd607d9a | 23 | |
tonydbeck | 15:c730bd607d9a | 24 | CMP R0, #0 ; VALUE == 0 ? |
tonydbeck | 15:c730bd607d9a | 25 | ITE EQ ; (IF-THEN-ELSE) ON NEXT TWO INSTRUCTIONS USING "EQ" FLAG |
tonydbeck | 15:c730bd607d9a | 26 | STREQ R2, [R1,#0x1C] ; if==0, CLEAR BIT |
tonydbeck | 15:c730bd607d9a | 27 | STRNE R2, [R1,#0x18] ; if==1, SET BIT |
tonydbeck | 15:c730bd607d9a | 28 | BX LR |
tonydbeck | 15:c730bd607d9a | 29 | |
tonydbeck | 15:c730bd607d9a | 30 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
tonydbeck | 15:c730bd607d9a | 31 | neo_zero |
tonydbeck | 15:c730bd607d9a | 32 | ; Output a NeoPixel zero, composed of a short |
tonydbeck | 15:c730bd607d9a | 33 | ; HIGH pulse and a long LOW pulse |
tonydbeck | 15:c730bd607d9a | 34 | PUSH {LR} |
tonydbeck | 15:c730bd607d9a | 35 | MOV R0, #1 |
tonydbeck | 15:c730bd607d9a | 36 | BL neo_write_pin ; set pin high |
tonydbeck | 15:c730bd607d9a | 37 | |
tonydbeck | 15:c730bd607d9a | 38 | MOV R0, #10 ; delay for long enough |
tonydbeck | 15:c730bd607d9a | 39 | BL neo_delay |
tonydbeck | 15:c730bd607d9a | 40 | |
tonydbeck | 15:c730bd607d9a | 41 | MOV R0, #0 ; set pin low |
tonydbeck | 15:c730bd607d9a | 42 | BL neo_write_pin |
tonydbeck | 15:c730bd607d9a | 43 | |
tonydbeck | 15:c730bd607d9a | 44 | MOV R0, #20 ; delay |
tonydbeck | 15:c730bd607d9a | 45 | BL neo_delay |
tonydbeck | 15:c730bd607d9a | 46 | |
tonydbeck | 15:c730bd607d9a | 47 | POP {LR} |
tonydbeck | 15:c730bd607d9a | 48 | BX LR |
tonydbeck | 15:c730bd607d9a | 49 | |
tonydbeck | 15:c730bd607d9a | 50 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
tonydbeck | 15:c730bd607d9a | 51 | neo_one |
tonydbeck | 15:c730bd607d9a | 52 | ; Output a NeoPixel one, composed of a long |
tonydbeck | 15:c730bd607d9a | 53 | ; HIGH pulse and a short LOW pulse |
tonydbeck | 15:c730bd607d9a | 54 | PUSH {LR} |
tonydbeck | 15:c730bd607d9a | 55 | MOV R0, #1 |
tonydbeck | 15:c730bd607d9a | 56 | BL neo_write_pin |
tonydbeck | 15:c730bd607d9a | 57 | |
tonydbeck | 15:c730bd607d9a | 58 | MOV R0, #86 |
tonydbeck | 15:c730bd607d9a | 59 | BL neo_delay |
tonydbeck | 15:c730bd607d9a | 60 | |
tonydbeck | 15:c730bd607d9a | 61 | MOV R0, #0 |
tonydbeck | 15:c730bd607d9a | 62 | BL neo_write_pin |
tonydbeck | 15:c730bd607d9a | 63 | |
tonydbeck | 15:c730bd607d9a | 64 | NOP ; really short delay |
tonydbeck | 15:c730bd607d9a | 65 | NOP |
tonydbeck | 15:c730bd607d9a | 66 | NOP |
tonydbeck | 15:c730bd607d9a | 67 | |
tonydbeck | 15:c730bd607d9a | 68 | POP {LR} |
tonydbeck | 15:c730bd607d9a | 69 | BX LR |
tonydbeck | 15:c730bd607d9a | 70 | |
tonydbeck | 15:c730bd607d9a | 71 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
tonydbeck | 15:c730bd607d9a | 72 | EXPORT neo_out ; void neo_out(int *data, int n); |
tonydbeck | 15:c730bd607d9a | 73 | ; Main function called from the C++ library |
tonydbeck | 15:c730bd607d9a | 74 | ; R0 contains a pointer to the array of color data to send |
tonydbeck | 15:c730bd607d9a | 75 | ; R1 contains the number of bytes of data to send |
tonydbeck | 15:c730bd607d9a | 76 | neo_out |
tonydbeck | 15:c730bd607d9a | 77 | PUSH {LR, R4, R5, R6, R7, R8} |
tonydbeck | 15:c730bd607d9a | 78 | MOV R7, R1 ; move length to R7 |
tonydbeck | 15:c730bd607d9a | 79 | MOV R6, R0 ; move address to R6 |
tonydbeck | 15:c730bd607d9a | 80 | |
tonydbeck | 15:c730bd607d9a | 81 | neo_byteloop |
tonydbeck | 15:c730bd607d9a | 82 | LDRB R5, [R6] ; load byte to send |
tonydbeck | 15:c730bd607d9a | 83 | MOV R4, #0x80 ; load initial bitmask |
tonydbeck | 15:c730bd607d9a | 84 | |
tonydbeck | 15:c730bd607d9a | 85 | neo_bitloop |
tonydbeck | 15:c730bd607d9a | 86 | AND R3, R5, R4 ; mask current byte |
tonydbeck | 15:c730bd607d9a | 87 | CMP R3, #0 |
tonydbeck | 15:c730bd607d9a | 88 | BLEQ neo_zero ; send current bit |
tonydbeck | 15:c730bd607d9a | 89 | BLNE neo_one |
tonydbeck | 15:c730bd607d9a | 90 | |
tonydbeck | 15:c730bd607d9a | 91 | LSR R4, R4, #1 ; shift bitmask right one |
tonydbeck | 15:c730bd607d9a | 92 | CMP R4, #0 ; if still more bits, loop back |
tonydbeck | 15:c730bd607d9a | 93 | BNE neo_bitloop |
tonydbeck | 15:c730bd607d9a | 94 | |
tonydbeck | 15:c730bd607d9a | 95 | ADD R6, R6, #1 ; increment address |
tonydbeck | 15:c730bd607d9a | 96 | SUB R7, R7, #1 ; decrement count |
tonydbeck | 15:c730bd607d9a | 97 | CMP R7, #0 |
tonydbeck | 15:c730bd607d9a | 98 | BNE neo_byteloop ; continue if not done |
tonydbeck | 15:c730bd607d9a | 99 | |
tonydbeck | 15:c730bd607d9a | 100 | MOV R0, #0 |
tonydbeck | 15:c730bd607d9a | 101 | BL neo_write_pin |
tonydbeck | 15:c730bd607d9a | 102 | POP {R8, R7, R6, R5, R4, LR} |
tonydbeck | 15:c730bd607d9a | 103 | BX LR |
tonydbeck | 15:c730bd607d9a | 104 | |
tonydbeck | 15:c730bd607d9a | 105 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
tonydbeck | 15:c730bd607d9a | 106 | |
tonydbeck | 15:c730bd607d9a | 107 | neo_delay |
tonydbeck | 15:c730bd607d9a | 108 | ; delay the specified number of cycles in R0 with a bunch of nops |
tonydbeck | 15:c730bd607d9a | 109 | LDR R2, =neo_delay_end |
tonydbeck | 15:c730bd607d9a | 110 | SUB R2, R2, R0 |
tonydbeck | 15:c730bd607d9a | 111 | BX R2 |
tonydbeck | 15:c730bd607d9a | 112 | NOP |
tonydbeck | 15:c730bd607d9a | 113 | NOP |
tonydbeck | 15:c730bd607d9a | 114 | NOP |
tonydbeck | 15:c730bd607d9a | 115 | NOP |
tonydbeck | 15:c730bd607d9a | 116 | NOP |
tonydbeck | 15:c730bd607d9a | 117 | NOP |
tonydbeck | 15:c730bd607d9a | 118 | NOP |
tonydbeck | 15:c730bd607d9a | 119 | NOP |
tonydbeck | 15:c730bd607d9a | 120 | NOP |
tonydbeck | 15:c730bd607d9a | 121 | NOP |
tonydbeck | 15:c730bd607d9a | 122 | NOP |
tonydbeck | 15:c730bd607d9a | 123 | NOP |
tonydbeck | 15:c730bd607d9a | 124 | NOP |
tonydbeck | 15:c730bd607d9a | 125 | NOP |
tonydbeck | 15:c730bd607d9a | 126 | NOP |
tonydbeck | 15:c730bd607d9a | 127 | NOP |
tonydbeck | 15:c730bd607d9a | 128 | NOP |
tonydbeck | 15:c730bd607d9a | 129 | NOP |
tonydbeck | 15:c730bd607d9a | 130 | NOP |
tonydbeck | 15:c730bd607d9a | 131 | NOP |
tonydbeck | 15:c730bd607d9a | 132 | NOP |
tonydbeck | 15:c730bd607d9a | 133 | NOP |
tonydbeck | 15:c730bd607d9a | 134 | NOP |
tonydbeck | 15:c730bd607d9a | 135 | NOP |
tonydbeck | 15:c730bd607d9a | 136 | NOP |
tonydbeck | 15:c730bd607d9a | 137 | NOP |
tonydbeck | 15:c730bd607d9a | 138 | NOP |
tonydbeck | 15:c730bd607d9a | 139 | NOP |
tonydbeck | 15:c730bd607d9a | 140 | NOP |
tonydbeck | 15:c730bd607d9a | 141 | NOP |
tonydbeck | 15:c730bd607d9a | 142 | NOP |
tonydbeck | 15:c730bd607d9a | 143 | NOP |
tonydbeck | 15:c730bd607d9a | 144 | NOP |
tonydbeck | 15:c730bd607d9a | 145 | NOP |
tonydbeck | 15:c730bd607d9a | 146 | NOP |
tonydbeck | 15:c730bd607d9a | 147 | NOP |
tonydbeck | 15:c730bd607d9a | 148 | NOP |
tonydbeck | 15:c730bd607d9a | 149 | NOP |
tonydbeck | 15:c730bd607d9a | 150 | NOP |
tonydbeck | 15:c730bd607d9a | 151 | NOP |
tonydbeck | 15:c730bd607d9a | 152 | NOP |
tonydbeck | 15:c730bd607d9a | 153 | NOP |
tonydbeck | 15:c730bd607d9a | 154 | NOP |
tonydbeck | 15:c730bd607d9a | 155 | NOP |
tonydbeck | 15:c730bd607d9a | 156 | NOP |
tonydbeck | 15:c730bd607d9a | 157 | NOP |
tonydbeck | 15:c730bd607d9a | 158 | NOP |
tonydbeck | 15:c730bd607d9a | 159 | NOP |
tonydbeck | 15:c730bd607d9a | 160 | NOP |
tonydbeck | 15:c730bd607d9a | 161 | NOP |
tonydbeck | 15:c730bd607d9a | 162 | NOP |
tonydbeck | 15:c730bd607d9a | 163 | NOP |
tonydbeck | 15:c730bd607d9a | 164 | NOP |
tonydbeck | 15:c730bd607d9a | 165 | NOP |
tonydbeck | 15:c730bd607d9a | 166 | NOP |
tonydbeck | 15:c730bd607d9a | 167 | NOP |
tonydbeck | 15:c730bd607d9a | 168 | NOP |
tonydbeck | 15:c730bd607d9a | 169 | NOP |
tonydbeck | 15:c730bd607d9a | 170 | NOP |
tonydbeck | 15:c730bd607d9a | 171 | NOP |
tonydbeck | 15:c730bd607d9a | 172 | NOP |
tonydbeck | 15:c730bd607d9a | 173 | NOP |
tonydbeck | 15:c730bd607d9a | 174 | NOP |
tonydbeck | 15:c730bd607d9a | 175 | NOP |
tonydbeck | 15:c730bd607d9a | 176 | NOP |
tonydbeck | 15:c730bd607d9a | 177 | NOP |
tonydbeck | 15:c730bd607d9a | 178 | NOP |
tonydbeck | 15:c730bd607d9a | 179 | NOP |
tonydbeck | 15:c730bd607d9a | 180 | NOP |
tonydbeck | 15:c730bd607d9a | 181 | NOP |
tonydbeck | 15:c730bd607d9a | 182 | NOP |
tonydbeck | 15:c730bd607d9a | 183 | NOP |
tonydbeck | 15:c730bd607d9a | 184 | NOP |
tonydbeck | 15:c730bd607d9a | 185 | NOP |
tonydbeck | 15:c730bd607d9a | 186 | NOP |
tonydbeck | 15:c730bd607d9a | 187 | NOP |
tonydbeck | 15:c730bd607d9a | 188 | NOP |
tonydbeck | 15:c730bd607d9a | 189 | NOP |
tonydbeck | 15:c730bd607d9a | 190 | NOP |
tonydbeck | 15:c730bd607d9a | 191 | NOP |
tonydbeck | 15:c730bd607d9a | 192 | NOP |
tonydbeck | 15:c730bd607d9a | 193 | NOP |
tonydbeck | 15:c730bd607d9a | 194 | NOP |
tonydbeck | 15:c730bd607d9a | 195 | NOP |
tonydbeck | 15:c730bd607d9a | 196 | NOP |
tonydbeck | 15:c730bd607d9a | 197 | NOP |
tonydbeck | 15:c730bd607d9a | 198 | NOP |
tonydbeck | 15:c730bd607d9a | 199 | NOP |
tonydbeck | 15:c730bd607d9a | 200 | NOP |
tonydbeck | 15:c730bd607d9a | 201 | NOP |
tonydbeck | 15:c730bd607d9a | 202 | NOP |
tonydbeck | 15:c730bd607d9a | 203 | NOP |
tonydbeck | 15:c730bd607d9a | 204 | NOP |
tonydbeck | 15:c730bd607d9a | 205 | NOP |
tonydbeck | 15:c730bd607d9a | 206 | NOP |
tonydbeck | 15:c730bd607d9a | 207 | NOP |
tonydbeck | 15:c730bd607d9a | 208 | NOP |
tonydbeck | 15:c730bd607d9a | 209 | NOP |
tonydbeck | 15:c730bd607d9a | 210 | NOP |
tonydbeck | 15:c730bd607d9a | 211 | NOP |
tonydbeck | 15:c730bd607d9a | 212 | neo_delay_end |
tonydbeck | 15:c730bd607d9a | 213 | BX LR |
tonydbeck | 15:c730bd607d9a | 214 | |
tonydbeck | 15:c730bd607d9a | 215 | END ; end code region |
tonydbeck | 15:c730bd607d9a | 216 | |
tonydbeck | 15:c730bd607d9a | 217 | |
tonydbeck | 15:c730bd607d9a | 218 |