Advertisement
Guest User

Untitled

a guest
Feb 28th, 2015
194
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.62 KB | None | 0 0
  1. 64 void iir_tuner(float dec_50[], unsigned short adc_buf[]) {
  2. 0x08000ae0 <+0>: stmdb sp!, {r4, r5, r6, r7, r8, r9, r10, r11}
  3. 0x08000ae4 <+4>: movw r3, #3688 ; 0xe68
  4. 0x08000ae8 <+8>: ldr.w r10, [pc, #144] ; 0x8000b7c <iir_tuner+156>
  5. 0x08000aec <+12>: ldr.w r9, [pc, #144] ; 0x8000b80 <iir_tuner+160>
  6. 0x08000af0 <+16>: ldr r6, [pc, #132] ; (0x8000b78 <iir_tuner+152>)
  7. 0x08000af2 <+18>: ldr.w r2, [r10]
  8. 0x08000af6 <+22>: ldr.w r4, [r9]
  9. 0x08000afa <+26>: ldr r7, [r6, #0]
  10. 0x08000afc <+28>: movt r3, #8192 ; 0x2000
  11. 0x08000b00 <+32>: add.w r8, r1, #7168 ; 0x1c00
  12. 0x08000b04 <+36>: ldr.w r12, [r3]
  13. 0x08000b08 <+40>: subs r0, #4
  14. 0x08000b0a <+42>: subs r3, r1, #2
  15. 0x08000b0c <+44>: add.w r8, r8, #30
  16. 0x08000b14 <+52>: mov r1, r2
  17. 0x08000b16 <+54>: add.w r5, r3, #90 ; 0x5a
  18. 0x08000b1a <+58>: mov r2, r4
  19. 0x08000b1c <+60>: b.n 0x8000b2a <iir_tuner+74>
  20.  
  21. 65 int i, j, k;
  22. 66 float x, y, z;
  23. 67 int n, m, o;
  24. 68
  25. 69 for(i=0, j=0; i<ADC_TUNER_BUF_SZ/2; j++) {
  26. 0x08000b4c <+108>: cmp r3, r8
  27. 0x08000b58 <+120>: beq.n 0x8000b5e <iir_tuner+126>
  28.  
  29. 70
  30. 71 /* IIR BPF centred at Fs/4. All your MIPs are belong to this
  31. 72 loop. */
  32. 73
  33. 74 for(k=0; k<ADC_TUNER_M; k++,i++) {
  34. ---Type <return> to continue, or q <return> to quit---
  35. 0x08000b32 <+82>: cmp r3, r5
  36. 0x08000b38 <+88>: bne.n 0x8000b1e <iir_tuner+62>
  37.  
  38. 75 #ifdef FIXED_IIR
  39. 76 m = (int)adc_buf[i];// I could be wrong here -- I'm new to any kind of DSP -- but won't this offset be removed by the BPF?
  40. 0x08000b1e <+62>: ldrh.w r4, [r3, #2]!
  41. 0x08000b2a <+74>: ldrh.w r4, [r3, #2]!
  42.  
  43. 77 n = m - ((B1MUL*n_2)>>B1SHFT);
  44. 0x08000b22 <+66>: rsb r2, r2, r2, lsl #10
  45. 0x08000b26 <+70>: sub.w r2, r4, r2, asr #10
  46. 0x08000b2e <+78>: rsb r1, r1, r1, lsl #10
  47. 0x08000b34 <+84>: sub.w r1, r4, r1, asr #10
  48.  
  49. 78 n_2 = n_1;
  50. 79 n_1 = n;
  51. 80 #else
  52. 81 x = (int)adc_buf[i] - 32768;
  53. 82 y = x - (BETA1*y_2);
  54. 83 y_2 = y_1;
  55. 84 y_1 = y;
  56. 85 #endif
  57. 86 }
  58. 87
  59. 88 /* Equaliser FIR filter, notch at Fs/(4*ADC_TUNER_M) to smooth out
  60. 89 IIR BPF passband response */
  61. 90 #ifdef FIXED_IIR
  62. 91 o = n + ((B2MUL*o_2)>>B2SHFT);
  63. 0x08000b10 <+48>: movw r11, #979 ; 0x3d3
  64. 0x08000b3a <+90>: mul.w r12, r11, r12
  65. 0x08000b3e <+94>: mov r4, r1
  66. 0x08000b40 <+96>: add.w r1, r1, r12, asr #10
  67.  
  68. 92 dec_50[j] = (float)o;
  69. ---Type <return> to continue, or q <return> to quit---g
  70. 0x08000b44 <+100>: vmov s14, r1
  71. 0x08000b48 <+104>: vcvt.f32.s32 s15, s14
  72. 0x08000b4e <+110>: vmov r1, s15
  73. 0x08000b54 <+116>: str.w r1, [r0, #4]!
  74.  
  75. 93 o_2 = o_1;
  76. 0x08000b52 <+114>: mov r12, r7
  77.  
  78. 94 o_1 = n;
  79. 0x08000b5a <+122>: mov r7, r4
  80. 0x08000b5c <+124>: b.n 0x8000b14 <iir_tuner+52>
  81. 0x08000b5e <+126>: movw r0, #3688 ; 0xe68
  82. 0x08000b62 <+130>: movt r0, #8192 ; 0x2000
  83. 0x08000b66 <+134>: str.w r2, [r10]
  84. 0x08000b6a <+138>: str.w r4, [r9]
  85. 0x08000b6e <+142>: str r7, [r0, #0]
  86. 0x08000b70 <+144>: str r4, [r6, #0]
  87.  
  88. 95 #else
  89. 96 z=y+BETA2*z_2;
  90. 97 dec_50[j] = z;
  91. 98 z_2 = z_1;
  92. 99 z_1 = y;
  93. 100 #endif
  94. 101
  95. 102 }
  96. 103 }
  97. 0x08000b72 <+146>: ldmia.w sp!, {r4, r5, r6, r7, r8, r9, r10, r11}
  98. 0x08000b76 <+150>: bx lr
  99. 0x08000b78 <+152>: lsrs r0, r7, #25
  100. 0x08000b7a <+154>: movs r0, #0
  101. 0x08000b7c <+156>: lsrs r4, r7, #25
  102. 0x08000b7e <+158>: movs r0, #0
  103. 0x08000b80 <+160>: lsrs r4, r6, #25
  104. ---Type <return> to continue, or q <return> to quit---
  105. 0x08000b82 <+162>: movs r0, #0
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement