|
本帖最后由 suebillt 于 2014-12-30 11:37 编辑
具体代码如下,串口和SSP的都测试过,当数据传输完进入中断后必须重新初始化才能进行下次DMA的接收,否则只能传输一次
void DMA_IRQHandler (void)
{
uint8_t i;
NVIC_DisableIRQ(DMA_IRQn);
if (GPDMA_IntGetStatus(GPDMA_STAT_INT, 0))
{
if(GPDMA_IntGetStatus(GPDMA_STAT_INTTC, 0))
{
GPDMA_ClearIntPending (GPDMA_STATCLR_INTTC, 0);
dma_finished = 1;// Channel0_TC++;
for(i=0;i<DMA_SIZE;i++)
{
printf("%d",DMADest_Buffer);
}
lpc1788_DMA_Init();
}
if (GPDMA_IntGetStatus(GPDMA_STAT_INTERR, 0))
{
GPDMA_ClearIntPending (GPDMA_STATCLR_INTERR, 0);
}
}
NVIC_EnableIRQ(DMA_IRQn);
}
void lpc1788_DMA_Init(void)
{
GPDMA_Channel_CFG_Type GPDMACfg;
NVIC_DisableIRQ(DMA_IRQn);
NVIC_SetPriority(DMA_IRQn, ((0x01<<3)|0x01));
GPDMA_Init();
GPDMACfg.ChannelNum = 0;
GPDMACfg.SrcMemAddr =0;
GPDMACfg.DstMemAddr = (uint32_t)DMADest_Buffer;
GPDMACfg.TransferSize = sizeof(DMADest_Buffer);
GPDMACfg.TransferType = GPDMA_TRANSFERTYPE_P2M;
GPDMACfg.SrcConn = GPDMA_CONN_SSP0_Rx;
GPDMACfg.DstConn = 0;
GPDMACfg.DMALLI = 0;
GPDMA_Setup(&GPDMACfg);
LPC_SSP0->DMACR |=0x11;//SSP_DMACmd (0, SSP_DMA_RXDMA_EN, ENABLE);
NVIC_EnableIRQ(DMA_IRQn);
GPDMA_ChannelCmd(0, ENABLE);
} |
阿莫论坛20周年了!感谢大家的支持与爱护!!
曾经有一段真挚的爱情摆在我的面前,我没有珍惜,现在想起来,还好我没有珍惜……
|