void MYDMA_Config(DMA_Channel_TypeDef*DMA_CHx,u32 cmar,u32 cpar,u16 cndtr)
{
u32 DR_Base; //
RCC->AHBENR|=1<<0;//开启DMA1时钟
DR_Base=cpar;
DMA_CHx->CPAR=DR_Base; //DMA1 外设地址
DMA_CHx->CMAR=(u32)cmar; //DMA1,存储器地址
DMA1_MEM_LEN=cndtr; //保存DMA传输数据量
DMA_CHx->CNDTR=cndtr; //DMA1,传输数据量
DMA_CHx->CCR=0X00000000;//复位
DMA_CHx->CCR&=0<<4; //从外设读
DMA_CHx->CCR|=1<<5; //循环模式
DMA_CHx->CCR|=0<<6; //外设地址非增量模式
DMA_CHx->CCR|=0<<7; //存储器非增量模式
DMA_CHx->CCR|=1<<8; //外设数据宽度为8位
DMA_CHx->CCR|=1<<10; //存储器数据宽度8位
DMA_CHx->CCR|=3<<12; //中等优先级
DMA_CHx->CCR|=0<<14; //非存储器到存储器模式
DMA_CHx->CCR|=1<<1; //允许传输完成中断
// DMA_CHx->CCR|=1<<3; //允许出错 中断
DMA_CHx->CCR|=1<<0; //开启DMA传输
MY_NVIC_Init(1,1,DMA1_Channel1_IRQChannel,2);
}
void DMAChannel1_IRQHandler(void)
{LED0=!LED0;
LED1=!LED1;
LED2=!LED2;
LED3=!LED3;
DMA1->IFCR|=1<<1;
// DMA1->IFCR|=1<<3;
}
准确的说是16次传输,才有1次中断 |