我有一个装有24位8通道ADC(谷歌MCP3914评估板了解更多详细信息......)的基于PIC24的系统。 当缓冲区已满时(由不同的中断完成),我已经获得了所有8个通道的采样板,将数据存储在512x8缓冲区中,并使用USB模块将数据传输到PC。PIC24中的多任务处理
唯一的问题是,当MCU传输数据时(UART传输中断的优先级高于ADC读取中断的优先级),ADC不会采样数据,因此会有数据丢失(采样率约为500采样/秒) 。 有什么办法可以防止这种数据丢失?也许有些多任务处理?
我有一个装有24位8通道ADC(谷歌MCP3914评估板了解更多详细信息......)的基于PIC24的系统。 当缓冲区已满时(由不同的中断完成),我已经获得了所有8个通道的采样板,将数据存储在512x8缓冲区中,并使用USB模块将数据传输到PC。PIC24中的多任务处理
唯一的问题是,当MCU传输数据时(UART传输中断的优先级高于ADC读取中断的优先级),ADC不会采样数据,因此会有数据丢失(采样率约为500采样/秒) 。 有什么办法可以防止这种数据丢失?也许有些多任务处理?
简单地将信息传送到UART寄存器不使用中断,但通过轮询位TXIF
while (PIR1.TXIF == 0);
TXREG = "the data you want to send";
这同样适用于ADC转换:如果你使用的中断启动/停止转换,简单地轮询所需的位(ADON)和多数民众赞成它。
TX位和AD位可能因您的PIC而异。
这可以防止MCU进入中断服务程序并松开3-4个样本。
在PIC24中,可以为中断分配8个优先级中的一个。请参阅“系列参考手册”中的相应章节 - >http://ww1.microchip.com/downloads/en/DeviceDoc/70000600d.pdf
或者,您可以使用非常方便的DMA通道。您可以配置您的ADC使用DMA,因此采样和馈送缓冲区将不会使用任何CPU时间,这与UART I相同。
http://ww1.microchip.com/downloads/en/DeviceDoc/39742A.pdf http://esca.atomki.hu/PIC24/code_examples/docs/manuallyCreated/Appendix_H_ADC_with_DMA.pdf
为我工作,谢谢!我使用中断保持采样,但现在通过轮询完成传输,无中断... – Muhammad