реклама на сайте
подробности

 
 
> Пауза между байтами в SPI DMA, STM32F4xx
Rash
сообщение Sep 19 2013, 07:25
Сообщение #1


Знающий
****

Группа: Свой
Сообщений: 639
Регистрация: 5-09-05
Пользователь №: 8 231



Приветствую.
Может кто нибудь подсказать возможно ли сделать паузу между байтами в SPI при использовании DMA, STM32F4xx? например совместно с каким либо таймером. А то многие медленные мс требуют паузы между байтами несколько сотен нсек и для работы с ними по DMA приходится понижать частоту до 1-2 МГц, хотя сами они держат до 8 МГц при побайтовом вычитывании. Мк STM32F4xx.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
adnega
сообщение Sep 19 2013, 19:45
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 2 724
Регистрация: 14-05-07
Из: Ярославль, Россия
Пользователь №: 27 702



Попробовал. Получилось))
Правда, на STM32F303 (с новым SPI).

Код
void init_SPI2(void)
{
    SPI2->CR1 =
            (1 << SPI_CR1_SSM)
        | (1 << SPI_CR1_SSI)
        | (0 << SPI_CR1_SPE)
        | (2 << SPI_CR1_BR)
        | (1 << SPI_CR1_MSTR);

    SPI2->CR2 =
            (1 << SPI_CR2_SSOE)
        | (7 << SPI_CR2_DS)
        | (0 << SPI_CR2_FRF)
        | (1 << SPI_CR2_NSSP)          // ВСТАВИТЬ ПАУЗЫ
        | (0 << SPI_CR2_TXDMAEN);

    SPI2->CR1 =
            (1 << SPI_CR1_SSM)
        | (1 << SPI_CR1_SSI)
        | (1 << SPI_CR1_SPE)
        | (2 << SPI_CR1_BR)
        | (1 << SPI_CR1_MSTR);
}

Передача:
        SPI2->CR2 =
                (1 << SPI_CR2_SSOE)
            | (7 << SPI_CR2_DS)
            | (0 << SPI_CR2_FRF)
            | (1 << SPI_CR2_NSSP)
            | (0 << SPI_CR2_TXDMAEN);

        DMA1_Channel5->CCR =
                (DMA_PL_HIGH << DMA_CCR_PL)
            | (DMA_SIZE_BYTE << DMA_CCR_MSIZE)
            | (DMA_SIZE_BYTE << DMA_CCR_PSIZE)
            |    (1 << DMA_CCR_DIR)
            | (1 << DMA_CCR_MINC)
            | (0 << DMA_CCR_EN);

        DMA1_Channel5->CPAR = (DWORD)&SPI2->DR8;
        DMA1_Channel5->CMAR = (DWORD)&val;
        DMA1_Channel5->CNDTR = 8;

        DMA1->IFCR = (0x0F << 16);

        DMA1_Channel5->CCR =
                (DMA_PL_HIGH << DMA_CCR_PL)
            | (DMA_SIZE_BYTE << DMA_CCR_MSIZE)
            | (DMA_SIZE_BYTE << DMA_CCR_PSIZE)
            |    (1 << DMA_CCR_DIR)
            | (1 << DMA_CCR_MINC)
            | (1 << DMA_CCR_EN);

        SPI2->CR2 =
                (1 << SPI_CR2_SSOE)
            | (7 << SPI_CR2_DS)
            | (0 << SPI_CR2_FRF)
            | (1 << SPI_CR2_NSSP)
            | (1 << SPI_CR2_TXDMAEN);


Частота SPI 72Мгц/8/2 = 4.5МГц.
Пауза между битами 540нс.
Эскизы прикрепленных изображений
Прикрепленное изображение
Прикрепленное изображение
Прикрепленное изображение
 
Go to the top of the page
 
+Quote Post
DmitryM
сообщение Sep 19 2013, 20:00
Сообщение #3


Знающий
****

Группа: Свой
Сообщений: 583
Регистрация: 7-06-06
Из: Таганрог
Пользователь №: 17 840



Цитата(adnega @ Sep 19 2013, 23:45) *
Попробовал. Получилось))

Это не вариант. Снятие nSS означает завершение транзакции, а не паузу между "байтами"!!!!
Go to the top of the page
 
