Advertisement
Guest User

Untitled

a guest
Mar 19th, 2018
240
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.30 KB | None | 0 0
  1. .origin 0
  2. .entrypoint main
  3.  
  4. #define DRDY r31.t5
  5. #define DCLK r31.t4
  6. #define D0 r5.t3
  7. #define D1 r5.t2
  8. #define D2 r5.t1
  9. #define D3 r5.t0
  10.  
  11.  
  12. // can't name these "T0" or "T1" since those are reserved keywords
  13. #define T0_OUT r30.t6
  14. #define T1_OUT r30.t7
  15.  
  16. .macro set_if
  17. .mparam dst, src
  18. qbbc skip, src
  19. set dst
  20. skip:
  21. .endm
  22.  
  23. main:
  24. mov r3, r4 // store the start of the ring buffer
  25. add r4, r4, 4*1 // increment one uint32 from start, we will store the head pointer at r3's location
  26.  
  27. wait:
  28. clr T0_OUT // set T0 low
  29. wbs DRDY // wait until DRDY is high
  30. set T0_OUT // set T0 high
  31.  
  32. loop end_first, 32 // loop through the first 32 data bits
  33. wbs DCLK // wait for DCLK to go high
  34. lsl r10, r10, 1 // shift data 0000 -> 0 000x -? 00 00xy
  35. lsl r12, r12, 1
  36. lsl r14, r14, 1
  37. lsl r16, r16, 1
  38. wbc DCLK // wait till the DCLK goes low
  39. mov r5, r31 // store r31 (input pins)
  40. set_if r10.t0, D0
  41. set_if r12.t0, D1
  42. set_if r14.t0, D2
  43. set_if r16.t0, D3
  44. end_first: // the first 32 bits have been received
  45.  
  46. loop end_second, 32 // loop through the second 32 data bits
  47. wbs DCLK // wait for DCLK to go high
  48. lsl r11, r11, 1 // shift data 0000 -> 0 000x -? 00 00xy
  49. lsl r13, r13, 1
  50. lsl r15, r15, 1
  51. lsl r17, r17, 1
  52. wbc DCLK // wait till the DCLK goes low
  53. mov r5, r31 // store r31 (input pins)
  54. set_if r11.t0, D0
  55. set_if r13.t0, D1
  56. set_if r15.t0, D2
  57. set_if r17.t0, D3
  58. end_second: // the second 32 bits have been received
  59.  
  60. // store to ring buffer
  61. sbbo &r10, r4, 0, 8*4 // store 8*4 bytes of samples in dram
  62. add r4, r4, 8*4 // increment the head of buffer
  63. sub r2, r4, r3 // see how far from start of buffer
  64. add r2, r2, 8*4 // add length of next sample that hasn't happened yet
  65. qbge still_space, r1, r2 // jump if (r4-r3) + 8*4 >= r1 (about to be used buffer) >= (allocated buffer)
  66. mov r4, r3 // start back at beginning
  67. add r4, r4, 4*1 // leave room for one uint32
  68. still_space:
  69. sbbo &r4, r3, 0, 1*4 // store the head at the head of dram
  70.  
  71. jmp wait
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement