Код: Выделить всё
//void DMA2_Channel3_IRQHandler()
//{
DMA2_Channel3_IRQHandler:
PUSH {R4-R7,LR}
// TEST_PIN::set(); __NOP();
LDR.N R2,??DMA2_Channel3_IRQHandler_0 ;; 0x48000818
MOVS R0,#+128
STR R0,[R2, #+0]
Nop
// uint32_t isr = DMA2->ISR;
LDR.N R3,??DMA2_Channel3_IRQHandler_0+0x4 ;; 0x40020400
LDR R1,[R3, #+0]
// DMA2->IFCR = isr;
STR R1,[R3, #+4]
// uint32_t tmp = DMA2_Channel2->CNDTR;
LDR R0,[R3, #+32]
// if(STOP_STATE stop; tmp<STRIP_LEN)
CMP R0,#+144
BCS.N ??DMA2_Channel3_IRQHandler_1
// dma_pwm_buf[isr&DMA_ISR_HTIF3?0:1] = leds[tmp++];
LDR.N R5,??DMA2_Channel3_IRQHandler_0+0x8
LDR.N R6,??DMA2_Channel3_IRQHandler_0+0xC
LDR.N R7,??DMA2_Channel3_IRQHandler_0+0x10
ADDS R4,R0,#+1
ADD R0,R5,R0, LSL #+2
LDRB LR,[R0, #+1]
LDRB R12,[R0, #+2]
LDRB R5,[R0, #+3]
LDRB R0,[R0, #+0]
LSLS R1,R1,#+21
ITE MI
MOVMI R1,#+0
MOVPL R1,#+32
ADD R6,R6,R1
ADD R1,R7,R0, LSL #+3
ADD LR,R7,LR, LSL #+3
LDRD R0,R1,[R1, #+0]
STRD R0,R1,[R6, #+0]
LDRD R0,R1,[LR, #+0]
STRD R0,R1,[R6, #+8]
ADD R0,R7,R12, LSL #+3
LDRD R0,R1,[R0, #+0]
STRD R0,R1,[R6, #+16]
ADD R1,R7,R5, LSL #+3
LDRD R0,R1,[R1, #+0]
STRD R0,R1,[R6, #+24]
// DMA2_Channel2->CNDTR = tmp;
STR R4,[R3, #+32]
// TEST_PIN::clear();
MOVS R0,#+128
STRH R0,[R2, #+2]
POP {R4-R7,PC} ;; return
// else
// {
// dma_pwm_buf[isr&DMA_ISR_HTIF3?0:1] = stop;
??DMA2_Channel3_IRQHandler_1:
LSLS R1,R1,#+21
ITE MI
MOVMI R1,#+0
MOVPL R1,#+32
LDR.N R4,??DMA2_Channel3_IRQHandler_0+0xC
ADD R1,R4,R1
MOVS R6,#+0
STRD R6,R6,[R1, #+0]
STRD R6,R6,[R1, #+8]
STRD R6,R6,[R1, #+16]
STRD R6,R6,[R1, #+24]
// tmp++;
ADDS R4,R0,#+1
// }
// DMA2_Channel2->CNDTR = tmp;
STR R4,[R3, #+32]
// TEST_PIN::clear();
MOVS R0,#+128
STRH R0,[R2, #+2]
POP {R4-R7,PC} ;; return