This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
因需对模拟量进行高速AD采样、转换,同时为保证MCU的利用率,将AD转换的结果采用DMA的方式存储到内存中,而且需要将AD转换结果不断的通过DMA方式送到内存,而不影响DSP处理其他任务,不知能否实现,若能实现那如何开启DMA功能呢?谢谢各位!
hongyue,
你应该指的是C28内核吧?
你可以去看一下F28M35的技术手册中关于DMA的一节。里面关于DMA的触发源可以有下面几种
Peripheral interrupt trigger sources
– ADC interrupts 1-4
– Multichannel buffered serial port transmit and receive
– XINT1-3
– CPU Timers 0-2
– ePWM1-9 ADCSOCA and ADSOCB signals
– Software
可搬运的数据源为下面几种:
Data sources/destinations:
– L5-L8 32K x 16 SARAM
– ADC memory bus mapped result registers
– McBSP transmit and receive buffers
– ePWM1-8 / HRPWM1-8
所以你可以使用ADCINT1-4中断信号将ADC结果通过DMA搬运到L5-L8的SRAM中,记得使能ADCINTx中断信号,但是不要在PIE中对ADC使能,这样就不会影响CPU的运行。
关于ADC中断信号还有一点要注意的是如何清除中断标志位,可以在DMA中断中清除,或是直接设置ADC为连续模式,即ADC中断信号的产生不会受中断标志位是否清零影响。
所以答案是可行的。
Eric
Eric,
谢谢您的答复,考虑使用DMA功能是因为CPU要并行处理多种任务,而且要不断地对模拟信号进行采样、转换、处理等操作。正在考虑使用操作系统或是采用MCU的DMA功能哪种方式更好。如果使用sys_bios的话相对来说代码要占用较多的存储空间,使用sys_bios的话应该是对多任务的管理较方面些。
还有个问题就是假如我要对模拟量采样1000个点,然后让DSP对这些数据进行傅里叶变换,与此同时AD模块继续对模拟信号进行重复的操作,那应该怎样启动DSP对这1000点数据进行变换呢,是否可以使用中断方式?