Перейти к содержанию
    

STM32F2xx - как покрасивее считывать внешнее АЦП черз SPI

На поверхностный взгляд по спаду 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

Вот и пойми их - в выделенных местах имеется ввиду одна и та же периферия, т.е. в данном случае - таймер, или разные?

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Если бы я мог инициировать транзакцию DMA внешним сигналом - проблем мы не было.

Почти у всех таймеров есть входы TIMx_CH1, TIMx_CH2,TIMx_CH3,TIMx_CH4, которые по изменению уровня могут генерить транзакцию DMA, (проверено, работает), а DMA запишет в SPIDR данные и SPI считает АЦП, по завершению чтения АЦП другой канал DMA сохранит измерение в памяти. Все без участия ядра. Причем таймер при этом может жить своей жизнью и на него эти входы никак не влияют, кроме того, что значение таймера будет сохраняться в регистре захвата таймера.

 

PS. на этих входах таймера и DMA у меня построен вобще хитрый спец интерфейс и многоходовые транзакции (по смене сигнала на одном пине, DMA изменяет уровень на другом пине, при этом еще один канад ДМА сохраняет данные с порта, а на другой порт по еще одному каналу данные из памяти перемещаются в порт). Эти входы таймеров имеют еще и фильтр настраеваемый на различное количество тактов, что позволяет делать задержку транзакции ДМА на нужное время.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Правильно ли я понимаю, что по захвату 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.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Спасибо всем - да, до AN2548 я не добрался. Посмотрел - действительно, то, что нужно. Разводка упростилась. Так и буду действовать.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...