+Quote Post
adnega
сообщение Sep 19 2013, 20:01
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 2 724
Регистрация: 14-05-07
Из: Ярославль, Россия
Пользователь №: 27 702



Цитата(DmitryM @ Sep 20 2013, 00:00) *
Это не вариант. Снятие nSS означает завершение транзакции, а не паузу между "байтами"!!!!

Дык, NSS-ом в STM обычно софтово машут.
Go to the top of the page
 
+Quote Post
DmitryM
сообщение Sep 19 2013, 20:07
Сообщение #5


Знающий
****

Группа: Свой
Сообщений: 583
Регистрация: 7-06-06
Из: Таганрог
Пользователь №: 17 840



Цитата(adnega @ Sep 20 2013, 00:01) *
Дык, NSS-ом в STM обычно софтово машут.

А, я все больше по старинке (FPGA) на железку полагаюсь wink.gif Нафига лишний боян. машет nSS, ну и пусть машет.
А топикпастреру, следуюший алгоритмтм, но без DMA: послал, узнал что отправилось, взвел таймер, по истечению таймера запустил на один байт и т.д.
Go to the top of the page
 
+Quote Post
adnega
сообщение Sep 19 2013, 20:25
Сообщение #6


Гуру
******

Группа: Свой
Сообщений: 2 724
Регистрация: 14-05-07
Из: Ярославль, Россия
Пользователь №: 27 702



Цитата(DmitryM @ Sep 20 2013, 00:07) *
А, я все больше по старинке (FPGA) на железку полагаюсь wink.gif Нафига лишний боян.

)) Сравнили.
В МК чем-то нужно жертвовать. Из всех зол, это меньшее. Но ТС вряд ли подойдет, т.к. семейство другое...

