Advertisement
kneefer

DSP - SMiW

Oct 27th, 2014
304
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 4.15 KB | None | 0 0
  1. /*****************************************************************************
  2. **                                                                          **
  3. **   Name:  BF537 C Talkthrough I2S                                     ** 
  4. **                                                                          **
  5. ******************************************************************************
  6. Analog Devices, Inc.  All rights reserved.
  7.  
  8. File Name:  Main.c
  9.  
  10. Date Modified:  12/14/04        Rev 1.0
  11.         01/11/05        Rev 1.1 Updated to work on Rev 1.1 of the ADSP-BF537 EZ-Kit
  12.  
  13. Hardware:   ADSP-BF537 EZ-KIT Board Rev 1.1
  14.             Users of ADSP-BF537 EZ-KIT Board Rev 1.0 must change the SPORT to
  15.             generate internal clock and frame sync
  16.  
  17. Purpose:    This program sets up the ADSP-BF537 to reset the ADC and DAC.  
  18.             The data to/from the DAC/ADC are transfered over SPORT0 in I2S mode.                                                 
  19.                                                                                          
  20. Program Parameters:                                                                                      
  21.                                                                                                          
  22.  
  23. ******************************************************************************/  
  24. #include "Talkthrough.h"
  25. #include <sysreg.h>
  26. #include <ccblkfn.h>
  27.  
  28.  
  29. /*****************************************************************************
  30.  
  31. Variables                                                              
  32.                                                                            
  33. Description:    The variables ChannelxLeftIn and ChannelxRightIn contain    
  34.         the data coming from the codec ADC (AD1871).  The (processed)      
  35.         playback data are written into the variables           
  36.         ChannelxLeftOut and ChannelxRightOut respectively, which    
  37.         are then sent back to the DAC (AD1854) in the SPORT0 ISR.      
  38.                
  39. ******************************************************************************/
  40. // left input data from AD1871
  41. int iChannel0LeftIn, iChannel1LeftIn;
  42. // right input data from AD1871
  43. int iChannel0RightIn, iChannel1RightIn;
  44. // left ouput data for AD1854  
  45. int iChannel0LeftOut, iChannel1LeftOut;
  46. // right ouput data for AD1854
  47. int iChannel0RightOut, iChannel1RightOut;
  48. // SPORT0 DMA transmit buffer
  49. int iTxBuffer1[2];
  50. // SPORT0 DMA receive buffer
  51. int iRxBuffer1[2];
  52.  
  53. int delayMilliseconds = 500; // half a second
  54. int delaySamples;  // assumes 44800 Hz sample rate
  55. float decay = 0.5f;
  56. int buffer[5000];
  57. int current = 0;
  58.  
  59. //--------------------------------------------------------------------------//
  60. // Function:    main                                                        //
  61. //                                                                          //
  62. // Description: After calling a few initalization routines, main() just     //
  63. //              waits in a loop forever.  The code to process the incoming  //
  64. //              data can be placed in the function Process_Data() in the    //
  65. //              file "Process_Data.c".                                      //
  66. //--------------------------------------------------------------------------//
  67. void main(void)
  68. {
  69.     delaySamples  = (int)((float)delayMilliseconds * 44.8f);
  70.     Init_Flags();
  71.     Audio_Reset();
  72.     Init_Sport0();
  73.     Init_DMA();
  74.     Init_Interrupts();
  75.     Enable_DMA_Sport0();
  76.  
  77.     while(1);
  78. }
  79.  
  80. //////////////////////////////////////////////////////////////////
  81.  
  82. #include "Talkthrough.h"
  83. extern float decay;
  84. extern int delaySamples;
  85. extern int current;
  86. extern int buffer[];
  87.  
  88. //------------------------------------------------------------------//
  89. // Function:    Process_Data()                                              //
  90. //                                                                          //
  91. // Description: This function is called from inside the SPORT0 ISR every    //
  92. //              time a complete audio frame has been received. The new      //
  93. //              input samples can be found in the variables iChannel0LeftIn,//
  94. //              iChannel0RightIn, iChannel1LeftIn and iChannel1RightIn      //
  95. //              respectively. The processed data should be stored in        //
  96. //              iChannel0LeftOut, iChannel0RightOut, iChannel1LeftOut,      //
  97. //              iChannel1RightOut, iChannel2LeftOut and iChannel2RightOut   //
  98. //              respectively.                                               //
  99. //--------------------------------------------------------------------------//
  100. void Process_Data(void)
  101. {
  102.     int i;
  103.  
  104.     buffer[current] = iChannel0LeftIn;
  105.    
  106.     for (i = 0; i < 5000; i++)
  107.     {
  108.         buffer[i] += (int)((float)iChannel0LeftIn * decay);
  109.     }
  110.    
  111.     iChannel0LeftOut = buffer[current];
  112.     iChannel0RightOut = iChannel0LeftOut;
  113.    
  114.     if(current++ >= 5000){
  115.         current = 0;
  116.     }
  117. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement