我是研究团队的一名本科生,从事一个涉及RF传输ASIC及其无线接收器的项目,该无线接收器最终应将数据发送到PC。
接收器输出快速,连续,异步的非标准串行信号(即非SPI,I2C,UART等),因此我的工作是编写微控制器软件以将接收器连接到计算机。当前,我的方法是使用边沿触发的中断将数据放置在循环缓冲区中,并在主循环中执行整个逐位解码过程。微控制器必须同时使用USB(虚拟com端口)将此数据输出到计算机。
这是我遇到的一个问题,也是我预期的一个问题:
即使使用强大的72 MHz ARM Cortex M3处理器,我也无法足够快地处理缓冲的数据。比特率是400 Kbps(2.5 us / bit)。作为参考,每位仅保留180个周期(包括解码和ISR,它具有约30个周期的开销!)。MCU还必须处理在主循环中轮询的许多其他任务。
USB虚拟com端口驱动程序也是基于中断的。这使我几乎可以肯定,驱动程序最终将中断处理器的时间如此之久,以致于错过了可能会传输位的2.5微秒(180周期)窗口。我不确定通常如何解决此类中断冲突/竞赛。
所以问题很简单,一个人可以做什么来解决这些问题,或者这根本不是正确的方法吗?我也愿意考虑减少以软件为中心的方法。例如,使用带有某种硬件状态机的专用USB芯片进行解码,但这并不熟悉。