您好!
我想根据这个线程从 ADC 创建 DMA 传输:"如果在单个组中配置了多个通道、是否有任何其他方法可以使用除 FIFO 之外的 DMA 读取 ADC 结果数据"。 这适用于 ADC1组1和组2、实际上 DMA 部件也适用于 ADC1事件组。 但是、当我检查内存时、我发现事件组内存不好:
0xFF3E0000 0x000014AB 0x00002000 0x0000A000 0x0000A000 0x00008000 0x00008000 0x00008000
0xFF3E001C 0x00008000 0x00008000 0x00008000 0x00008000 0x00008000 0x00008000 0x00008000 0x00008000
0xFF3E0038 0x00008000 0x00008000 0x00008000 0x00008000 0x00008000 0x00008000 0x00008000 0x00008000
0xFF3E0054 0x00008000 0x00008000 0x00008000 0x00008000 0x00008000 0x00008000 0x00008000 0x00008000
0xFF3E0070 0x00008000 0x00008000 0x00008000 0x00008000 0x00008000 0x00008000 0x00008000 0x00008000
0xFF3E008C 0x00008000 0x00008000 0x00008000 0x00008000 0x00008000 0x00008000 0x00008000 0x00008000
0xFF3E00A8 0x00008000 0x00008000 0x00008000 0x00008000 0x00008000 0x00008000 0x00008000 0x00008000
0xFF3E00C4 0x00008000 0x00008000 0x00008000 0x00008000 0x00008000 0x00008000 0x00008000 0x00008000
0xFF3E00E0 0x00008000 0x00008000 0x00008000 0x00008000 0x00008000 0x00008000 0x00008000 0x00008000
0xFF3E00FC 0x00008000 0x00001000 0x00002000 0x0000A000 0x0000A000 0x00008000 0x00008000
0xFF3E0118 0x00008000 0x00008000 0x00008000 0x00008000 0x00008000 0x00008000 0x00008000 0x00008000
0xFF3E0134 0x00008000 0x00008000 0x00008000 0x00008000 0x00008000 0x00008000 0x00008000 0x00008000
0xFF3E0150 0x00008000 0x00008000 0x00008000 0x00008000 0x00008000 0x00008000 0x00008000 0x00008000
0xFF3E016C 0x00008000 0x00008000 0x00008000 0x00008000 0x00008000 0x00008000 0x00008000 0x00008000
0xFF3E0188 0x00008000 0x00008000 0x00008000 0x00008000 0x00008000 0x00008000 0x00008000 0x00008000
0xFF3E01A4 0x00008000 0x00008000 0x00008000 0x00008000 0x00008000 0x00008000 0x00008000 0x00008000
0xFF3E01C0 0x00008000 0x00008000 0x00008000 0x00008000 0x00008000 0x00008000 0x00008000 0x00008000
上述存储器应与组2类似:
0xFF3E0070 0x00008000 0x00008000 0x00008000 0x00008000 0x00008000 0x00008000 0x00008000 0x000014A0
0xFF3E008C 0x00002000 0x0000A000 0x00001498 0x00002000 0x0000A000 0x00001494 0x00002000
0xFF3E00A8 0x0000A000 0x000014A5 0x00002000 0x0000A002 0x000014AA 0x00002000 0x0000A000
0xFF3E00C4 0x000014A4 0x00002000 0x0000A000 0x00001000 0x00002000 0x0000A000 0x00001000
0xFF3E00E0 0x00002000 0x0000A000 0x00001000 0x00002000 0x0000A000 0x0000148F 0x00002000
0xFF3E00FC 0x0000A000 0x00008000 0x00008000 0x00008000 0x00008000 0x00008000 0x00008000 0x00008000
我附加了 ADC 配置、这里也是我的 DMA 配置:
dmaEnable(); ADC 通道0的// DMA 配置 dma_config.Sadd =(uint32_t) 0xFF3E0000; dma_config.DADD =(uint32_t) adc_DATA0; DMA_CONFIG.CHCTRL = 0; //链接到下一个通道 DMA_CONFIG.FRCNT = 1; DMA_CONFIG.ELCNT = transfer_size; DMA_CONFIG.ELDOFFSET = 0; DMA_CONFIG.ELSOFFSET = 12; DMA_CONFIG.FRDOFFSET = 0; DMA_CONFIG.FRSOFFSET = 0; DMA_CONFIG.PORTASGN = 4; DMA_CONFIG.RDSIZE = ACCESS_32_BIT; DMA_CONFIG.WRSIZE = ACCESS_32_BIT; dma_config.tType = FRAME_TRANSFRAME; dma_config.ADDMODERD = ADDR_OFFSET; DMA_CONFIG.ADDMODEWR = ADDR_INC1; DMA_CONFIG.AUTOINIT = AUTOINIT_ON; //为 ADC 通道0设置 DMA 控制数据包 dmaSetCtrlPacket (DMA_CH0、DMA_CONFIG); ADC 通道1的// DMA 配置 dma_config.Sadd =(uint32_t) 0xFF3E0004; DMA_CONFIG.DADD =(uint32_t) ADC_Data1; DMA_CONFIG.CHCTRL = 0; //链接到下一个通道 DMA_CONFIG.FRCNT = 1; DMA_CONFIG.ELCNT = transfer_size; DMA_CONFIG.ELDOFFSET = 0; DMA_CONFIG.ELSOFFSET = 12; DMA_CONFIG.FRDOFFSET = 0; DMA_CONFIG.FRSOFFSET = 0; DMA_CONFIG.PORTASGN = 4; DMA_CONFIG.RDSIZE = ACCESS_32_BIT; DMA_CONFIG.WRSIZE = ACCESS_32_BIT; dma_config.tType = FRAME_TRANSFRAME; dma_config.ADDMODERD = ADDR_OFFSET; DMA_CONFIG.ADDMODEWR = ADDR_INC1; DMA_CONFIG.AUTOINIT = AUTOINIT_ON; //为 ADC 通道1设置 DMA 控制数据包 dmaSetCtrlPacket (DMA_CH1、DMA_CONFIG); ADC 通道2的// DMA 配置 dma_config.Sadd =(uint32_t) 0xFF3E0008; dma_config.DADD =(uint32_t) adc_DATA2; DMA_CONFIG.CHCTRL = 0; //链接到下一个通道 DMA_CONFIG.FRCNT = 1; DMA_CONFIG.ELCNT = transfer_size; DMA_CONFIG.ELDOFFSET = 0; DMA_CONFIG.ELSOFFSET = 12; DMA_CONFIG.FRDOFFSET = 0; DMA_CONFIG.FRSOFFSET = 0; DMA_CONFIG.PORTASGN = 4; DMA_CONFIG.RDSIZE = ACCESS_32_BIT; DMA_CONFIG.WRSIZE = ACCESS_32_BIT; dma_config.tType = FRAME_TRANSFRAME; dma_config.ADDMODERD = ADDR_OFFSET; DMA_CONFIG.ADDMODEWR = ADDR_INC1; DMA_CONFIG.AUTOINIT = AUTOINIT_ON; //为 ADC 通道2设置 DMA 控制数据包 dmaSetCtrlPacket (DMA_CH2、DMA_CONFIG); dmaReqAssign (0.7); // MIBADC1 G1连接到 Reqline 10。 将 Reqline 10映射到 DMA 通道0 dmaReqAssign (1、7); // MIBADC1 G1连接到 Reqline 10。 将 Reqline 10映射到 DMA 通道1 dmaReqAssign (2、7); // MIBADC1 G1连接到 Reqline 10。 将 Reqline 10映射到 DMA 通道2 dmaSetChEnable (0、dma_HW); //启用 DMA 通道0 dmaSetChEnable (1、dma_HW); //启用 DMA 通道1 dmaSetChEnable (2、dma_HW); //启用 DMA 通道2 adcStartConversion (adcREG1、adcGROUP0);
那么、问题是、为什么 ADC 事件组工作得不好?
谢谢!
此致、
Keno