Сергей Борщ 119 22 мая, 2012 Опубликовано 22 мая, 2012 · Жалоба На поверхностный взгляд по спаду BUSY можно сгенерировать событие триггера таймера с вывода внешнего триггера TIM _ETR или захвата TIM_CH1 для запроса к DMA, а этим DMA пулять в SPI на выход.Правильно ли я понимаю, что по захвату DMA может пульнуть байты никак не связанные с таймером? Как-то мутно у них в документации написано: After an event, the peripheral sends a request signal to the DMA controller. The DMA controller serves the request depending on the channel priorities. As soon as the DMA controller accesses the peripheral, an Acknowledge signal is sent to the peripheral by the DMA controller. The peripheral releases its request as soon as it gets the Acknowledge signal from the DMA controller. Once the request has been deasserted by the peripheral Вот и пойми их - в выделенных местах имеется ввиду одна и та же периферия, т.е. в данном случае - таймер, или разные? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Tolyaha 1 23 мая, 2012 Опубликовано 23 мая, 2012 · Жалоба Если бы я мог инициировать транзакцию DMA внешним сигналом - проблем мы не было. Почти у всех таймеров есть входы TIMx_CH1, TIMx_CH2,TIMx_CH3,TIMx_CH4, которые по изменению уровня могут генерить транзакцию DMA, (проверено, работает), а DMA запишет в SPIDR данные и SPI считает АЦП, по завершению чтения АЦП другой канал DMA сохранит измерение в памяти. Все без участия ядра. Причем таймер при этом может жить своей жизнью и на него эти входы никак не влияют, кроме того, что значение таймера будет сохраняться в регистре захвата таймера. PS. на этих входах таймера и DMA у меня построен вобще хитрый спец интерфейс и многоходовые транзакции (по смене сигнала на одном пине, DMA изменяет уровень на другом пине, при этом еще один канад ДМА сохраняет данные с порта, а на другой порт по еще одному каналу данные из памяти перемещаются в порт). Эти входы таймеров имеют еще и фильтр настраеваемый на различное количество тактов, что позволяет делать задержку транзакции ДМА на нужное время. 1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
SBE 1 23 мая, 2012 Опубликовано 23 мая, 2012 · Жалоба Правильно ли я понимаю, что по захвату DMA может пульнуть байты никак не связанные с таймером? Как-то мутно у них в документации написано: Написано действительно мутно. А вот AN2548 "Using the STM32F101xx and STM32F103xx DMA controller" описывает подходящий пример, когда по захвату внешнего строба таймером генерируется DMA, записывающее из порта в память. Как бы должно жить и с записью в SPI. On the rising edge of the external trigger, the timer generates a DMA request. As the GPIO data register address is set to DMA1 channel 6 peripheral address, the DMA controller reads the data from the GPIO port on each DMA request, and stores it into an SRAM buffer. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 119 23 мая, 2012 Опубликовано 23 мая, 2012 · Жалоба Спасибо всем - да, до AN2548 я не добрался. Посмотрел - действительно, то, что нужно. Разводка упростилась. Так и буду действовать. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться