|
STM32F4: по EXTI запускать чтение SPI по DMA, чтение из внешнего ацп по сигналу DRDY |
|
|
|
 |
Ответов
(1 - 10)
|
Dec 17 2014, 11:08
|
Частый гость
 
Группа: Участник
Сообщений: 121
Регистрация: 8-11-05
Пользователь №: 10 577

|
спасибо, начал гуглить в заданном направлении, наткнулся на местную тему http://electronix.ru/forum/index.php?showt...02445&st=15 , в теме нашел пример, который в данный момент и медитирую.
|
|
|
|
|
Dec 18 2014, 04:08
|
Частый гость
 
Группа: Участник
Сообщений: 121
Регистрация: 8-11-05
Пользователь №: 10 577

|
спасибо за наводку, буду медитировать это: Цитата Я бы предложил так: 1. Настраиваем один DMA на передачу 16 байт по событиям от SPI_TX. 2. Настраиваем другой DMA на прием N*2*16 байт по событиям от SPI_RX в кольцевой буфер с генерацией прерываний при заполнении и полузапонении. 3. Настраиваем таймер на одиночный запуск по спаду на ноге. 4. Первый канал совпадения таймера настраиваем на запись через еще один канал DMA числа 16 для NDTR первого DMA (M2M). 5. Второй канал совпадения таймера настраиваем на запись через еще один канал DMA управляющего слова (регистр CR) для первого DMA для запуска передачи (M2M). 6. Разрешаем таймер. 7. Имеем каждые N срабатываний готовности одно прерывание с данными в кольцевом буфере. Пока шаманим с этими данными, заполняется вторая часть кольцевого буфера - никто не потеряется.
Сообщение отредактировал kostyan - Dec 18 2014, 04:11
|
|
|
|
|
Dec 29 2014, 11:04
|
Частый гость
 
Группа: Участник
Сообщений: 121
Регистрация: 8-11-05
Пользователь №: 10 577

|
Подходит время расставлять точки над Ё: Цитата 3. Настраиваем таймер на одиночный запуск по спаду на ноге. Я правильно понимаю, что надо настроить таймер на режим захвата? Какой то минимальный пример или сцылу на пример бы...
|
|
|
|
|
Dec 30 2014, 04:30
|
Частый гость
 
Группа: Участник
Сообщений: 121
Регистрация: 8-11-05
Пользователь №: 10 577

|
А вроде даже и заработало, но есть нюанс! В доках написано: "TIM_SlaveMode_External1: Rising edges of the selected trigger (TRGI) clock the counter. " То есть нарастающий фронт ловится, а мне надо спадающий faling edges. Как то можно крутануть в контроллере это дело? А пардон, сам нашел в доках. Заработал таймер, теперь на повестке: Цитата 4. Первый канал совпадения таймера настраиваем на запись через еще один канал DMA числа 16 для NDTR первого DMA (M2M). 5. Второй канал совпадения таймера настраиваем на запись через еще один канал DMA управляющего слова (регистр CR) для первого DMA для запуска передачи (M2M). Вопрос один - собственно КАК? Как от одного таймера настроить два запроса на разные каналы ДМА? Каплю кода бы в пример...
Сообщение отредактировал kostyan - Dec 30 2014, 08:58
|
|
|
|
|
Jan 22 2015, 04:11
|
Частый гость
 
Группа: Участник
Сообщений: 121
Регистрация: 8-11-05
Пользователь №: 10 577

|
Сделал в итоге через EXTI, как уже ранее предлагалось: Цитата(AHTOXA @ Sep 12 2014, 16:28)  А я б не парился, и сделал запуск DMA-обмена с SPI в прерывании от EXTI. Хотя в качестве разминки для мозгов такие комбинации наверное полезны, да  Способ запуска одного дма через 2 других М2М дма не подходит, ибо помимо установки регистров DMA1_Stream4->NDTR и DMA1_Stream4->CR, необходимо еще устанавливать регистр DMA1->HIFCR. И вроде вполне все бодро крутится - проц готов к свершениям помимо данной задачи. Тему можно закрывать.
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|