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

DSP编程

开发平台:

C/C++

  1. //###########################################################################
  2. //
  3. // FILE:   Example_281xAdcSeqModeTest.c
  4. //
  5. // TITLE:  DSP281x ADC Seq 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. //
  21. //          Open a memory window to SampleTable to observe the buffer
  22. //          RUN for a while and stop and see the table contents.
  23. //
  24. //          Watch Variables:
  25. //             SampleTable - Log of converted values.
  26. //
  27. //###########################################################################
  28. //
  29. // Original source by: S.S.
  30. //
  31. //  Ver | dd mmm yyyy | Who  | Description of changes
  32. // =====|=============|======|===============================================
  33. //  1.00| 11 Sep 2003 | L.H. | Updated for DSP281x Release - First Release
  34. //###########################################################################
  35. #include "DSP281x_Device.h"     // DSP281x Headerfile Include File
  36. #include "DSP281x_Examples.h"   // DSP281x Examples Include File
  37. // ADC start parameters
  38. #define ADC_MODCLK 0x3   // HSPCLK = SYSCLKOUT/2*ADC_MODCLK2 = 150/(2*3)         = 25MHz
  39. #define ADC_CKPS   0x1   // ADC module clock = HSPCLK/2*ADC_CKPS   = 25MHz/(1*2) = 12.5MHz
  40. #define ADC_SHCLK  0xf   // S/H width in ADC module periods                      = 16 ADC clocks
  41. #define AVG        1000  // Average sample limit
  42. #define ZOFFSET    0x00  // Average Zero offset
  43. #define BUF_SIZE   2048  // Sample buffer size
  44. // Global variable for this example
  45. Uint16 SampleTable[BUF_SIZE];
  46. main() 
  47. {
  48.    Uint16 i;
  49. // Step 1. Initialize System Control:
  50. // PLL, WatchDog, enable Peripheral Clocks
  51. // This example function is found in the DSP281x_SysCtrl.c file.
  52.    InitSysCtrl();
  53.       
  54. // Specific clock setting for this example:      
  55.    EALLOW;
  56.    SysCtrlRegs.HISPCP.all = ADC_MODCLK; // HSPCLK = SYSCLKOUT/ADC_MODCLK
  57.    EDIS;
  58. // Step 2. Initialize GPIO: 
  59. // This example function is found in the DSP281x_Gpio.c file and
  60. // illustrates how to set the GPIO to it's default state.
  61. // InitGpio();  // Skipped for this example  
  62. // Step 3. Clear all interrupts and initialize PIE vector table:
  63. // Disable CPU interrupts 
  64.    DINT;
  65. // Initialize the PIE control registers to their default state.
  66. // The default state is all PIE interrupts disabled and flags
  67. // are cleared.  
  68. // This function is found in the DSP281x_PieCtrl.c file.
  69.    InitPieCtrl();
  70. // Disable CPU interrupts and clear all CPU interrupt flags:
  71.    IER = 0x0000;
  72.    IFR = 0x0000;
  73. // Initialize the PIE vector table with pointers to the shell Interrupt 
  74. // Service Routines (ISR).  
  75. // This will populate the entire table, even if the interrupt
  76. // is not used in this example.  This is useful for debug purposes.
  77. // The shell ISR routines are found in DSP281x_DefaultIsr.c.
  78. // This function is found in DSP281x_PieVect.c.
  79.    InitPieVectTable();
  80. // Step 4. Initialize all the Device Peripherals:
  81. // This function is found in DSP281x_InitPeripherals.c
  82. // InitPeripherals(); // Not required for this example
  83.    InitAdc();  // For this example, init the ADC
  84. // Specific ADC setup for this example:
  85.    AdcRegs.ADCTRL1.bit.ACQ_PS = ADC_SHCLK;
  86.    AdcRegs.ADCTRL3.bit.ADCCLKPS = ADC_CKPS;     
  87.    AdcRegs.ADCTRL1.bit.SEQ_CASC = 1;        // 1  Cascaded mode
  88.    AdcRegs.ADCCHSELSEQ1.bit.CONV00 = 0x0;
  89.    AdcRegs.ADCTRL1.bit.CONT_RUN = 1;       // Setup continuous run
  90. // Step 5. User specific code, enable interrupts:
  91. // Clear SampleTable
  92.    for (i=0; i<BUF_SIZE; i++)
  93.    {
  94.      SampleTable[i] = 0;
  95.    }
  96.    // Start SEQ1
  97.    AdcRegs.ADCTRL2.all = 0x2000;
  98.    // Take ADC data and log the in SampleTable array  
  99.    while(1)
  100.    {  
  101.      for (i=0; i<AVG; i++)
  102.      {
  103.         while (AdcRegs.ADCST.bit.INT_SEQ1== 0) {} // Wait for interrupt
  104.         // Software wait = (HISPCP*2) * (ADCCLKPS*2) * (CPS+1) cycles
  105.         //               = (3*2)      * (1*2)        * (0+1)   = 12 cycles
  106.         asm(" RPT #11 || NOP");
  107.         AdcRegs.ADCST.bit.INT_SEQ1_CLR = 1;
  108.         SampleTable[i] =((AdcRegs.ADCRESULT0>>4) ); 
  109.      }
  110.    }
  111. }
  112. //===========================================================================
  113. // No more.
  114. //===========================================================================