first release for keyboard
Dependencies: F401RE-USBHost2 mbed
Diff: my_wait_us_asm.s
- Revision:
- 0:eb2258e8c4b5
diff -r 000000000000 -r eb2258e8c4b5 my_wait_us_asm.s --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/my_wait_us_asm.s Wed Oct 26 02:02:09 2016 +0000 @@ -0,0 +1,197 @@ + AREA asm_func, CODE, READONLY + EXPORT my_wait_us_asm + +my_wait_us_asm + +WAIT_1_US + ; According to ARM spec, NOPs may be removed by the assembler, so they + ; are not a reliable way to eat up time. Instead we simply do empty adds + ; to eat up clock cycles. + + ; My board operates at 180 MHz. Assuming each instruction is 1 clock cycle, + ; 180 instructions should take 1 microsecond + + ADD R1, R2, #0 ; clock cycle 1 + ADD R1, R2, #0 + ADD R1, R2, #0 + ADD R1, R2, #0 + ADD R1, R2, #0 + ADD R1, R2, #0 + ADD R1, R2, #0 + ADD R1, R2, #0 + ADD R1, R2, #0 + ADD R1, R2, #0 ; clock cycle 10 + ADD R1, R2, #0 + ADD R1, R2, #0 + ADD R1, R2, #0 + ADD R1, R2, #0 + ADD R1, R2, #0 + ADD R1, R2, #0 + ADD R1, R2, #0 + ADD R1, R2, #0 + ADD R1, R2, #0 + ADD R1, R2, #0 ; clock cycle 20 + ADD R1, R2, #0 + ADD R1, R2, #0 + ADD R1, R2, #0 + ADD R1, R2, #0 + ADD R1, R2, #0 + ADD R1, R2, #0 + ADD R1, R2, #0 + ADD R1, R2, #0 + ADD R1, R2, #0 + ADD R1, R2, #0 ; clock cycle 20 + ADD R1, R2, #0 + ADD R1, R2, #0 + ADD R1, R2, #0 + ADD R1, R2, #0 + ADD R1, R2, #0 + ADD R1, R2, #0 + ADD R1, R2, #0 + ADD R1, R2, #0 + ADD R1, R2, #0 + ADD R1, R2, #0 ; clock cycle 30 + ADD R1, R2, #0 + ADD R1, R2, #0 + ADD R1, R2, #0 + ADD R1, R2, #0 + ADD R1, R2, #0 + ADD R1, R2, #0 + ADD R1, R2, #0 + ADD R1, R2, #0 + ADD R1, R2, #0 + ADD R1, R2, #0 ; clock cycle 50 + ADD R1, R2, #0 + ADD R1, R2, #0 + ADD R1, R2, #0 + ADD R1, R2, #0 + ADD R1, R2, #0 + ADD R1, R2, #0 + ADD R1, R2, #0 + ADD R1, R2, #0 + ADD R1, R2, #0 + ADD R1, R2, #0 ; clock cycle 60 + ADD R1, R2, #0 + ADD R1, R2, #0 + ADD R1, R2, #0 + ADD R1, R2, #0 + ADD R1, R2, #0 + ADD R1, R2, #0 + ADD R1, R2, #0 + ADD R1, R2, #0 + ADD R1, R2, #0 + ADD R1, R2, #0 ; clock cycle 70 + ADD R1, R2, #0 + ADD R1, R2, #0 + ADD R1, R2, #0 + ADD R1, R2, #0 + ADD R1, R2, #0 + ADD R1, R2, #0 + ADD R1, R2, #0 + ADD R1, R2, #0 + ADD R1, R2, #0 + ADD R1, R2, #0 ; clock cycle 80 + ADD R1, R2, #0 + ADD R1, R2, #0 + ADD R1, R2, #0 + ADD R1, R2, #0 + ADD R1, R2, #0 + ADD R1, R2, #0 + ADD R1, R2, #0 + ADD R1, R2, #0 + ADD R1, R2, #0 + ADD R1, R2, #0 ; clock cycle 90 + ADD R1, R2, #0 + ADD R1, R2, #0 + ADD R1, R2, #0 + ADD R1, R2, #0 + ADD R1, R2, #0 + ADD R1, R2, #0 + ADD R1, R2, #0 + ADD R1, R2, #0 + ADD R1, R2, #0 + ADD R1, R2, #0 ; clock cycle 100 + ADD R1, R2, #0 + ADD R1, R2, #0 + ADD R1, R2, #0 + ADD R1, R2, #0 + ADD R1, R2, #0 + ADD R1, R2, #0 + ADD R1, R2, #0 + ADD R1, R2, #0 + ADD R1, R2, #0 + ADD R1, R2, #0 ; clock cycle 110 + ADD R1, R2, #0 + ADD R1, R2, #0 + ADD R1, R2, #0 + ADD R1, R2, #0 + ADD R1, R2, #0 + ADD R1, R2, #0 + ADD R1, R2, #0 + ADD R1, R2, #0 + ADD R1, R2, #0 + ADD R1, R2, #0 ; clock cycle 120 + ADD R1, R2, #0 + ADD R1, R2, #0 + ADD R1, R2, #0 + ADD R1, R2, #0 + ADD R1, R2, #0 + ADD R1, R2, #0 + ADD R1, R2, #0 + ADD R1, R2, #0 + ADD R1, R2, #0 + ADD R1, R2, #0 ; clock cycle 130 + ADD R1, R2, #0 + ADD R1, R2, #0 + ADD R1, R2, #0 + ADD R1, R2, #0 + ADD R1, R2, #0 + ADD R1, R2, #0 + ADD R1, R2, #0 + ADD R1, R2, #0 + ADD R1, R2, #0 + ADD R1, R2, #0 ; clock cycle 140 + ADD R1, R2, #0 + ADD R1, R2, #0 + ADD R1, R2, #0 + ADD R1, R2, #0 + ADD R1, R2, #0 + ADD R1, R2, #0 + ADD R1, R2, #0 + ADD R1, R2, #0 + ADD R1, R2, #0 + ADD R1, R2, #0 ; clock cycle 150 + ADD R1, R2, #0 + ADD R1, R2, #0 + ADD R1, R2, #0 + ADD R1, R2, #0 + ADD R1, R2, #0 + ADD R1, R2, #0 + ADD R1, R2, #0 + ADD R1, R2, #0 + ADD R1, R2, #0 + ADD R1, R2, #0 ; clock cycle 160 + ADD R1, R2, #0 + ADD R1, R2, #0 + ADD R1, R2, #0 + ADD R1, R2, #0 + ADD R1, R2, #0 + ADD R1, R2, #0 + ADD R1, R2, #0 + ADD R1, R2, #0 + ADD R1, R2, #0 + ADD R1, R2, #0 ; clock cycle 170 + ADD R1, R2, #0 + ADD R1, R2, #0 + ADD R1, R2, #0 + ADD R1, R2, #0 + ADD R1, R2, #0 + ADD R1, R2, #0 + ADD R1, R2, #0 + ADD R1, R2, #0 ; clock cycle 178 + + SUBS R0, R0, #1 ; clock cycle 179 + BGT WAIT_1_US ; clock cycle 180 + + BX LR ; return + END \ No newline at end of file