PS. На большом отрезке любопытно наблюдать динамику в ST.
Как переделали AFIO в новых процах (большое за это спасибо), в новых SPI поддерживаются посылки от 4 до 16 бит
(и паузы вставлять можно), появились 32-битные таймеры и т.п. Но на мой взгляд плохо, что переделали RTC (навороченный календарь
вместо счетчика секунд), плохо что вынесли GPIO из bit-band региона((
Go to the top of the page
 
+Quote Post
DmitryM
сообщение Sep 19 2013, 20:32
Сообщение #7


Знающий
****

Группа: Свой
Сообщений: 583
Регистрация: 7-06-06
Из: Таганрог
Пользователь №: 17 840



Цитата(adnega @ Sep 20 2013, 00:25) *
в новых SPI поддерживаются посылки от 4 до 16 бит (и паузы вставлять можно)

Как? Именно об этом спрашивает Rash.
ЗЫ. Легко это сделал на SAM7
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Rash   Пауза между байтами в SPI DMA, STM32F4xx   Sep 19 2013, 07:25
- - scifi   Таймеры вполне способны генерировать запросы DMA с...   Sep 19 2013, 07:34
- - Rash   а примера случаем нет такого для настройки?   Sep 19 2013, 08:05
- - adnega   Цитата(Rash @ Sep 19 2013, 11:25) А то мн...   Sep 19 2013, 08:15
|- - DmitryM   Цитата(adnega @ Sep 19 2013, 12:15) Это к...   Sep 19 2013, 13:30
|- - adnega   Цитата(DmitryM @ Sep 19 2013, 17:30) напр...   Sep 19 2013, 13:48
|- - DmitryM   Цитата(adnega @ Sep 19 2013, 17:48) Если ...   Sep 19 2013, 13:55
- - Rash   одна из микр это CMX618 имено эти 200 нсек и нужно...   Sep 19 2013, 13:36
|- - megajohn   Цитата(Rash @ Sep 19 2013, 17:36) Или ест...   Sep 19 2013, 13:53
- - Rash   это зависимости на какой частоте запустить SPI. Пр...   Sep 19 2013, 13:52
|- - adnega   Цитата(Rash @ Sep 19 2013, 17:52) это зав...   Sep 19 2013, 14:22
|- - DmitryM   Цитата(adnega @ Sep 19 2013, 18:22) Повто...   Sep 19 2013, 14:36
- - Rash   adnega, Задержка байтами в SPI нужна конечно меньш...   Sep 19 2013, 14:42
|- - DmitryM   Цитата(Rash @ Sep 19 2013, 18:42) А тепер...   Sep 19 2013, 14:45
|- - adnega   Цитата(Rash @ Sep 19 2013, 18:42) А тепер...   Sep 19 2013, 15:08
|- - adnega   Цитата(DmitryM @ Sep 20 2013, 00:32) Как?...   Sep 19 2013, 20:58
|- - DmitryM   Цитата(adnega @ Sep 20 2013, 00:58) Дык, ...   Sep 19 2013, 21:03
|- - adnega   Цитата(DmitryM @ Sep 20 2013, 01:03) Опят...   Sep 19 2013, 22:30
|- - DmitryM   Цитата(adnega @ Sep 20 2013, 02:30) В так...   Sep 20 2013, 06:24
|- - HHIMERA   Вы хоть понимаете о чём идёт речь???   Sep 20 2013, 06:54
- - Rash   NSS и так программный, ибо в STM аппаратный он вро...   Sep 20 2013, 06:59
|- - HHIMERA   Цитата(Rash @ Sep 20 2013, 09:59) Вот есл...   Sep 20 2013, 07:34
||- - DmitryM   Цитата(HHIMERA @ Sep 20 2013, 11:34) Ещё ...   Sep 20 2013, 07:41
||- - HHIMERA   Цитата(DmitryM @ Sep 20 2013, 10:41) DMA ...   Sep 20 2013, 07:51
||- - DmitryM   Цитата(HHIMERA @ Sep 20 2013, 11:51) Ысчо...   Sep 20 2013, 08:54
|- - scifi   Цитата(Rash @ Sep 20 2013, 10:59) Вот есл...   Sep 20 2013, 07:53
- - Rash   не разобрался я как через таймер DMA запускать. По...   Sep 20 2013, 08:13
|- - scifi   Цитата(Rash @ Sep 20 2013, 12:13) не разо...   Sep 20 2013, 08:16
|- - adnega   Цитата(Rash @ Sep 20 2013, 12:13) не разо...   Sep 20 2013, 08:34
|- - scifi   Цитата(adnega @ Sep 20 2013, 12:34) Настр...   Sep 20 2013, 08:46
|- - adnega   Цитата(scifi @ Sep 20 2013, 12:46) Ну да,...   Sep 20 2013, 08:51
|- - scifi   Цитата(adnega @ Sep 20 2013, 12:51) Все х...   Sep 20 2013, 08:55
|- - HHIMERA   Цитата(adnega @ Sep 20 2013, 11:51) Все х...   Sep 20 2013, 09:04
|- - DmitryM   Цитата(HHIMERA @ Sep 20 2013, 13:04) а мн...   Sep 20 2013, 09:15
- - Rash   * частота CPU = 168МГц * Номер - SPI2, SPI3 * ча...   Sep 20 2013, 08:45
- - Rash   ЦитатаНужна только передача, как я понял? нужна и ...   Sep 20 2013, 08:54
|- - adnega   Цитата(Rash @ Sep 20 2013, 12:54) нужна и...   Sep 20 2013, 09:05
- - Rash   Цитата(adnega @ Sep 20 2013, 12:05) Всего...   Sep 20 2013, 09:10
- - Golikov A.   ДМА посылающий 1 байт не тоже самое что самому пол...   Sep 20 2013, 09:46
|- - adnega   Цитата(Golikov A. @ Sep 20 2013, 13:46) А...   Sep 20 2013, 10:12
|- - DmitryM   Цитата(Golikov A. @ Sep 20 2013, 13:46) ...   Sep 20 2013, 11:29
- - adnega   Ну собственно работа SPI с TIM и DMA. Обращаю вним...   Sep 20 2013, 13:48
- - Rash   плавая пауза между байтами думаю не проблема, глав...   Sep 20 2013, 14:11
|- - adnega   Цитата(Rash @ Sep 20 2013, 18:11) плавая ...   Sep 20 2013, 15:17
- - Golikov A.   ну это понятно ДМА то надо дождаться свободной шин...   Sep 20 2013, 14:43
- - Rash   adnega, спасибо буду пробовать   Sep 23 2013, 06:37


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 20th July 2025 - 19:01
Рейтинг@Mail.ru


Страница сгенерированна за 0.01483 секунд с 7
ELECTRONIX ©2004-2016