Я являюсь членом исследовательской группы, работающей над проектом, который включает в себя ASIC, передающую RF, и его беспроводной приемник, который должен в конечном итоге отправлять данные на ПК.
Приемник выводит быстрый , непрерывный, асинхронный, нестандартный последовательный сигнал (т. Е. Не SPI, I2C, UART и т. Д.), Поэтому моя работа заключается в написании программного обеспечения микроконтроллера для сопряжения приемника с компьютером. В настоящее время мой подход заключается в использовании инициируемых фронтом прерываний для помещения данных в кольцевой буфер и выполнения всего процесса побитового декодирования в основном цикле. Микроконтроллер должен одновременно выводить эти данные через USB (виртуальный com-порт) на компьютер.
Вот проблема, которую я имею, и одна, которую я ожидаю:
Я не могу обработать буферизованные данные достаточно быстро даже с моим довольно мощным процессором ARM Cortex M3 72 МГц. Скорость передачи составляет 400 кбит / с (2,5 мкс / бит). Для справки, это оставляет только 180 циклов на бит (включая декодирование И ISR, которое имеет ~ 30 циклов служебных данных!). MCU также должен выполнять множество других задач, которые он запрашивает в основном цикле.
Драйвер виртуального USB-порта USB также основан на прерываниях. Это делает меня почти уверенным, что драйвер в конечном итоге будет прерывать процессор так долго, что он пропускает окно 2,5 микросекунды (180 циклов), в котором может передаваться бит. Я не уверен, как обычно разрешаются конфликты / гонки прерываний.
Таким образом, вопрос заключается в том, что можно сделать, чтобы решить эти проблемы, или это неправильный подход вообще? Я готов рассмотреть и менее программно-ориентированные подходы. Например, использование выделенного USB-чипа с каким-то аппаратным конечным автоматом для декодирования, но это незнакомая территория.