This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

c6727 dmax interrupt initialization

hello, I am programming the c6727 dmax interrup to make the data from mcasp to extral memory . but now, my programm can not work successfully, special in the following step 

   

int SetupInterrupts(void)
{
    CSL_Status                    status;  
    CSL_IntcGlobalEnableState     state;

   
    // INTC Module Initialization
 status = CSL_intcInit( NULL );

    // Hook Transfert completion Notification from DMAX (INT15)
    hIntc = CSL_intcOpen( &intcObj, CSL_INTC_EVENTID_DMAXEVTOUT7, NULL, &status );
 if( (hIntc == NULL) || (status != CSL_SOK) )
  {return -1;}
   
    CSL_intcHookIsr( CSL_INTC_EVENTID_DMAXEVTOUT7, (Uint32)dmax_isr ); 
    CSL_intcEventEnable( CSL_INTC_EVENTID_DMAXEVTOUT7, &eventStat );

    // Hook NMI                                                     
  
   
    // Enable Interrupts                                           
 CSL_intcGlobalEnable( &state ); 

 

i don't know what mistake i have. please give me the answer .if the mistake is not here. i give  the whole dmax  initialization below.I extremely wish that  you can notice my problem!

thank you!

 

// dMax configuration section   
// DMAX Initialization 
void dmax_init(void)
{

 dmaxstatus = CSL_dmaxInit(NULL);
    if (dmaxstatus != CSL_SOK) {  
        printf ("\nTEST FAILED\nERROR:CSL_dmaxInit");  
        return;  
    }     

 adcDmaxObj.eventUid = CSL_DMAX_HIPRIORITY_MCASP0ERR_UID ;
 adcDmaxObj.paramUid = CSL_DMAX_HIPRIORITY_PARAMETERENTRY_ANY;
   hDmaxAdc = CSL_dmaxOpen (&adcDmaxObj, CSL_DMAX, NULL, &dmaxstatus);
    if ((hDmaxAdc == NULL) || (dmaxstatus != CSL_SOK))
     {
        printf ("\nTEST FAILED\nERROR:ad CSL_DMAX open failed");
        dmaxstatus = CSL_ESYS_BADHANDLE;
        return;
     }
 else printf("ad DMAX open finished!\n");
       

    // DMAX Parameter initialization structure
    // Source Reload Address0
    adcGpxfrParameterSetup.srcReloadAddr0 = (Uint32)0x54000000;     // McASP0   
    // Destination Reload Address0
    adcGpxfrParameterSetup.dstReloadAddr0 = (Uint32)dmaxAdcBuffer[0];  
    // Source Reload Address1
    adcGpxfrParameterSetup.srcReloadAddr1 = (Uint32)0x54000000;     // McASP0   
    // Destination Reload Address1
    adcGpxfrParameterSetup.dstReloadAddr1 = (Uint32)dmaxAdcBuffer[1];
    // Source Index0 Value
    adcGpxfrParameterSetup.srcIndex0 = (Int16)1;
    // Destination Index0 Value
    adcGpxfrParameterSetup.dstIndex0 = (Int16)4;
    // Source Index1 Value
    adcGpxfrParameterSetup.srcIndex1 = (Int16)-(NUM_CHANNEL-1);
    // Destination Index1 Value
    adcGpxfrParameterSetup.dstIndex1 = (Int16)4;
    // Source Index2 Value
    adcGpxfrParameterSetup.srcIndex2 = (Int16)-(NUM_CHANNEL-1);
    // Destination Index2 Value
    adcGpxfrParameterSetup.dstIndex2 = (Int16)-( (STEREO*NUM_CHANNEL-1)*FRAME_SIZE - 1),
    // Dimension 0 Count Value
    adcGpxfrParameterSetup.count0 = (Uint16)NUM_CHANNEL;
    // Dimension 1 Count Value
    adcGpxfrParameterSetup.count1 = (Uint16)STEREO;
    // Dimension 2 Count Value
    adcGpxfrParameterSetup.count2 = (Uint16)FRAME_SIZE;   

 // DMAX Event5 initialization structure
    // Event Type
    adcGpxfrEventSetup.etype = CSL_DMAX_EVENT26_ETYPE_GENERALXFR;
    // Pointer to parameterSetup
    adcGpxfrEventSetup.paramSetup = &adcGpxfrParameterSetup;//指向参数配置结构体
    // Quantum Transfer Size Limit
    adcGpxfrEventSetup.qtsl = CSL_DMAX_EVENT26_QTSL_MOVE8_ELE;//每次传输8位
    // Transfer Synchronization
    adcGpxfrEventSetup.sync = 0;//传输同步为0
    // Transfer Complete Code
    adcGpxfrEventSetup.tcc = 1;//
    // Alternate Transfer Mode Interrupt
    adcGpxfrEventSetup.atcint = CSL_DMAX_EVENT26_ATCINT_DISABLE;//Alternate Transfer Mode Interrupt  disable
 
    // Transfer Completion Interrupt
    adcGpxfrEventSetup.tcint = CSL_DMAX_EVENT26_TCINT_ENABLE;// Transfer Completion Interrupt enable
    // Reload
    adcGpxfrEventSetup.rload = CSL_DMAX_EVENT26_RLOAD_ENABLE;//重载enable
    // Counter Configuration
    adcGpxfrEventSetup.cc = CSL_DMAX_EVENT26_CC_COUNT2_15_COUNT1_8_COUNT0_8;//计数器设置
    // Element Size
    adcGpxfrEventSetup.esize = CSL_DMAX_EVENT26_ESIZE_32BIT;//每个数据32位
    // Pointer to Transfer Entry (pte)
    adcGpxfrEventSetup.pte = hDmaxAdc->paramPtr;
 // DMAX initialization structure
 // DMAX Priority
    adcDmaxHwSetup.priority = CSL_DMAX_HI_PRIORITY;
 //DMAX Polarity
    adcDmaxHwSetup.polarity = CSL_DMAX_POLARITY_RISING_EDGE;
 // DMAX Event initialization structure
    adcDmaxHwSetup.eventSetup = &adcGpxfrEventSetup;
    status = CSL_dmaxHwSetup( hDmaxAdc, &adcDmaxHwSetup );   
    if ( status != CSL_SOK )
       printf( "Failed to setup the dMAX Module \n" );

 
       /* Event Enable                                                  */
  
 // Dmax Event Disable
 CSL_dmaxHwControl( hDmaxAdc, CSL_DMAX_CMD_EVENTDISABLE, NULL ); 

 // Clear TCC
 CSL_dmaxHwControl( hDmaxAdc, CSL_DMAX_CMD_CLEARTCC, NULL ); 

 // Dmax Event Enable
    dmaxstatus=CSL_dmaxHwControl( hDmaxAdc, CSL_DMAX_CMD_EVENTENABLE, NULL );
    if (dmaxstatus != CSL_SOK)   
        printf ("\nTEST FAILED\nERROR:CSL_addmaxHwControl");   
 
     SetupInterrupts();
 

}

 

 


int SetupInterrupts(void)
{
    CSL_Status                    status;  
    CSL_IntcGlobalEnableState     state;

   
    // INTC Module Initialization
 status = CSL_intcInit( NULL );

    // Hook Transfert completion Notification from DMAX (INT15)
    hIntc = CSL_intcOpen( &intcObj, CSL_INTC_EVENTID_DMAXEVTOUT7, NULL, &status );
 if( (hIntc == NULL) || (status != CSL_SOK) )
  {return -1;}
   
    CSL_intcHookIsr( CSL_INTC_EVENTID_DMAXEVTOUT7, (Uint32)dmax_isr ); 
    CSL_intcEventEnable( CSL_INTC_EVENTID_DMAXEVTOUT7, &eventStat );

    // Hook NMI                                                     
  
   
    // Enable Interrupts                                           
 CSL_intcGlobalEnable( &state ); 

 return 0;
}   

 


interrupt void dmax_isr( void )

      int n;       
        n=1;


}