Advertisement
Guest User

Untitled

a guest
Jun 23rd, 2017
58
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.80 KB | None | 0 0
  1. /*
  2. * Copyright 2010 by Spectrum Digital Incorporated.
  3. * All rights reserved. Property of Spectrum Digital Incorporated.
  4. */
  5.  
  6. #include "usbstk5515.h"
  7. #include "aic3204.h"
  8. #include "stdio.h" // For printf();
  9. #include "usbstk5515_i2c.h"
  10. #include "usbstk5515_emif.h"
  11. #include "usbstk5515_gpio.h"
  12. #include "usbstk5515_led.h"
  13.  
  14.  
  15. #include "fdacoefs.h"
  16. #include "tms320.h"
  17. #include "Dsplib.h"
  18.  
  19.  
  20. #define SIZE 51
  21.  
  22.  
  23.  
  24. Int16 before_left[480];
  25. Int16 before_right[480];
  26. Int16 after_left[480];
  27. Int16 after_right[480];
  28.  
  29. Int16 after_Kron[60];
  30.  
  31. int i=0;
  32.  
  33. Int16 right;//zmienna do przechowywania probki z lewego kanalu
  34. Int16 left;//zmienna do przechowywania probki z prawego kanalu
  35.  
  36. Int16 oright;//zmienna do przechowywania probki na wyjscie leweego kanalu
  37. Int16 oleft;//zmienna do przechowywania probki na wyjscie prawego kanalu
  38.  
  39. Int16 dbuffer[SIZE + 2];//bufor opoznien
  40. Int16 * delay=&dbuffer[0];//wskaznik na bufor opoznien
  41. int NH=51;//ilosc wspolczynnikow filtru
  42. Int16 * xl=&left;//wskazniki na zmienne wejscia/wyjscia
  43. Int16 * xr=&right;
  44. Int16 * yl=&oleft;
  45. Int16 * yr=&oright;
  46.  
  47.  
  48.  
  49.  
  50. int actual_index=50;
  51. //int delay_index=0;
  52.  
  53. Int16 Kronecker[SIZE];
  54.  
  55. //JAKBY DSPLIB NIE DZIALALO TO PRZEKOPIOWAC WSPOLCZYNNIKI DO PLIKU MAIN.C
  56.  
  57. /* ------------------------------------------------------------------------ *
  58. * *
  59. * Testing Function *
  60. * *
  61. * ------------------------------------------------------------------------ */
  62.  
  63.  
  64. Int16 FIR(Int16 input[], Int16 h[])
  65. {//filtr FIR w C DZIALA
  66.  
  67. long out=0;
  68. int i=0;
  69.  
  70. for (i=0; i<SIZE; i++)
  71. {
  72. out += h[i]*(long)input[i];//filtracja
  73. }
  74.  
  75. return(out>>15);
  76. }
  77.  
  78.  
  79. void TEST_execute( Int16 ( *funchandle )( ), char *testname, Int16 testid )
  80. {
  81. Int16 status;
  82.  
  83. /* Display test ID */
  84. printf( "%02d Testing %s...\n", testid, testname );
  85.  
  86. /* Call test function */
  87. status = funchandle( );
  88.  
  89. /* Check for test fail */
  90. if ( status != 0 )
  91. {
  92. /* Print error message */
  93. printf( " FAIL... error code %d... quitting\n", status );
  94.  
  95. /* Software Breakpoint to Code Composer */
  96. SW_BREAKPOINT;
  97. }
  98. else
  99. {
  100. /* Print error message */
  101. printf( " PASS\n" );
  102. }
  103. }
  104.  
  105. /* ------------------------------------------------------------------------ *
  106. * *
  107. * main( ) *
  108. * *
  109. * ------------------------------------------------------------------------ */
  110. extern Int16 fir_filter( Int16* input, Int16* h, Int16 *delay);
  111.  
  112. void main( void )
  113. {
  114. /* Initialize BSL */
  115. USBSTK5515_init( );
  116.  
  117. /* Initialise hardware interface and I2C for code */
  118. aic3204_hardware_init();
  119.  
  120. /* Initialise the AIC3204 codec */
  121. aic3204_init();
  122.  
  123.  
  124. printf( "\n***ALL Tests Passed***\n" );
  125.  
  126.  
  127. set_sampling_frequency_and_gain(48000,2);//ustawienie fs i wzmocnienia
  128.  
  129. for (i=0;i<SIZE + 2;i++)//czyszczenie bufora opoznien
  130. {
  131. dbuffer[i]=0;
  132. }
  133.  
  134.  
  135. i=0;
  136.  
  137. for (i=0;i<SIZE;i++)//czyszczenie pozostalych buforow i tablicowanie delty Kroneckera
  138. {
  139. Kronecker[i]=0;
  140. before_left[i]=0;
  141. after_left[i]=0;
  142. before_right[i]=0;
  143. after_right[i]=0;
  144. after_Kron[i]=0;
  145. }
  146.  
  147. Kronecker[0]=32767;//nadanie wartosci pierwszej probki delty Kroneckera
  148.  
  149.  
  150. //FIR DSPLIB
  151. /*
  152. while(1)
  153. {
  154.  
  155. //to wysyla na oba kanaly coś
  156. aic3204_codec_read(xl, xr);//pobranie probki
  157.  
  158.  
  159. before_left[i]=left;//zapisanie probek wejsciowych do tablicy
  160. //left=Kronecker[i];
  161. before_right[i]=right;
  162. fir(xl,B,yl,delay,1,NH);//filtracja kanalu lewego
  163. fir(xr,B,yr,delay,1,NH);//filtracja kanalu prawego
  164. after_Kron[i]=oleft;//zapisanie probek wyjsciowych do tablicy
  165. after_right[i]=oright;
  166. aic3204_codec_write(oleft,oright);//wyslanie probki
  167.  
  168.  
  169. //TESTOWANIE DELTA KRONECKERA
  170. /*for(i=0;i<SIZE;i++)
  171. {
  172. left=Kronecker[i];
  173.  
  174. fir(xl,B,yl,delay,1,NH);//filtracja kanalu lewego
  175.  
  176. after_Kron[i]=oleft;
  177.  
  178. }*/
  179.  
  180.  
  181. // i++;
  182. // if(i==480)i=0;
  183.  
  184.  
  185.  
  186.  
  187. //}
  188.  
  189. //FIR W C
  190. /* while(1){
  191.  
  192.  
  193. aic3204_codec_read(xl, xr);//pobranie probki
  194. before_left[i]=left;//zapisanie probek wejsciowych do tablicy
  195. before_right[i]=left;//zapisanie probek wejsciowych do tablicy
  196. oleft=FIR(xl,B);
  197. oright=FIR(xr,B);
  198. after_left[i]=oleft;//zapisanie probek wyjsciowych do tablicy
  199. after_right[i]=oleft;//zapisanie probek wyjsciowych do tablicy
  200. aic3204_codec_write(oleft,oright);//wyslanie probki*/
  201.  
  202. //TESTOWANIE DELTA KRONECKERA
  203. /*for(i=0;i<SIZE;i++)
  204. {
  205. left=Kronecker[i];
  206. before_left[i]=left;//zapisanie probek wejsciowych do tablicy
  207. after_Kron[i]=FIR(xl,B);
  208.  
  209. }*/
  210. // i++;
  211. // if(i==480)i=0;
  212. // }
  213.  
  214. //FIR ASM
  215.  
  216.  
  217.  
  218.  
  219. //TESTOWANIE DELTA KRONECKERA
  220. for(i=0;i<SIZE;i++)
  221. {
  222. left=Kronecker[i];
  223. oleft=fir_filter(xl,B,delay);
  224. after_Kron[i]=oleft;
  225.  
  226. }
  227.  
  228.  
  229.  
  230. }
  231.  
  232.  
  233.  
  234.  
  235.  
  236.  
  237.  
  238.  
  239.  
  240.  
  241.  
  242.  
  243. ;wskazniki
  244. ;-> AR0 input
  245. ;AR1 -> wspolczynniki
  246. ;AR2 -> delay
  247. ;wartosc zwracana T0
  248.  
  249. .def _fir_filter
  250. _fir_filter
  251.  
  252. ;inicjalizacja rejestrow statusowych
  253. BSET AR3LC;
  254. BSET AR6LC;
  255. BCLR C54CM;
  256.  
  257.  
  258. ;inicjalizacja adresacji kolowej
  259. ;adresy poczatkow buforow
  260. MOV #AR2,BSA23; poczatek bufora opoznien
  261. MOV #AR1,BSA67; poczatek bufora wspolczynnikow
  262.  
  263. ;ilosc danych w buforze
  264. MOV #53,BK03 ;dlugosc bufora opoznien
  265. MOV #51,BK47 ;dlugosc bufora wspolczynnikow
  266.  
  267. ;wskazniki na pierwszy element
  268. MOV #0,AR2 ;wskaznik na pierwszy element tablicy opoznien
  269. MOV #0,AR6 ;wskaznik na pierwszy element tablicy wspolczynnikow
  270.  
  271. ;zapisanie probki aktualnej do bufora opoznien
  272.  
  273. MOV *AR0,*AR2+ ;
  274.  
  275. ;filtracja
  276. RPT #51 ;powtorzenie 51 razy
  277. MAC *AR2-,*AR6+,AC0;
  278.  
  279. ;zwrocenie wyniku
  280. MOV HI(AC0),T0;
  281.  
  282. RET;
  283.  
  284.  
  285.  
  286.  
  287.  
  288. //filtr DP fg=2000;
  289. const int BL = 51;
  290. Int16 B[51] = {
  291. -5, 0, 6, 16, 30, 51, 79, 117, 166,
  292. 225, 296, 379, 471, 573, 682, 797, 913, 1030,
  293. 1142, 1247, 1343, 1426, 1493, 1542, 1573, 1583, 1573,
  294. 1542, 1493, 1426, 1343, 1247, 1142, 1030, 913, 797,
  295. 682, 573, 471, 379, 296, 225, 166, 117, 79,
  296. 51, 30, 16, 6, 0, -5
  297. };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement