LED screen snake as an example of 48x48 panelspace working.

Dependencies:   mbed

Committer:
rsavitski
Date:
Thu Mar 22 13:20:53 2012 +0000
Revision:
0:b38330b559d4

        

Who changed what in which revision?

UserRevisionLine numberNew contents of line
rsavitski 0:b38330b559d4 1 AREA framefunc, CODE, READONLY
rsavitski 0:b38330b559d4 2 ; Export my_asm function location so that C compiler can find it and link
rsavitski 0:b38330b559d4 3 EXPORT frameout
rsavitski 0:b38330b559d4 4 frameout
rsavitski 0:b38330b559d4 5
rsavitski 0:b38330b559d4 6 ; r0 - dsVal array base address
rsavitski 0:b38330b559d4 7 ; r1 - data array base address
rsavitski 0:b38330b559d4 8 ; r2 - base address for port 0
rsavitski 0:b38330b559d4 9 ; r3 - loop counter
rsavitski 0:b38330b559d4 10 ; r4 - sclk bitmask
rsavitski 0:b38330b559d4 11 ; r5 - RGB channels bitmask
rsavitski 0:b38330b559d4 12 ; r6 - data reg 1
rsavitski 0:b38330b559d4 13 ; r7 - data reg 2
rsavitski 0:b38330b559d4 14 ; r8 - temporary value holding intensity info (used as an offset into dsVal array)
rsavitski 0:b38330b559d4 15
rsavitski 0:b38330b559d4 16
rsavitski 0:b38330b559d4 17 ; Save state
rsavitski 0:b38330b559d4 18 PUSH {R4, R5, R6, R7, R8}
rsavitski 0:b38330b559d4 19
rsavitski 0:b38330b559d4 20 ; Load GPIO Port 0 base address in register R6
rsavitski 0:b38330b559d4 21 LDR R2, =0x2009C000 ; GPIO port 0 base address
rsavitski 0:b38330b559d4 22
rsavitski 0:b38330b559d4 23 ; R3 - loop counter
rsavitski 0:b38330b559d4 24 MOV R3, #256
rsavitski 0:b38330b559d4 25
rsavitski 0:b38330b559d4 26 ; sclk mask
rsavitski 0:b38330b559d4 27 MOV R4, #0x00010000 ; sclk bitmask
rsavitski 0:b38330b559d4 28
rsavitski 0:b38330b559d4 29 LOOP
rsavitski 0:b38330b559d4 30
rsavitski 0:b38330b559d4 31 ;NOTE clocking swapped due to inverter used for logic levels
rsavitski 0:b38330b559d4 32
rsavitski 0:b38330b559d4 33 MOV R5, #0x03800000 ; bitmask for RGB bits
rsavitski 0:b38330b559d4 34 STR R4, [R2, #0x1C] ; cleark clk to clock in data (negative edge)
rsavitski 0:b38330b559d4 35
rsavitski 0:b38330b559d4 36
rsavitski 0:b38330b559d4 37 STR R5, [R2, #0x1C] ; clear RGB via FIOCLEAR
rsavitski 0:b38330b559d4 38
rsavitski 0:b38330b559d4 39 ; R channel
rsavitski 0:b38330b559d4 40 LDRB R8, [R1], #1 ; read data word (0-255 intensity) and post-increment array pointer to point to next word in data
rsavitski 0:b38330b559d4 41 LDRB R6, [R0, R8] ; loading on/off state from dsVal, pointed to by offset equal to intensity of data
rsavitski 0:b38330b559d4 42
rsavitski 0:b38330b559d4 43
rsavitski 0:b38330b559d4 44 ; G channel
rsavitski 0:b38330b559d4 45 LDRB R8, [R1], #1 ; read data word (0-255 intensity) into R8 and post-increment to point to next word in data
rsavitski 0:b38330b559d4 46 LDRB R7, [R0, R8] ; loading on/off state from dsVal, pointed to by offset equal to intensity of data
rsavitski 0:b38330b559d4 47
rsavitski 0:b38330b559d4 48 AND R7, R7, #0x2 ; pick blue channel bit
rsavitski 0:b38330b559d4 49
rsavitski 0:b38330b559d4 50 ORR R6, R7, R6, lsr #7 ; store RG bits in R6 with clever stuff in R chan
rsavitski 0:b38330b559d4 51
rsavitski 0:b38330b559d4 52 ; B channel
rsavitski 0:b38330b559d4 53 LDRB R8, [R1], #1 ; read data word (0-255 intensity) into R8 and post-increment to point to next word in data
rsavitski 0:b38330b559d4 54 LDRB R7, [R0, R8] ; loading on/off state from dsVal, pointed to by offset equal to intensity of data
rsavitski 0:b38330b559d4 55
rsavitski 0:b38330b559d4 56 AND R7, R7, #0x4 ; pick green channel bit
rsavitski 0:b38330b559d4 57
rsavitski 0:b38330b559d4 58 ; writing to output
rsavitski 0:b38330b559d4 59 ORR R6, R6, R7 ; RGB bits in R6
rsavitski 0:b38330b559d4 60
rsavitski 0:b38330b559d4 61 MOV R6, R6, lsl #23
rsavitski 0:b38330b559d4 62
rsavitski 0:b38330b559d4 63 STR R6, [R2,#0x18] ; FIOSET on/off for LED
rsavitski 0:b38330b559d4 64
rsavitski 0:b38330b559d4 65 ;SUB R1, R1, #3
rsavitski 0:b38330b559d4 66
rsavitski 0:b38330b559d4 67 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
rsavitski 0:b38330b559d4 68
rsavitski 0:b38330b559d4 69
rsavitski 0:b38330b559d4 70 MOV R5, #0x00000380 ; bitmask for RGB bits
rsavitski 0:b38330b559d4 71
rsavitski 0:b38330b559d4 72 STR R5, [R2, #0x1C] ; clear RGB via FIOCLEAR
rsavitski 0:b38330b559d4 73
rsavitski 0:b38330b559d4 74 ; R channel
rsavitski 0:b38330b559d4 75 LDRB R8, [R1], #1 ; read data word (0-255 intensity) and post-increment array pointer to point to next word in data
rsavitski 0:b38330b559d4 76 LDRB R6, [R0, R8] ; loading on/off state from dsVal, pointed to by offset equal to intensity of data
rsavitski 0:b38330b559d4 77
rsavitski 0:b38330b559d4 78
rsavitski 0:b38330b559d4 79 ; G channel
rsavitski 0:b38330b559d4 80 LDRB R8, [R1], #1 ; read data word (0-255 intensity) into R8 and post-increment to point to next word in data
rsavitski 0:b38330b559d4 81 LDRB R7, [R0, R8] ; loading on/off state from dsVal, pointed to by offset equal to intensity of data
rsavitski 0:b38330b559d4 82
rsavitski 0:b38330b559d4 83 AND R7, R7, #0x2 ; pick blue channel bit
rsavitski 0:b38330b559d4 84
rsavitski 0:b38330b559d4 85 ORR R6, R7, R6, lsr #7 ; store RG bits in R6 with clever stuff in R chan
rsavitski 0:b38330b559d4 86
rsavitski 0:b38330b559d4 87 ; B channel
rsavitski 0:b38330b559d4 88 LDRB R8, [R1], #1 ; read data word (0-255 intensity) into R8 and post-increment to point to next word in data
rsavitski 0:b38330b559d4 89 LDRB R7, [R0, R8] ; loading on/off state from dsVal, pointed to by offset equal to intensity of data
rsavitski 0:b38330b559d4 90
rsavitski 0:b38330b559d4 91 AND R7, R7, #0x4 ; pick green channel bit
rsavitski 0:b38330b559d4 92
rsavitski 0:b38330b559d4 93 ; writing to output
rsavitski 0:b38330b559d4 94 ORR R6, R6, R7 ; RGB bits in R6
rsavitski 0:b38330b559d4 95
rsavitski 0:b38330b559d4 96 MOV R6, R6, lsl #7
rsavitski 0:b38330b559d4 97
rsavitski 0:b38330b559d4 98 STR R6, [R2,#0x18] ; FIOSET on/off for LED
rsavitski 0:b38330b559d4 99
rsavitski 0:b38330b559d4 100 ;SUB R1, R1, #3
rsavitski 0:b38330b559d4 101 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
rsavitski 0:b38330b559d4 102
rsavitski 0:b38330b559d4 103
rsavitski 0:b38330b559d4 104 MOV R5, #0x00068000 ; bitmask for RGB bits
rsavitski 0:b38330b559d4 105
rsavitski 0:b38330b559d4 106 STR R5, [R2, #0x1C] ; clear RGB via FIOCLEAR
rsavitski 0:b38330b559d4 107
rsavitski 0:b38330b559d4 108 ; R channel
rsavitski 0:b38330b559d4 109 LDRB R8, [R1], #1 ; read data word (0-255 intensity) and post-increment array pointer to point to next word in data
rsavitski 0:b38330b559d4 110 LDRB R6, [R0, R8] ; loading on/off state from dsVal, pointed to by offset equal to intensity of data
rsavitski 0:b38330b559d4 111
rsavitski 0:b38330b559d4 112
rsavitski 0:b38330b559d4 113 ; G channel
rsavitski 0:b38330b559d4 114 LDRB R8, [R1], #1 ; read data word (0-255 intensity) into R8 and post-increment to point to next word in data
rsavitski 0:b38330b559d4 115 LDRB R7, [R0, R8] ; loading on/off state from dsVal, pointed to by offset equal to intensity of data
rsavitski 0:b38330b559d4 116
rsavitski 0:b38330b559d4 117 AND R7, R7, #0x4 ; pick blue channel bit
rsavitski 0:b38330b559d4 118
rsavitski 0:b38330b559d4 119 ORR R6, R7, R6, lsr #7 ; store RG bits in R6 with clever stuff in R chan
rsavitski 0:b38330b559d4 120
rsavitski 0:b38330b559d4 121 ; B channel
rsavitski 0:b38330b559d4 122 LDRB R8, [R1], #1 ; read data word (0-255 intensity) into R8 and post-increment to point to next word in data
rsavitski 0:b38330b559d4 123 LDRB R7, [R0, R8] ; loading on/off state from dsVal, pointed to by offset equal to intensity of data
rsavitski 0:b38330b559d4 124
rsavitski 0:b38330b559d4 125 AND R7, R7, #0x8 ; pick green channel bit
rsavitski 0:b38330b559d4 126
rsavitski 0:b38330b559d4 127 ; writing to output
rsavitski 0:b38330b559d4 128 ORR R6, R6, R7 ; RGB bits in R6
rsavitski 0:b38330b559d4 129
rsavitski 0:b38330b559d4 130 MOV R6, R6, lsl #15
rsavitski 0:b38330b559d4 131
rsavitski 0:b38330b559d4 132 STR R6, [R2,#0x18] ; FIOSET on/off for LED
rsavitski 0:b38330b559d4 133
rsavitski 0:b38330b559d4 134 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
rsavitski 0:b38330b559d4 135
rsavitski 0:b38330b559d4 136 SUBS R3, R3, #0x1 ; decrement loop counter
rsavitski 0:b38330b559d4 137
rsavitski 0:b38330b559d4 138 STR R4, [R2, #0x18] ; setting clock high
rsavitski 0:b38330b559d4 139
rsavitski 0:b38330b559d4 140
rsavitski 0:b38330b559d4 141 BNE LOOP
rsavitski 0:b38330b559d4 142
rsavitski 0:b38330b559d4 143 POP {R4, R5, R6, R7, R8}
rsavitski 0:b38330b559d4 144
rsavitski 0:b38330b559d4 145 BX LR
rsavitski 0:b38330b559d4 146 END