void setup() {
asm(R"(
.syntax unified
.cpu cortex-m0plus
.thumb
.equ SIO_BASE, 0xd0000000
.equ SIO_DIV_SDIVIDEND_OFFSET, 0x00000068
.equ SIO_DIV_SDIVISOR_OFFSET, 0x0000006c
.equ SIO_DIV_REMAINDER_OFFSET, 0x00000074
.equ SIO_DIV_QUOTIENT_OFFSET, 0x00000070
MOVs R0, #5
MOVs R1, #5
MULs R0, R1
NEGs R1, R1 @ negates an operand
MULs R0, R1
movs r0, #0x20 // r0 = 0x20;
movs r1, #0x2 // r1 = 0x2;
ldr r3, =(SIO_BASE)
str r0, [r3, #SIO_DIV_SDIVIDEND_OFFSET]
str r1, [r3, #SIO_DIV_SDIVISOR_OFFSET]
@__divider_delay
b 1f
1: b 1f
1: b 1f
1: b 1f
1:
// return 64 bit value so we can efficiently return both (note quotient must be read last)
ldr r1, [r3, #SIO_DIV_REMAINDER_OFFSET]
ldr r0, [r3, #SIO_DIV_QUOTIENT_OFFSET]
bkpt #42 // dump register values
negs r0, r0
movs r1, 0x2
ldr r3, =(SIO_BASE)
str r0, [r3, #SIO_DIV_SDIVIDEND_OFFSET]
str r1, [r3, #SIO_DIV_SDIVISOR_OFFSET]
@__divider_delay
b 1f
1: b 1f
1: b 1f
1: b 1f
1:
// return 64 bit value so we can efficiently return both (note quotient must be read last)
ldr r1, [r3, #SIO_DIV_REMAINDER_OFFSET]
ldr r0, [r3, #SIO_DIV_QUOTIENT_OFFSET]
bkpt #42 // dump register values
)");
}
void loop() {
// put your main code here, to run repeatedly:
delay(1); // this speeds up the simulation
}