Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- .origin 0
- .entrypoint main
- #define DRDY r31.t5
- #define DCLK r31.t4
- #define D0 r5.t3
- #define D1 r5.t2
- #define D2 r5.t1
- #define D3 r5.t0
- // can't name these "T0" or "T1" since those are reserved keywords
- #define T0_OUT r30.t6
- #define T1_OUT r30.t7
- .macro set_if
- .mparam dst, src
- qbbc skip, src
- set dst
- skip:
- .endm
- main:
- mov r3, r4 // store the start of the ring buffer
- add r4, r4, 4*1 // increment one uint32 from start, we will store the head pointer at r3's location
- wait:
- clr T0_OUT // set T0 low
- wbs DRDY // wait until DRDY is high
- set T0_OUT // set T0 high
- loop end_first, 32 // loop through the first 32 data bits
- wbs DCLK // wait for DCLK to go high
- lsl r10, r10, 1 // shift data 0000 -> 0 000x -? 00 00xy
- lsl r12, r12, 1
- lsl r14, r14, 1
- lsl r16, r16, 1
- wbc DCLK // wait till the DCLK goes low
- mov r5, r31 // store r31 (input pins)
- set_if r10.t0, D0
- set_if r12.t0, D1
- set_if r14.t0, D2
- set_if r16.t0, D3
- end_first: // the first 32 bits have been received
- loop end_second, 32 // loop through the second 32 data bits
- wbs DCLK // wait for DCLK to go high
- lsl r11, r11, 1 // shift data 0000 -> 0 000x -? 00 00xy
- lsl r13, r13, 1
- lsl r15, r15, 1
- lsl r17, r17, 1
- wbc DCLK // wait till the DCLK goes low
- mov r5, r31 // store r31 (input pins)
- set_if r11.t0, D0
- set_if r13.t0, D1
- set_if r15.t0, D2
- set_if r17.t0, D3
- end_second: // the second 32 bits have been received
- // store to ring buffer
- sbbo &r10, r4, 0, 8*4 // store 8*4 bytes of samples in dram
- add r4, r4, 8*4 // increment the head of buffer
- sub r2, r4, r3 // see how far from start of buffer
- add r2, r2, 8*4 // add length of next sample that hasn't happened yet
- qbge still_space, r1, r2 // jump if (r4-r3) + 8*4 >= r1 (about to be used buffer) >= (allocated buffer)
- mov r4, r3 // start back at beginning
- add r4, r4, 4*1 // leave room for one uint32
- still_space:
- sbbo &r4, r3, 0, 1*4 // store the head at the head of dram
- jmp wait
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement