我设置DMA的中断在一启动就发生,可以进到中断服务程序中,说明我的各个中断寄存器的设置是没问题的,但是当我设置DMA CH1中断在transfer结束时产生时,就不能进入中断服务程序中,程序执行完后,TRANSFERSTS, RUNSTS, TRANSFER_COUNT这几位都是零,但就是不能产生中断,不知道为什么。谁能帮我看一下,程序哪里出现了问题?谢谢
DMADest = &DMABuf1[0]; //Point DMA destination to the beginning of the array
DMASource = &AdcMirror.ADCRESULT0; //Point DMA source to ADC result register base
DMACH1AddrConfig(DMADest,DMASource);
DMACH1BurstConfig(0,0,0);
DMACH1TransferConfig(159,1,1); //一个transfer包含1024个burst,每完成一次burst,源地址和目的地址先加1,然后再判断是不是需要wrap
DMACH1WrapConfig(15,0,159,0); //每过16个burst,源地址卷回到&AdcMirror.ADCRESULT0,目的地址不变,wrap_step的含义是,在BEG_ADDR的基础上加减,而不是对当前的地址进行加减
DMACH1ModeConfig(DMA_SEQ1INT,PERINT_ENABLE,ONESHOT_DISABLE,CONT_DISABLE,SYNC_DISABLE,SYNC_SRC,
OVRFLOW_DISABLE,SIXTEEN_BIT,CHINT_BEGIN,CHINT_ENABLE); for(i=0;i<SAMPLENUMBER+10;i++)
{
if(i==10)
{
StartDMACH1();//前十次采样不准,舍弃,从第11次采样开始启动DMA
}
AdcRegs.ADCTRL2.bit.SOC_SEQ1 = 1; // The ADC starts manually. } // Translate DMABuf to ADC_Result
/*for (l=0; l<SAMPLENUMBER; l++)
{
ADC_Result[l] = (float)DMABuf1[l] * 3.0 / 4096.0;
}*/
asm (" ESTOP0");
for(;;);
}
// INT7.1
interrupt void local_DINTCH1_ISR(void) // DMA Channel 1
{
// To receive more interrupts from this PIE group, acknowledge this interrupt PieCtrlRegs.PIEACK.all = PIEACK_GROUP7;//向相应位写1对其清零
}