我采用NCU100LE3AN单片机,有PDMA功能,如果单用AD不用PDMA是成功的,我一次想采样256个数据,用PDMA读完256数据后中断处理数据,但是按下面的程序,PDMA死活不进中断,请教一下大家,哪里有问题了?
程序代码如下:
ADC->ADCR.ADEN = 1; //使能ADC模块
ADC->ADCR.DIFFEN = 0; //单端输出模式.
ADC->ADCR.ADMD = 3; //转换模式.连续转换模式
ADC->ADCHER.CHEN= 0x10; //通道选择 ADC4通道
ADC->ADSR.ADF =1; //写1清中断标志
ADC->ADCR.ADIE = 0; //1--开ADC中断.
ADC->ADCR.PTEN=1;//使能PDMA传送.要使用PDMA传送,必须软件关闭ADIE
/**********PDMA初始化步骤*************
1. PDMA时钟使能,这个要在解锁寄存器.
2. 使用PDMA的通道
3. 哪个外设使用PDMA功能.\
4. PDMA传送的方向.
5.PDMA的目的地址
6.PDMA的源地址
7.PDMA传送的数据宽度.
8.传送方向.????
9.源地址传给完了是固定还是增加.
10.目的地址是不变还是变化.
11.传送的数据长度.
**********************/
UNLOCKREG(); //解锁操作的寄存器
SYSCLK->AHBCLK.PDMA_EN =1; //使能PDMA时钟
LOCKREG();
NVIC_DisableIRQ(PDMA_IRQn);//
PDMA0->CSR. APB_TWS=2;//传送的数据宽度是:16位
PDMA0->CSR.DAD_SEL=0;//传送的目的地址连续增加.
PDMA0->CSR.SAD_SEL=2;//传送的源地址固定不变.
PDMA0->CSR.MODE_SEL=1;//外设到内存传送.
PDMA0->CSR.PDMACEN=1;//使能PDMA传送数据.
PDMA0->SAR=0x400E0010;//PDMA传输的源地址.ADC4通道
PDMA0->DAR=(uint32_t)ADCINPUT; //PDMA传送的目的地址,也就是数组的地址.
PDMA0->BCR=256; //PDMA传送的字节数.
PDMA0->IER.TABORT_IE=1;//允许WRAP AROUND 中断.
PDMA0->IER.TABORT_IE=0;//禁用异常中断,程序基本功能测试通过优化的时候,开通处理.
PDMA0->CSR.TRIG_EN=1;
PDMA_GCR->GCRCSR.CLK0_EN= 1; //使能通道0的时钟.
PDMA_GCR->PDSSR1.ADC_RXSEL =0; //PDMA读取APB上的数据. 使用通道0;
NVIC_EnableIRQ(PDMA_IRQn); |