2016-06-22 7 views
0

Я работаю над 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. Таймер каждый 1 мс: внутри ISR SPI1 и SPI2 передаются DMA-передачи. Передача DMA заполняет буфер полученными данными датчика;
  2. Каждый раз, когда мне нужно писать на SDIO или SPI3, я запускаю передачу DMA с меньшим приоритетом, чем те, что находятся в SPI1 и SPI2.

Я предполагаю, что SPI1 и SPI2 может выполнять в параллель, так как у меня есть 2 контроллера DMA и что, если они происходят в то же время spi2 и SDIO, позже будет заблокирован до тех пор, пока контроллер не свободен. Это правильно?

+0

Я уже сделал это, 3 SPIS с DMA с максимальной скоростью, но поскольку SPI1 и SPI2 медленны (1 мс очень медленный для stm4), я бы сделал флаг в прерывании, установленном в 1, и проверил его в главном если флаг установлен. Если вы используете DMA, вы не получите больше скорости, так как вам нужно будет сделать точно то же самое, каждый мс возобновит DMA. – hamboy75

ответ

2

Для SPI1 мне нужно написать 1 байт, и ответ на это будет . Для spi2 мне нужно писать 1 байт, а затем прочитать 6.

Обратите внимание, что с SPI, чтения и записи происходят одновременно, вы можете прочитать байт, написав фиктивный один, вы должны принять это во внимание при создании ассоциации количество слов для передачи.

DMA transfer заполняет буфер полученными данными датчика;

Некоторые ведомые устройства SPI не будут работать должным образом, если вы не установите CS между передачами. Если это так с вашими датчиками, вы должны сделать это в прерывании потока приема DMA. Если вы подумываете о том, чтобы позволить DMA автоматически заполнять большой буфер, это не будет работать в этом случае.

Я предполагаю, что SPI1 и SPI2 может выступать на параллельно, так как у меня есть 2 контроллеры DMA и что, если они происходят в то же время SPI2 и SDIO, чем позже будет заблокирован до тех пор, пока контроллер не является свободно. Это право?

Они не будут блокированы, но чередуются до тех пор, пока передача с более высоким приоритетом не полностью привяжет полосу пропускания DMA. Никакая передача SPI не может этого сделать, поскольку SPI требуется не менее 16 тактов для передачи одного байта (не менее 2 циклов/бит).

 Смежные вопросы

  • Нет связанных вопросов^_^