X-Git-Url: https://review.openocd.org/gitweb?a=blobdiff_plain;f=contrib%2Floaders%2Fflash%2Fnrf5%2Fnrf5.S;fp=contrib%2Floaders%2Fflash%2Fnrf5%2Fnrf5.S;h=53551a2c2cea7f398ea294b0caa4142fc317bd6a;hb=ec16e522bf6518f38e8923ed4f271bc9bb23c409;hp=6f7ed9ae7953757a3e8e9b408cb775b2e982434a;hpb=3c8aa12859e909b4d14162bd7578bf84571bac20;p=openocd.git diff --git a/contrib/loaders/flash/nrf5/nrf5.S b/contrib/loaders/flash/nrf5/nrf5.S index 6f7ed9ae79..53551a2c2c 100644 --- a/contrib/loaders/flash/nrf5/nrf5.S +++ b/contrib/loaders/flash/nrf5/nrf5.S @@ -35,24 +35,35 @@ .global _start _start: wait_fifo: + // Kick the watchdog str r6, [r7, #0] + // Load write pointer ldr r5, [r1, #0] + // Abort if it is NULL cmp r5, #0 beq.n exit + // Load read pointer ldr r4, [r1, #4] + // Continue waiting if it equals the write pointer cmp r4, r5 beq.n wait_fifo + // Copy one word from buffer to target, and increment pointers ldmia r4!, {r5} stmia r3!, {r5} + // If at end of buffer, wrap back to buffer start cmp r4, r2 bcc.n no_wrap mov r4, r1 adds r4, #8 no_wrap: + // Update read pointer inside the buffer str r4, [r1, #4] + // Deduce the word transferred from the byte count subs r0, #4 + // Start again bne.n wait_fifo exit: + // Wait for OpenOCD bkpt #0x00 .pool