在线时间514 小时
UID2025756
注册时间2013-7-16
NXP金币0
该用户从未签到
金牌会员
 
- 积分
- 9267
- 最后登录
- 1970-1-1
|
发表于 2014-12-11 15:54:47
|
显示全部楼层
楼主你好!
不好意思,迟给你回复了。
我刚刚测试了,使用ADC2转换triggerDMA转换是可以成功的。
我认为,不不仅仅需要查看DMAMUX,DMA的配置,你还要保证你的ADC2的DMA trigger是使能的,并且先单独测试下你的ADC2能转换完成,比如COCO置位了。
这里我贴出DMA的配置代码,供你参考:
void Dma_Conif(uint8_t Dma_Chn, uint8_t DmaMux_Sou, uint32_t Sou, uint32_t Add,uint16_t Block_Size)
{
SIM_SCGC7 |= SIM_SCGC7_DMA_MASK; //DMA CLOCK
SIM_SCGC6 |= SIM_SCGC6_DMAMUX1_MASK; // DMAMUX CLOCK
DMAMUX_CHCFG_REG(DMAMUX1_BASE_PTR, Dma_Chn) = (
0|
DMAMUX_CHCFG_ENBL_MASK | // enalbe DMA channle
DMAMUX_CHCFG_SOURCE(DmaMux_Sou) // assign DMA trigger source
);
DMA_CR = 0 | DMA_CR_GRP1PRI(1);
DMA_BASE_PTR->TCD[Dma_Chn+16].SADDR = Sou; //DMA source address
DMA_BASE_PTR->TCD[Dma_Chn+16].DADDR = Add; //0x20000002;//Add; // DMA destination address
DMA_BASE_PTR->TCD[Dma_Chn+16].NBYTES_MLNO = 1; // minor byte transfer count
DMA_BASE_PTR->TCD[Dma_Chn+16].ATTR = ( // DMA transsmit attributes
0 |
DMA_ATTR_SMOD(0) | //Source address modulo feature is disabled
DMA_ATTR_SSIZE(0) | // source data transfer size is 8-bit
DMA_ATTR_DMOD(0) | //destination address modulo feature is disabled
DMA_ATTR_DSIZE(0) // destination data transfer size is 8-bit
);
DMA_BASE_PTR->TCD[Dma_Chn+16].SOFF = 0x0000; // the current source address to next is one byte
//DMA_BASE_PTR->TCD[Dma_Chn].DOFF = 0x0002; // the destination address doesn't change
DMA_BASE_PTR->TCD[Dma_Chn+16].DOFF = 0x0000; // the destination address doesn't change
DMA_BASE_PTR->TCD[Dma_Chn+16].SLAST = 0x00; // end major_loop not change source address
DMA_BASE_PTR->TCD[Dma_Chn+16].DLAST_SGA = 0x00; // end major_loop not change destination address
DMA_BASE_PTR->TCD[Dma_Chn+16].CITER_ELINKNO = DMA_CITER_ELINKNO_CITER(Block_Size); // major loop current count
DMA_BASE_PTR->TCD[Dma_Chn+16].BITER_ELINKNO = DMA_CITER_ELINKNO_CITER(Block_Size); // major lteration count
DMA_BASE_PTR->TCD[Dma_Chn+16].CSR = 0; // clear 0
// DMA_INT &=~(1<<(Dma_Chn+16)); // disalbe interrupt
// DMA_BASE_PTR->TCD[Dma_Chn+16].CSR &= ~DMA_CSR_INTMAJOR_MASK; // disable major_loop interrupt
// DMA_BASE_PTR->TCD[Dma_Chn].CSR |= 1; // software start
// DMA_ERQ &= ~(1 << (Dma_Chn+16)); //close DMA channle*/
}
void Start_Dma(uint8_t Dma_Chn)
{
DMA_ERQ |= (1 << (Dma_Chn+16)); //enalbe DMA Dma_Chn channle
//DMA_ERQ |= (1 << (Dma_Chn));
}
|
|