Tool/software: Code Composer Studio
I am trying to run the ADC Interrupt in simultanuous cascaded continuous run mode.I receive no Interrupt.Can you tell me where is the Problem in the code.ADC is running but no Interrupt is received
//########################################################################### // // FILE: Example_2833xAdcSeqModeTest.c // // TITLE: DSP2833x ADC Seq Mode Test. // // ASSUMPTIONS: // // This program requires the DSP2833x header files. // // Make sure the CPU clock speed is properly defined in // DSP2833x_Examples.h before compiling this example. // // Connect the signal to be converted to channel A0. // // As supplied, this project is configured for "boot to SARAM" // operation. The 2833x Boot Mode table is shown below. // For information on configuring the boot mode of an eZdsp, // please refer to the documentation included with the eZdsp, // // $Boot_Table: // // GPIO87 GPIO86 GPIO85 GPIO84 // XA15 XA14 XA13 XA12 // PU PU PU PU // ========================================== // 1 1 1 1 Jump to Flash // 1 1 1 0 SCI-A boot // 1 1 0 1 SPI-A boot // 1 1 0 0 I2C-A boot // 1 0 1 1 eCAN-A boot // 1 0 1 0 McBSP-A boot // 1 0 0 1 Jump to XINTF x16 // 1 0 0 0 Jump to XINTF x32 // 0 1 1 1 Jump to OTP // 0 1 1 0 Parallel GPIO I/O boot // 0 1 0 1 Parallel XINTF boot // 0 1 0 0 Jump to SARAM <- "boot to SARAM" // 0 0 1 1 Branch to check boot mode // 0 0 1 0 Boot to flash, bypass ADC cal // 0 0 0 1 Boot to SARAM, bypass ADC cal // 0 0 0 0 Boot to SCI-A, bypass ADC cal // Boot_Table_End$ // // DESCRIPTION: // // Channel A0 is converted forever and logged in a buffer (SampleTable) // // Open a memory window to SampleTable to observe the buffer // RUN for a while and stop and see the table contents. // // Watch Variables: // SampleTable - Log of converted values. // //########################################################################### // // Original source by: S.S. // // $TI Release: 2833x/2823x Header Files and Peripheral Examples V133 $ // $Release Date: June 8, 2012 $ //########################################################################### #include "DSP28x_Project.h" // Device Headerfile and Examples Include File #include "math.h" // Prototype statements for functions found within this file. interrupt void adc_isr(void); // ADC start parameters #if (CPU_FRQ_150MHZ) // Default - 150 MHz SYSCLKOUT #define ADC_MODCLK 0x3 // HSPCLK = SYSCLKOUT/2*ADC_MODCLK2 = 150/(2*3) = 25.0 MHz #endif #if (CPU_FRQ_100MHZ) #define ADC_MODCLK 0x2 // HSPCLK = SYSCLKOUT/2*ADC_MODCLK2 = 100/(2*2) = 25.0 MHz #endif #define ADC_CKPS 0x1 //0x1 //0x1//0x1//0x1// 0x1//0x2//0x1 // ADC module clock = HSPCLK/2*ADC_CKPS = 25.0MHz/(1*2) = 12.5MHz #define ADC_SHCLK 0x3 //0x4 //0x0//0x0//0x2// 0x1//0x2 //0x0 // S/H width in ADC module periods = 16 ADC clocks #define AVG 4//16//250//1000 // Average sample limit #define ZOFFSET 0x00 // Average Zero offset #define BUF_SIZE 16//250 //2048 // Sample buffer size // Global variable for this example Uint16 SampleTable[BUF_SIZE]; Uint16 counter = 0; Uint32 averageOfSquares = 0; Uint32 oldAverage = 0; Uint32 arraySamplesVoltage[16] = {0}; int32 adcSamplesVoltage[16] = {0}; Uint16 rmsAverage[4] = {0}; //Uint16 rms[1000] = {0}; Uint16 j = 0; Uint32 arraySamplesCurrent[16] = {0}; int32 adcSamplesCurrent[16] = {0}; Uint32 averagePower[4]={0}; int32 arraySamplesPower[16] = {0}; Uint16 rmsAverageCurrent[4] = {0}; Uint16 i=0; main() { // Step 1. Initialize System Control: // PLL, WatchDog, enable Peripheral Clocks // This example function is found in the DSP2833x_SysCtrl.c file. InitSysCtrl(); // Specific clock setting for this example: EALLOW; SysCtrlRegs.HISPCP.all = ADC_MODCLK; // HSPCLK = SYSCLKOUT/ADC_MODCLK EDIS; // Step 2. Initialize GPIO: // This example function is found in the DSP2833x_Gpio.c file and // illustrates how to set the GPIO to it's default state. // InitGpio(); // Skipped for this example // Step 3. Clear all interrupts and initialize PIE vector table: // Disable CPU interrupts DINT; // Initialize the PIE control registers to their default state. // The default state is all PIE interrupts disabled and flags // are cleared. // This function is found in the DSP2833x_PieCtrl.c file. InitPieCtrl(); // Disable CPU interrupts and clear all CPU interrupt flags: IER = 0x0000; IFR = 0x0000; // Initialize the PIE vector table with pointers to the shell Interrupt // Service Routines (ISR). // This will populate the entire table, even if the interrupt // is not used in this example. This is useful for debug purposes. // The shell ISR routines are found in DSP2833x_DefaultIsr.c. // This function is found in DSP2833x_PieVect.c. InitPieVectTable(); // Interrupts that are used in this example are re-mapped to // ISR functions found within this file. EALLOW; // This is needed to write to EALLOW protected register PieVectTable.ADCINT = &adc_isr; EDIS; // This is needed to disable write to EALLOW protected registers // Step 4. Initialize all the Device Peripherals: // This function is found in DSP2833x_InitPeripherals.c // InitPeripherals(); // Not required for this example InitAdc(); // For this example, init the ADC // Enable ADCINT in PIE PieCtrlRegs.PIEIER1.bit.INTx6 = 1; IER |= M_INT1; // Enable CPU Interrupt 1 EINT; // Enable Global interrupt INTM ERTM; // Enable Global realtime interrupt DBGM // Specific ADC setup for this example: AdcRegs.ADCTRL1.bit.ACQ_PS = ADC_SHCLK; AdcRegs.ADCTRL3.bit.ADCCLKPS = ADC_CKPS; AdcRegs.ADCTRL3.bit.SMODE_SEL=0x1; AdcRegs.ADCTRL1.bit.SEQ_CASC = 1; // 1 Cascaded mode AdcRegs.ADCTRL2.bit.INT_ENA_SEQ1 = 1; // Enable SEQ1 interrupt (every EOS) AdcRegs.ADCST.bit.INT_SEQ1_CLR=1; AdcRegs.ADCMAXCONV.all=0x0007; AdcRegs.ADCCHSELSEQ1.bit.CONV00 = 0x0; AdcRegs.ADCCHSELSEQ1.bit.CONV01 = 0x0; AdcRegs.ADCCHSELSEQ1.bit.CONV02 = 0x0; AdcRegs.ADCCHSELSEQ1.bit.CONV03 = 0x0; AdcRegs.ADCCHSELSEQ2.bit.CONV04 = 0x0; AdcRegs.ADCCHSELSEQ2.bit.CONV05 = 0x0; AdcRegs.ADCCHSELSEQ2.bit.CONV06 = 0x0; AdcRegs.ADCCHSELSEQ2.bit.CONV07 = 0x0; AdcRegs.ADCTRL1.bit.CONT_RUN = 1; // Setup continuous run // Step 5. User specific code, enable interrupts: // Clear SampleTable for (i=0; i<BUF_SIZE; i++) { SampleTable[i] = 0; } // Start SEQ1 AdcRegs.ADCTRL2.all = 0x2000; for(;;) { j++; } } interrupt void adc_isr(void) { i=20; adcSamplesVoltage[0] = ((int32)(AdcRegs.ADCRESULT0>>4) ); adcSamplesCurrent[0] = ((int32)(AdcRegs.ADCRESULT1>>4) ); // Reinitialize for next ADC sequence AdcRegs.ADCTRL2.bit.RST_SEQ1 = 1; // Reset SEQ1 AdcRegs.ADCST.bit.INT_SEQ1_CLR = 1; // Clear INT SEQ1 bit PieCtrlRegs.PIEACK.all = PIEACK_GROUP1; // Acknowledge interrupt to PIE return; } //=========================================================================== // No more. //===========================================================================