Я работаю над appolication, для которого требуется 3x SPI (я мастер во всех них) и интерфейс SDIO, используя STM32F446.STM32F4 DMA может работать параллельно?
2 SPI (SPI1 и SPI2) - это датчики, которые необходимо считывать каждые 1 мс. Для SPI1 мне нужно написать 1 байт, и ответ на это будет значением. Для SPI2 мне нужно написать 1 байт, а затем прочитать 6.
Третий SPI (SPI3) и SDIO предназначены для связи/ведения журнала, и им не нужно передавать данные с фиксированным периодом.
Глядя на STM32F46x manual, раздел 9, она не выглядит, как я могу вызвать переводы DMA с периферийными устройствами interupts (это очень плохо), но я могу сделать все, что, как: прерывание
- Таймер каждый 1 мс: внутри ISR SPI1 и SPI2 передаются DMA-передачи. Передача DMA заполняет буфер полученными данными датчика;
- Каждый раз, когда мне нужно писать на SDIO или SPI3, я запускаю передачу DMA с меньшим приоритетом, чем те, что находятся в SPI1 и SPI2.
Я предполагаю, что SPI1 и SPI2 может выполнять в параллель, так как у меня есть 2 контроллера DMA и что, если они происходят в то же время spi2 и SDIO, позже будет заблокирован до тех пор, пока контроллер не свободен. Это правильно?
Я уже сделал это, 3 SPIS с DMA с максимальной скоростью, но поскольку SPI1 и SPI2 медленны (1 мс очень медленный для stm4), я бы сделал флаг в прерывании, установленном в 1, и проверил его в главном если флаг установлен. Если вы используете DMA, вы не получите больше скорости, так как вам нужно будет сделать точно то же самое, каждый мс возобновит DMA. – hamboy75