完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
大家好,当尝试使用ADC结合DMA时,我会得到一些意想不到的行为。DMA缓冲器只在第一个和第二个乒乓缓冲器之间的DMA切换之前被填充了四分之一。我使用PIC24EP256GU810和读取8个模拟输入(AN0- AN7)。ADC被设置为使用4个通道并在模拟输入之间交替。DMA被配置为在乒乓模式下使用两个128x8字缓冲器。为了解决它使用外围间接模式。缓冲器被填充如下:缓冲器A:[填充- 0000填充- 0000 ]缓冲器B:[ 0000填充- 0000填充],看来DMA在缓冲器之间切换到早期。我已经多次检查了ADC和DMA CNT的SMPI、DMABL,但无法找到解决方案。请帮我找到解决方案。我已经尝试了一个星期,没有任何进展。源代码:全DMA缓冲器:
以上来自于百度翻译 以下为原文 Hello everyone, When trying to use the ADC in combination with the DMA I get some unexpected behavior. The DMA buffers are only filled for a quarter before the DMA switches between the first and second ping pong buffer. I am using the PIC24EP256GU810 and reading 8 analog inputs (AN0 - AN7). The ADC is set to use 4 channels and alternate between the analog inputs. The DMA is configured to use two 128x8 words buffers in ping pong mode. For addressing it uses Peripheral Indirect mode. The buffers are filled as follows: buffer a: [filled - 0000 - filled - 0000] buffer b: [0000 - filled - 0000 - filled] It seems the DMA is switches to early between the buffers. I have checked the SMPI, DMABL of the ADC and the DMA CNT multiple times but could not find a solution. Please help me find a solution for this. I have been trying for a week now without any progress. Source code: // 8 adc channels, 128 words per channel __eds__ int16_t adc_buffer_a[8][128] __attribute__((eds,aligned(2048))); __eds__ int16_t adc_buffer_b[8][128] __attribute__((eds,aligned(2048))); static volatile uint8_t adc_buffer_ab = 1; static volatile uint8_t adc_buffer_ready = 0; void __attribute__((__interrupt__,no_auto_psv)) _DMA5Interrupt(void) { // Switch buffer adc_buffer_ab ^= 1; adc_buffer_ready = 1; IFS3bits.DMA5IF = 0; // Clear the DMA5 Interrupt Flag } void adc_init(void) { // Init adc AD1CON1bits.FORM = 0; // Data Output Format: Integer AD1CON1bits.SSRCG = 0; AD1CON1bits.SSRC = 7; // Sample Clock Source: auto sample AD1CON1bits.ASAM = 1; // Sampling begins immediately after conversion AD1CON1bits.AD12B = 0; // 10-bit ADC operation AD1CON1bits.SIMSAM = 1; // Samples multiple channels sequentially AD1CON2bits.BUFM = 0; // Start filling buffer from start address AD1CON2bits.CSCNA = 0; // do not Scan AD1CON2bits.CHPS = 2; // Converts CH0, CH1, CH2, CH3 AD1CON2bits.ALTS = 1; // Alternate between sample A and B AD1CON3bits.ADRC = 0; // ADC clock is derived from systems clock AD1CON3bits.SAMC = 16; // Sample time AD1CON3bits.ADCS = 49; // ADC conversion clock AD1CON4bits.ADDMAEN = 1; // Enable DMA // Analog-to-Digital Input Select Register A AD1CHS0bits.CH0SA = 6; // CH0+: AIN6 AD1CHS0bits.CH0NA = 0; // CH0-: VREF AD1CHS123bits.CH123SA = 0; // CH1+: AIN0, CH2+: AIN1, CH3+: AIN2 AD1CHS123bits.CH123NA = 0; // CH1-: VREF, CH2-: VREF, CH3-: VREF // Analog-to-Digital Input Select Register B AD1CHS0bits.CH0SB = 7; // CH0+: AIN7 AD1CHS0bits.CH0NB = 0; // CH0-: VREF AD1CHS123bits.CH123SB = 1; // CH1+: AIN3, CH2+: AIN4, CH3+: AIN5 AD1CHS123bits.CH123NB = 0; // CH1-: VREF, CH2-: VREF, CH3-: VREF // DMA INIT DMA5CONbits.AMODE = 2; // Configure DMA for Peripheral Indirect mode DMA5CONbits.MODE = 2; // Configure DMA for Continuous Ping-Pong mode DMA5CONbits.SIZE = 0; // Word size DMA5PAD = (volatile unsigned int)&ADC1BUF0; // Point DMA to ADC1BUF0 DMA5CNT = 1023; // 1024 DMA request (8 buffers, each with 128 words) DMA5REQ = 13; // Select ADC1 as DMA request source DMA5STAL = __builtin_dmaoffset(adc_buffer_a); DMA5STAH = 0x0000; DMA5STBL = __builtin_dmaoffset(adc_buffer_b); DMA5STBH = 0x0000; IFS3bits.DMA5IF = 0; // Clear the DMA Interrupt Flag bit IEC3bits.DMA5IE = 1; // Set the DMA Interrupt Enable bit AD1CON1bits.ADDMABM = 0; // DMA buffers are built in scatter/gather mode AD1CON2bits.SMPI = 7; // 8 ADC buffers AD1CON4bits.DMABL = 7; // Each buffer contains 128 words IFS0bits.AD1IF = 0; // Clear Analog-to-Digital Interrupt Flag bit IEC0bits.AD1IE = 0; // Do Not Enable Analog-to-Digital interrupt DMA5CONbits.CHEN = 1; // Enable DMA AD1CON1bits.ADON = 1; // Turn on the ADC } Full DMA buffers: Buffer A: 501 500 498 498 497 498 498 497 498 496 496 497 497 497 499 499 500 501 501 500 501 502 503 504 504 504 504 504 504 504 504 504 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 504 505 506 505 505 504 505 504 505 502 503 501 501 501 501 500 498 499 497 497 496 496 497 498 497 496 498 498 497 499 499 500 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 256 256 257 257 257 256 256 257 256 257 257 256 257 257 256 257 257 256 256 257 257 257 257 256 257 257 257 257 257 257 257 257 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 257 256 256 257 257 257 257 257 256 257 257 256 256 256 256 256 257 257 257 256 257 257 257 256 257 256 256 257 257 256 257 257 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 356 356 356 357 356 357 357 356 356 357 356 356 357 356 356 357 356 357 356 357 356 356 357 357 356 356 356 356 356 356 356 357 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 357 356 356 356 357 356 357 356 356 356 357 356 356 357 356 357 356 357 356 356 357 356 356 356 357 356 357 356 356 356 356 357 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 425 425 426 426 426 426 425 426 425 425 425 426 426 427 425 426 426 426 426 426 427 425 426 426 426 426 425 425 425 427 426 426 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 426 425 426 426 426 426 426 426 425 425 426 426 426 426 426 425 426 425 426 426 426 426 425 425 426 426 426 427 426 425 426 426 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 525 525 523 525 523 524 524 523 524 525 525 523 524 524 524 523 523 525 524 525 523 525 523 523 525 524 524 525 524 523 525 523 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 524 524 523 523 525 523 524 524 524 524 523 524 524 524 524 525 523 524 525 523 524 523 525 525 523 524 523 524 524 524 523 525 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 815 812 814 812 814 812 814 815 811 812 813 814 812 811 811 814 813 812 814 812 814 812 814 813 813 812 811 811 813 813 812 814 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 814 813 813 811 814 813 812 813 811 813 815 813 814 812 813 814 811 814 813 813 812 814 812 815 812 814 812 814 814 811 813 812 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 020 020 019 020 019 019 020 020 019 019 019 020 019 019 020 020 019 019 020 019 019 020 019 019 019 021 019 020 019 020 019 019 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 019 019 020 020 020 019 019 021 020 019 020 019 020 018 020 020 020 020 019 020 019 019 020 020 020 020 020 018 020 020 020 019 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 022 022 021 021 022 021 022 021 020 023 021 022 021 022 023 021 022 022 021 021 022 021 021 022 022 021 021 022 021 021 022 022 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 022 022 021 021 022 022 020 021 021 022 022 021 021 021 022 021 022 022 022 022 021 021 021 021 022 021 022 021 021 020 022 022 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 Buffer B: 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 498 497 497 498 498 499 497 499 499 501 500 500 502 502 503 504 504 505 503 505 505 504 505 504 505 504 503 502 501 500 500 501 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 503 504 502 501 501 500 501 498 498 498 497 498 498 496 497 497 497 497 498 498 498 499 500 501 501 500 502 501 503 504 505 504 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 256 257 257 256 256 257 256 257 257 257 257 257 256 256 257 256 257 257 257 257 256 256 256 257 257 256 257 256 256 257 257 257 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 257 256 256 257 257 257 257 256 256 256 256 256 257 257 257 256 257 256 256 257 257 257 256 257 257 257 257 257 257 257 256 257 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 357 356 356 356 357 356 356 356 357 355 356 356 356 356 356 357 356 356 356 356 357 356 356 356 356 356 356 357 357 356 357 356 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 357 356 357 356 356 357 357 356 356 356 356 356 356 357 356 357 356 357 357 356 356 356 357 356 357 357 357 356 356 357 357 356 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 425 427 426 426 426 425 427 425 426 426 426 425 425 427 427 426 426 425 426 425 427 425 426 425 427 426 425 426 426 426 427 426 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 426 426 426 426 426 426 425 426 425 427 426 426 425 425 426 425 426 426 425 425 425 427 427 426 426 426 427 427 426 426 426 426 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 524 523 525 525 523 523 523 524 523 523 525 523 524 524 523 524 523 524 525 524 524 524 524 525 525 524 524 525 523 525 525 523 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 523 524 525 523 525 525 525 524 524 524 524 524 524 524 524 523 525 525 523 525 523 524 523 525 525 524 524 524 524 525 524 524 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 812 811 814 813 814 813 814 811 813 814 813 814 811 813 811 812 812 814 812 813 814 813 814 813 814 814 813 811 814 811 812 814 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 813 814 812 814 812 812 812 814 812 813 814 814 815 814 814 812 812 812 814 812 814 813 813 812 811 815 814 814 812 812 814 811 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 019 019 020 018 020 020 020 019 019 020 020 020 020 018 021 020 019 020 019 020 019 019 020 020 020 019 019 019 019 019 019 019 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 019 019 019 019 019 020 020 019 019 019 019 019 020 019 019 019 020 020 019 020 020 019 019 020 019 020 019 020 019 020 020 019 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 020 022 022 021 021 021 022 022 021 022 021 021 022 021 021 022 022 021 020 022 022 022 022 021 022 021 022 021 021 022 022 021 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 022 021 022 022 022 021 021 021 021 022 021 022 022 022 021 022 022 022 021 022 022 021 021 022 021 022 021 022 021 021 022 021 |
|
相关推荐 |
|
只有小组成员才能发言,加入小组>>
5166 浏览 9 评论
2000 浏览 8 评论
1928 浏览 10 评论
请问是否能把一个ADC值转换成两个字节用来设置PWM占空比?
3174 浏览 3 评论
请问电源和晶体值之间有什么关系吗?PIC在正常条件下运行4MHz需要多少电压?
2226 浏览 5 评论
733浏览 1评论
615浏览 1评论
有偿咨询,关于MPLAB X IPE烧录PIC32MX所遇到的问题
505浏览 1评论
PIC Kit3出现目标设备ID(00000000)与预期的设备ID(02c20000)不匹配。是什么原因
631浏览 0评论
528浏览 0评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-24 04:10 , Processed in 1.240182 second(s), Total 77, Slave 60 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号