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;
}