Бьюсь над простой с виду проблемой - реализацией spi slave. Проц шустрый (at91sam9260), spi аппаратно есть, от мастера идут посылки вида opcode-address-data. При чтении передаётся opcode-address и тут же идут такты на чтение данных. Не могу сообразить как грамотно сделать:
1. Если через прерывания, то есть только прерывание по приёму байта и даже если я оставляю только сохранение в буфер, то уже проц не поспевает за данными.
2. Если использовать dma, то непонятно как определять конец посылки. Если использовать в качестве признака конца посылки снятие чип селекта, то запарывается алгоритм чтения - чип селект снимается только после всего обмена. Но при дотачивании мастера вариант неплохой.
3. Если использовать поллинг флага без прерывания, то отъедается весь ресурс проца и могут пропадать байты при прерывании.
Так что делать то?
Правда ли что при высокой скорости uart возникнет точно та же проблема? Как лучше организовать обмен по uart если хочется иметь на нём одновременно приём ат команд с эхом и передачу больших блоков данных быстро?