Multitasking PIC24中的多任务处理

Multitasking PIC24中的多任务处理,multitasking,pic,adc,pic24,Multitasking,Pic,Adc,Pic24,我有一个基于PIC24的系统,配备了24位8通道ADC谷歌MCP3914评估板,了解更多详细信息。。。。 我有一块电路板,可以对8个通道进行采样,将数据存储在512x8缓冲区中,并使用USB模块将数据传输到PC,当缓冲区已满时,它是通过不同的中断完成的 唯一的问题是,当MCU传输数据时,UART传输中断的优先级高于ADC读取中断的优先级,ADC未对数据进行采样,因此数据丢失采样率约为500采样/秒。 有没有办法防止这种数据丢失?可能是一些多任务处理?只需将信息传输到UART寄存器,而不使用中断,

我有一个基于PIC24的系统,配备了24位8通道ADC谷歌MCP3914评估板,了解更多详细信息。。。。 我有一块电路板,可以对8个通道进行采样,将数据存储在512x8缓冲区中,并使用USB模块将数据传输到PC,当缓冲区已满时,它是通过不同的中断完成的

唯一的问题是,当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个样本。

只需将信息传输到UART寄存器,而不使用中断,而是轮询位TXIF

while (PIR1.TXIF == 0);
TXREG = "the data you want to send";
这同样适用于ADC转换:如果使用中断来启动/停止转换,只需轮询ADON上所需的位即可

TX位和AD位可能因您的PIC而异


这可防止MCU进入中断服务程序并丢失3-4个样本。

在PIC24中,中断可分配8个优先级中的一个。查看系列参考手册中的相应章节->

在PIC24中,中断可分配为8个优先级中的一个。查看《家庭参考手册》中的相应章节->

或者,您可以使用非常方便的DMA通道。您可以将ADC配置为使用DMA,因此采样和馈送缓冲区不会占用任何CPU时间,UART I beleive也是如此


或者,您可以使用非常方便的DMA通道。您可以将ADC配置为使用DMA,因此采样和馈送缓冲区不会占用任何CPU时间,UART I beleive也是如此


为我工作,谢谢!我使用中断保持采样,但现在传输是通过无中断轮询完成的…对我来说很有用,谢谢!我使用中断保持采样,但现在传输是通过无中断轮询完成的。。。