完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
嗨,我想让ADC与DSPIC33 EP512MC202 MCU上的DMA一起工作。我用的是MICROStiCK II开发工具包。我用10位模式初始化ADC1,用CH0和CH1用乒乓模式读取AN3中的数据。我使用2个DMA缓冲器,我使用PROTFF()和UART从UART到USB桥接器打印中断数据。我把我的代码放在数据表中的例子中。我所面临的问题是,我似乎没有读取缓冲区中的任何数据。缓冲区具有与打印时初始化的值相同的值。我的缓冲区初始化:[uint16_t BUFFER_A[1024];uint16_t BUFFER_B[1024];]我的ADC初始化函数:[void initAdc1(void){/*设置端口配置*//ANSELA=ANSELC=ANSELD=ANSELG=0x0000;//ANSELB=0x//确保AN0为模拟AN0//ANSELA=8;//设定AN3为模拟ANSELA=0x0013;ANSELB=0x0107;//ANSELB=0x0107;//ANSELB=0X0107;//ANSESELB=0X0008;//TRISA/TRISA=0x00001E;//TRISA=0x001SA/TRISA=0x001E;//TRISA=0xTRISA/TRISA=0x001E;//TRISB=0xFF7FF;//TRISB=0xF7FF;/*初始化ADC模块*////////AD1CON1CON1ADC模块*////ADON=1;//ADC在空闲模式AD1CON1bits中继续。ADSIDL=0;//DMA缓冲区按照转换AD1CON1bits的顺序写入。ADDMABM=1;//10位操作AD1CON1bits.AD12B=0;//Integer Output//AD1CON1bits.FORM=3;AD1CON1bits.FORM=0;//Sample 2信道同时AD1CON1bits.SIMSAM=1;//Sampling立即开始。上次转换后,AD1CON1bits.ASAM=1;AD1CON1bits.SSRCG=0;AD1CON1bits.SSRC=7;AD1CON2=0x0100;//选择2通道模式,在每个采样//ADC时钟从系统时钟AD1CON3bits导出后,增量DMA指针。4*Tcy=TADAD1CON3比特.ADCS=3;//TAD=TCY*(ADCS+1)=(1/40MHz)=(1/40MHz)*3=75ns(13.3MHz)//ADC转换时间为10位Tconv=12位Tconv=12*Tad=900ns(1.1MHz)=12*Tad=900ns(1.1Msp)//AD1CON1=900ns(1=1.1Msp)//AD1CON1=0x13E4=0x13E4;AD1CON4=0x1313E4;AD1CON4=0x0100;AD1CON4=AD1CON4=0XCON4=0XCON4=0XCON4=0XCONMUXA inpu*///AD1CHS0bits.CH0SA=0;////AD1CHS0bits.CH0SA=0;///对CCH0+ve输入AD1CHS0位,CH0+ve输入AD1CH1CH1CHS0位0;///选择AN0为CH0+ve输入端CH0+ve输入端输入AD1CH1CH1CH1CH1CHS0位选择AN0.CH1CH1CH1CH1CHS0位,CH0SA=3;//对CCH0SA=3;//对CCH0+输入端CH0+输入端CH1+V输入端CH1CH1CH1CH1CH1CH1CH1CH1CHS1S12323位选择AN0,选择AN0,选择AN0,CH1 CH1 CH1 CH1用于CH1+ve输入AD1CHS123bI.CH123NA=0;//选择VREF-for CH1-ve输入/*启用ADC模块并提供ADC稳定延迟*/AD1CON1bits.ADON=1;//Delay_us(20);}]我的DMA初始化功能:[void DMA_Initialize(void){//初始化启用的信道//AMODE外围间接寻址模式;CHEN e启用;DIR从外围地址读取,写入RAM地址;半数数据移动时半数启动中断;大小16位;禁用NULLW;启用模式连续,乒乓模式;启用//DMA0CON=0x9022&0x7FFF;//启用DMA信道后;//FORCE禁用;IRQSEL ADC1;//DMA0REQ=0xD;//CNT 0;//DMA0CNT=BUFFER_SIZE-1;//STA 4096;//初始化DMA缓冲器//DMA0STAL=0x1000;//每次传输一个单词DMA0CONbits.SIZE=0;//从外围设备读写到RAM DMA0CONbits.DIR=0;//当整个传输完成DMA0CONbits.HAL.F=0;//正常操作DMA0CONbits.NULLW=0;//DMA配置用于外围间接模式DMA0CONbits.AMODE=2;//配置用于连续乒乓模式DMA0CONbits.MODE=2;DMA0PAD=(int)&ADC1BUF0;//ADC1选择作为DMA请求源DMA0REQ=13;DMA0CNT=(BUFFER_SIZE-1);DMA0STAL=u builtin_dma偏移量(&BUFFER_B);DMA0STAH=260STAH=u builtin_dmaoffs偏移量(& BUBUFFER_A);DMA0STAH=_bu_builtin_dma偏移量(&& BUBUBUBUBUFFER_A);DMA0STAH=260STAH=_builtin_dmatin_dmapage(& BUFFER_BUFFER_A)(& BUFFER_A);DMA0STA=uu0STAH=u Bu=uu_builtin_dmaTI_dmatin_dmatin_dmamaMAP(&;DMA0STASTAH=0x0;//清除通道0中断标志;IFS0bit。MA0IF=false;//启用信道0中断IEC0bits.DMA0IE=1;//启用DMA信道0 DMA0CONbits.CHEN=1;}]有人对我可以尝试什么有什么建议吗?我已经尝试切换到AN0(就像在示例代码中,我也有同样的问题)。我还尝试过:[_eds_unsigned int BUFFER_A[8]u.((eds,space(dma));u eds_unsigned int BUFFER_B[8]u.((eds,space(dma));]初始化DMA缓冲区,但是,我得到一个错误,在我使用的设备上不支持DPSRAM,并且内存空间不能全部。我知道我错过了什么,但我不知道我的问题在哪里。有人有什么建议吗?谢谢!
|
|
相关推荐
1个回答
|
|
嗨,在这个存档中有很多代码的例子:HTTP://CaseV.IS/ECB4P.它们从CE4XXX开始。
|
|
|
|
只有小组成员才能发言,加入小组>>
5036 浏览 9 评论
1935 浏览 8 评论
1872 浏览 10 评论
请问是否能把一个ADC值转换成两个字节用来设置PWM占空比?
3088 浏览 3 评论
请问电源和晶体值之间有什么关系吗?PIC在正常条件下运行4MHz需要多少电压?
2157 浏览 5 评论
597浏览 1评论
465浏览 1评论
PIC Kit3出现目标设备ID(00000000)与预期的设备ID(02c20000)不匹配。是什么原因
493浏览 0评论
395浏览 0评论
IPECMD命令烧录AVR128DA48芯片,报找不到芯片错误
874浏览 0评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-9-2 22:17 , Processed in 1.056416 second(s), Total 49, Slave 42 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191