void Dma1_Ch0_Init(void)//DMA1 通道0的配置函数,这个配置的是给串口1的
{
char * RxBuffer;
RxBuffer = RxBuffer1;
//TIMER0_Cmd(M4_TMR01, Tim0_ChannelA,Enable);
stc_dma_config_t stcDmaInit;
stc_irq_regi_conf_t stcIrqRegiCfg;
/* Enable peripheral clock */
PWC_Fcg0PeriphClockCmd(PWC_FCG0_PERIPH_DMA1 | PWC_FCG0_PERIPH_DMA2,Enable);
/* Enable DMA. */
DMA_Cmd(M4_DMA1,Enable);
/* Initialize DMA. */
MEM_ZERO_STRUCT(stcDmaInit);
stcDmaInit.u16BlockSize = 1u; /* 1 block */
stcDmaInit.u32SrcAddr = ((uint32_t)(&M4_USART1->DR)+2ul); /* Set source address. */
stcDmaInit.u32DesAddr = (uint32_t)RxBuffer; /* Set destination address. */
//stcDmaInit.u32DesAddr = (uint32_t)(&M4_USART1->DR);
stcDmaInit.stcDmaChCfg.enSrcInc = AddressFix; /* Set source address mode. */
stcDmaInit.stcDmaChCfg.enDesInc = AddressIncrease;//地址自增
stcDmaInit.stcDmaChCfg.enIntEn = Enable; /* Enable interrupt. */
stcDmaInit.stcDmaChCfg.enTrnWidth = Dma8Bit; /* Set data width 8bit. */
stcDmaInit.u16TransferCnt = 256;//这里好像是传输的次数吧,先试试看了
DMA_InitChannel(M4_DMA1, DmaCh0, &stcDmaInit);
//选择DMA通道
DMA_ChannelCmd(M4_DMA1, DmaCh0, Enable);
/* 清除DMA标志 */
DMA_ClearIrqFlag(M4_DMA1, DmaCh0, TrnCpltIrq);
/* Enable peripheral circuit trigger function. */
PWC_Fcg0PeriphClockCmd(PWC_FCG0_PERIPH_AOS,Enable);//外部触发DMA传输开启
/* Set DMA trigger source. */
DMA_SetTriggerSrc(M4_DMA1, DmaCh0, EVT_USART1_RI);
/* Set DMA block transfer complete IRQ */
stcIrqRegiCfg.enIRQn = Int009_IRQn;
stcIrqRegiCfg.pfnCallback = &DmaBtcIrqCallback;
stcIrqRegiCfg.enIntSrc = INT_DMA1_BTC0;
enIrqRegistration(&stcIrqRegiCfg);
NVIC_SetPriority(stcIrqRegiCfg.enIRQn, DDL_IRQ_PRIORITY_02);
NVIC_ClearPendingIRQ(stcIrqRegiCfg.enIRQn);
NVIC_EnableIRQ(stcIrqRegiCfg.enIRQn);
stcIrqRegiCfg.enIRQn = Int010_IRQn;//使能传输完成中断,也就是到了256个之后的中断,打算的是如果一包数据超过256个就不要了
stcIrqRegiCfg.pfnCallback = &DmaTcIrqCallback;
stcIrqRegiCfg.enIntSrc = INT_DMA1_TC0;
enIrqRegistration(&stcIrqRegiCfg);
NVIC_SetPriority(stcIrqRegiCfg.enIRQn, DDL_IRQ_PRIORITY_02);
NVIC_ClearPendingIRQ(stcIrqRegiCfg.enIRQn);
NVIC_EnableIRQ(stcIrqRegiCfg.enIRQn);
}
|