Example_281xAdcSeq_ovdTest.c
上传用户:qingfan3
上传日期:2014-10-27
资源大小:31439k
文件大小:9k
源码类别:

DSP编程

开发平台:

C/C++

  1. //###########################################################################
  2. //
  3. // FILE:   Example_281xAdcSeq_ovdTest.c
  4. //
  5. // TITLE:  DSP281x ADC Seq Override mode Test.
  6. //
  7. // ASSUMPTIONS:
  8. //
  9. //          This program requires the DSP281x V1.00 header files.  
  10. //          As supplied, this project is configured for "boot to H0" operation.  
  11. // 
  12. //          Make sure the CPU clock speed is properly defined in 
  13. //          DSP281x_Examples.h before compiling this example.
  14. //
  15. //          Connect the signal to be converted to Channel A0.
  16. //
  17. // DESCRIPTION:    
  18. //
  19. //          Channel A0 is converted forever and logged in a buffer (SampleTable)
  20. //          Using sequencer1 in sequencer override mode. Sequencer is Sequential mode
  21. //          with sample rate of 1/(3*40ns) =8.3MHz
  22. //
  23. //          Open a memory window to SampletTable to observe the buffer
  24. //          RUN for a while and stop and see the table contents.
  25. //
  26. //          Watch Variables:
  27. //             SampleTable - Log of converted values.
  28. //             XF          - Toggles on every ADC sequencer flag
  29. //
  30. //###########################################################################
  31. //
  32. // Original source by: S.S.
  33. //
  34. //  Ver | dd mmm yyyy | Who  | Description of changes
  35. // =====|=============|======|===============================================
  36. //  1.00| 11 Sep 2003 | L.H. | Updated for DSP281x Release - First Release
  37. //###########################################################################
  38. #include "DSP281x_Device.h"     // DSP281x Headerfile Include File
  39. #include "DSP281x_Examples.h"   // DSP281x Examples Include File
  40.   
  41. // Determine when the shift to right justify the data takes place
  42. // Only one of these should be defined as 1.  
  43. // The other two should be defined as 0.
  44. #define POST_SHIFT   0  // Shift results after the entire sample table is full
  45. #define INLINE_SHIFT 1  // Shift results as the data is taken from the results regsiter
  46. #define NO_SHIFT     0  // Do not shift the results 
  47.   
  48. // ADC start parameters
  49. #define ADC_MODCLK 0x3   // HSPCLK = SYSCLKOUT/2*ADC_MODCLK2 = 150/(2*3)     = 25MHz
  50. #define ADC_CKPS   0x0   // ADC module clock = HSPCLK/1      = 25MHz/(1)     = 25MHz
  51. #define ADC_SHCLK  0x1   // S/H width in ADC module periods                  = 2 ADC cycle
  52. #define AVG        1000  // Average sample limit
  53. #define ZOFFSET    0x00  // Average Zero offset
  54. #define BUF_SIZE   1024  // Sample buffer size
  55. // Global variable for this example
  56. Uint16 SampleTable[BUF_SIZE];
  57. main() 
  58. {
  59.    Uint16 i;
  60.    Uint16 array_index;                     
  61. // Step 1. Initialize System Control:
  62. // PLL, WatchDog, enable Peripheral Clocks
  63. // This example function is found in the DSP281x_SysCtrl.c file.
  64.    InitSysCtrl();
  65.       
  66. // Specific clock setting for this example:      
  67.    EALLOW;
  68.    SysCtrlRegs.HISPCP.all = ADC_MODCLK; // HSPCLK = SYSCLKOUT/ADC_MODCLK
  69.    EDIS;
  70. // Step 2. Initialize GPIO: 
  71. // This example function is found in the DSP281x_Gpio.c file and
  72. // illustrates how to set the GPIO to it's default state.
  73. // InitGpio();  // Skipped for this example  
  74. // Enable the pins as XF pin as output
  75.    EALLOW;
  76.    GpioMuxRegs.GPFMUX.bit.XF_GPIOF14 = 1;  //enable XF pin on GPOF14
  77.    EDIS;
  78. // Step 3. Clear all interrupts and initialize PIE vector table:
  79. // Disable CPU interrupts 
  80.    DINT;
  81. // Initialize the PIE control registers to their default state.
  82. // The default state is all PIE interrupts disabled and flags
  83. // are cleared.  
  84. // This function is found in the DSP281x_PieCtrl.c file.
  85.    InitPieCtrl();
  86. // Disable CPU interrupts and clear all CPU interrupt flags:
  87.    IER = 0x0000;
  88.    IFR = 0x0000;
  89. // Initialize the PIE vector table with pointers to the shell Interrupt 
  90. // Service Routines (ISR).  
  91. // This will populate the entire table, even if the interrupt
  92. // is not used in this example.  This is useful for debug purposes.
  93. // The shell ISR routines are found in DSP281x_DefaultIsr.c.
  94. // This function is found in DSP281x_PieVect.c.
  95.    InitPieVectTable();
  96. // Step 4. Initialize all the Device Peripherals:
  97. // This function is found in DSP281x_InitPeripherals.c
  98. // InitPeripherals(); // Not required for this example
  99.    InitAdc();         // For this example, init the ADC
  100. // Specific ADC setup for this example:
  101.    AdcRegs.ADCTRL1.bit.ACQ_PS = ADC_SHCLK;  // Sequential mode: Sample rate   = 1/[(2+ACQ_PS)*ADC clock in ns]
  102.     //                     = 1/(3*40ns) =8.3MHz
  103.     // If Simultaneous mode enabled: Sample rate = 1/[(3+ACQ_PS)*ADC clock in ns]
  104.    AdcRegs.ADCTRL3.bit.ADCCLKPS = ADC_CKPS;     
  105.    AdcRegs.ADCTRL1.bit.SEQ_CASC = 1;        // 1  Cascaded mode
  106.    AdcRegs.ADCCHSELSEQ1.bit.CONV00 = 0x0;
  107.    AdcRegs.ADCTRL1.bit.CONT_RUN = 1;       // Setup continuous run
  108.    AdcRegs.ADCTRL1.bit.SEQ_OVRD = 1;       // Enable Sequencer override feature
  109.    AdcRegs.ADCCHSELSEQ1.all = 0x0;         // Initialize all ADC channel selects to A0
  110.    AdcRegs.ADCCHSELSEQ2.all = 0x0;
  111.    AdcRegs.ADCCHSELSEQ3.all = 0x0;
  112.    AdcRegs.ADCCHSELSEQ4.all = 0x0;
  113.    AdcRegs.ADCMAXCONV.bit.MAX_CONV1 = 0x7;  // convert and store in 8 results registers 
  114. // Step 5. User specific code, enable interrupts:
  115. // Clear SampleTable
  116.    for (i=0; i<BUF_SIZE; i++)
  117.    {
  118.      SampleTable[i] = 0;
  119.    }
  120. // Start SEQ1
  121.    AdcRegs.ADCTRL2.all = 0x2000;
  122.   
  123.    while(1)
  124.    {  // Take ADC data and log them in SampleTable array
  125.      
  126.      // Initalize the array index.  This points to the current
  127.      // location within the SampleTable
  128.      array_index = 0;
  129.      
  130.      for (i=0; i<(BUF_SIZE/16); i++)
  131.      {
  132.        // Wait for INT1
  133.        while (AdcRegs.ADCST.bit.INT_SEQ1== 0){}
  134.        asm(" setc XF ");                 // Set XF for monitoring  -optional
  135.        AdcRegs.ADCST.bit.INT_SEQ1_CLR = 1;
  136. #if INLINE_SHIFT
  137.        SampleTable[array_index++]= ( (AdcRegs.ADCRESULT0)>>4);
  138.        SampleTable[array_index++]= ( (AdcRegs.ADCRESULT1)>>4);
  139.        SampleTable[array_index++]= ( (AdcRegs.ADCRESULT2)>>4);
  140.        SampleTable[array_index++]= ( (AdcRegs.ADCRESULT3)>>4);
  141.        SampleTable[array_index++]= ( (AdcRegs.ADCRESULT4)>>4);
  142.        SampleTable[array_index++]= ( (AdcRegs.ADCRESULT5)>>4);
  143.        SampleTable[array_index++]= ( (AdcRegs.ADCRESULT6)>>4);
  144.        SampleTable[array_index++]= ( (AdcRegs.ADCRESULT7)>>4);
  145.        
  146. #endif //-- INLINE_SHIFT
  147.      
  148. #if NO_SHIFT || POST_SHIFT
  149.        SampleTable[array_index++]= ( (AdcRegs.ADCRESULT0));
  150.        SampleTable[array_index++]= ( (AdcRegs.ADCRESULT1));                            
  151.        SampleTable[array_index++]= ( (AdcRegs.ADCRESULT2));                            
  152.        SampleTable[array_index++]= ( (AdcRegs.ADCRESULT3));                            
  153.        SampleTable[array_index++]= ( (AdcRegs.ADCRESULT4));                            
  154.        SampleTable[array_index++]= ( (AdcRegs.ADCRESULT5));                            
  155.        SampleTable[array_index++]= ( (AdcRegs.ADCRESULT6));                            
  156.        SampleTable[array_index++]= ( (AdcRegs.ADCRESULT7));                            
  157.             
  158. #endif //-- NO_SHIFT || POST_SHIFT
  159.        while (AdcRegs.ADCST.bit.INT_SEQ1== 0){}
  160.      asm(" clrc XF ");            // Clear XF for monitoring  -optional
  161.        AdcRegs.ADCST.bit.INT_SEQ1_CLR = 1;
  162. #if INLINE_SHIFT
  163.        SampleTable[array_index++]= ( (AdcRegs.ADCRESULT8)>>4);
  164.        SampleTable[array_index++]= ( (AdcRegs.ADCRESULT9)>>4);              
  165.        SampleTable[array_index++]= ( (AdcRegs.ADCRESULT10)>>4);              
  166.        SampleTable[array_index++]= ( (AdcRegs.ADCRESULT11)>>4);              
  167.        SampleTable[array_index++]= ( (AdcRegs.ADCRESULT12)>>4);              
  168.        SampleTable[array_index++]= ( (AdcRegs.ADCRESULT13)>>4);              
  169.        SampleTable[array_index++]= ( (AdcRegs.ADCRESULT14)>>4);              
  170.        SampleTable[array_index++]= ( (AdcRegs.ADCRESULT15)>>4);               
  171.                                       
  172. #endif //-- INLINE_SHIFT              
  173.                                       
  174. #if NO_SHIFT || POST_SHIFT            
  175.                                       
  176.        SampleTable[array_index++]= ( (AdcRegs.ADCRESULT8));
  177.        SampleTable[array_index++]= ( (AdcRegs.ADCRESULT9));              
  178.        SampleTable[array_index++]= ( (AdcRegs.ADCRESULT10));              
  179.        SampleTable[array_index++]= ( (AdcRegs.ADCRESULT11));              
  180.        SampleTable[array_index++]= ( (AdcRegs.ADCRESULT12));              
  181.        SampleTable[array_index++]= ( (AdcRegs.ADCRESULT13));              
  182.        SampleTable[array_index++]= ( (AdcRegs.ADCRESULT14));              
  183.        SampleTable[array_index++]= ( (AdcRegs.ADCRESULT15));              
  184. #endif // -- NO_SHIFT || POST_SHIFT 
  185. }
  186. #if POST_SHIFT
  187.     // For post shifting, shift the ADC results 
  188.     // in the SampleTable buffer after the buffer is full.
  189.     for (i=0; i<BUF_SIZE; i++)
  190.     {
  191.       SampleTable[i] = ((SampleTable[i]) >>4);
  192.     }
  193. #endif // -- POST_SHIFT    
  194.     
  195.     asm(" clrc XF ");
  196.   }
  197. }
  198. //===========================================================================
  199. // No more.
  200. //===========================================================================
  201.