| 程序里有这个 DMA_ERQ |= (1 << channel); /* Enable DMA request. Important! */ DMA_ERQ和DMA_SERQ有什么区别? |
void DMA1_Init(void)
{
SIM_SCGC6|=SIM_SCGC6_DMAMUX_MASK;//打开DMA多路复用器时钟
SIM_SCGC7|=SIM_SCGC7_DMA_MASK;//打开DMA模块时钟
DMAMUX_CHCFG1=DMAMUX_CHCFG_SOURCE(52);//DMA通道1对应52号DMA请求,即PORTD
DMA_ERQ|=DMA_ERQ_ERQ1_MASK;//使能通道1硬件DMA请求
DMA_TCD1_CITER_ELINKNO=DMA_CITER_ELINKNO_CITER(10);//当前主循环次数
DMA_TCD1_BITER_ELINKNO=DMA_BITER_ELINKNO_BITER(10);//起始主循环次数
DMA_TCD1_SADDR=(uint32)&GPIOB_PDIR;//设置源地址GPIO口
DMA_TCD1_SOFF=0;//源地址不变
//DMA_TCD1_NBYTES_MLOFFYES=DMA_NBYTES_MLOFFYES_NBYTES(1)+DMA_NBYTES_MLOFFNO_SMLOE_MASK+DMA_NBYTES_MLOFFYES_MLOFF(-4);//传送4字节
DMA_TCD1_NBYTES_MLNO=DMA_NBYTES_MLNO_NBYTES(1);//每次读取一字节
DMA_TCD1_SLAST=0;//主循环结束后源地址0回写tcd
DMA_TCD1_DLASTSGA=0;//主循环结束后目的地址-10回写tcd
DMA_TCD1_DADDR=(uint32)PORTB_BUFF;//设置目的地址
DMA_TCD1_DOFF=1;//每次写目的地址加1
DMA_TCD1_ATTR=DMA_ATTR_SSIZE(0)+DMA_ATTR_DSIZE(0);//源数据宽度8bit,目的数据宽度8bit
DMA_TCD1_CSR=0;
DMAMUX_CHCFG1|=DMAMUX_CHCFG_ENBL_MASK;//DMA通道使能
//DMA_TCD1_CSR|=DMA_CSR_INTMAJOR_MASK;//使能DMA中断
//DMA_TCD0_CSR|=DMA_CSR_START_MASK;
}

| 欢迎光临 智能车制作 (http://111.231.132.190/) | Powered by Discuz! X3.2 |