_pv 53 14 апреля, 2022 Опубликовано 14 апреля, 2022 · Жалоба 4 hours ago, iiv said: Я вообще подумал, а если на каждом слеве аллоцировать буфер на (N+1)*256 байт, в первый блок положить то, что он сам посылает, и включить DMA на N*256 байт так, что пересылка идет с нулевой позиции этого буфера, а прием идет с 256-ой позиции, то каждый слейв только одно прерывание будет иметь? Или Вы именно так объяснили, а я тогда не сразу понял? А потом между пересылками все выключать и вводить клок в 0 на какое-то продолжительное время типа милисекунды. не совсем, я предложил парой буферов на 256 байт ограничиться и каждый раз после приёма очередного блока руками перезапускать dma, jcxz предложил это средствами dma автоматизировать, если dma там умеет сам очередной дескриптор забирать из списка, хотя наверное можно вообще сделать один единственный буфер на 256 байт, заполнить его данными, которые надо отдать, и на этот же буфер натравить сразу оба dma от spi rx+tx, заберёт первый байт он всяко раньше чем получит очередной из сдвигового регистра и перезапишет. и в режиме кольцевого буфера (если dma2d умеет), либо сразу скормить N одинаковых дескрипротов(опять же если умеет), ну либо руками перезапускать каждый раз после 256 байт если dma совсем тупой. Если за 1/30 секунды прилетит не одно единственное прерывание, а целых 16, на общем быстродействии это думаю никак не скажется. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться