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

 
 
4 страниц V  < 1 2 3 4 >  
Reply to this topicStart new topic
> Пауза между байтами в SPI DMA, STM32F4xx
adnega
сообщение Sep 19 2013, 19:45
Сообщение #16


Гуру
******

Группа: Свой
Сообщений: 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
Сообщение #17


Знающий
****

Группа: Свой
Сообщений: 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
Сообщение #18


Гуру
******

Группа: Свой
Сообщений: 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
Сообщение #19


Знающий
****

Группа: Свой
Сообщений: 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
Сообщение #20


Гуру
******

Группа: Свой
Сообщений: 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
Сообщение #21


Знающий
****

Группа: Свой
Сообщений: 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
adnega
сообщение Sep 19 2013, 20:58
Сообщение #22


Гуру
******

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



Цитата(DmitryM @ Sep 20 2013, 00:32) *
Как? Именно об этом спрашивает Rash.
ЗЫ. Легко это сделал на SAM7

Дык, ответ в сообщении 16.
Go to the top of the page
 
+Quote Post
DmitryM
сообщение Sep 19 2013, 21:03
Сообщение #23


Знающий
****

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



Цитата(adnega @ Sep 20 2013, 00:58) *
Дык, ответ в сообщении 16.

Опять? nSS нельзя снимать.
Go to the top of the page
 
+Quote Post
adnega
сообщение Sep 19 2013, 22:30
Сообщение #24


Гуру
******

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



Цитата(DmitryM @ Sep 20 2013, 01:03) *
Опять? nSS нельзя снимать.

По второму кругу. Не используйте аппаратное управление NSS и будет Вам счастье.
Не понимаю, что мешает опустить NSS перед передачей и поднять когда все закончится?
Более того, когда будете подключать SD-карту по SPI при чтении сектора данные идут не сразу,
нужно засылать FF пока не придет ответ со статусом, затем с помощью DMA можно прочитать
сразу сектор. В таких случаях только софтовое управление NSS или я чего-то упустил в этой жизни...
Go to the top of the page
 
+Quote Post
DmitryM
сообщение Sep 20 2013, 06:24
Сообщение #25


Знающий
****

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



Цитата(adnega @ Sep 20 2013, 02:30) *
В таких случаях только софтовое управление NSS или я чего-то упустил в этой жизни...

Ой-ёй.
bb-offtopic.gif ИМХО, то что можно/нужно сделать аппаратно - нужно делать аппаратно. Незачем программе считать задержки после выставления nSS и перед началом тактирования. Там где нельзя - приходится делать программно.
FF для SD карты формируем по прерыванию TXRDY, а потом читаем с помощью DMA. Ногодрыг вещь конечно хорошая, но занимает процессорное время. Зачем?
Go to the top of the page
 
+Quote Post
HHIMERA
сообщение Sep 20 2013, 06:54
Сообщение #26


Местный
***

Группа: Участник
Сообщений: 226
Регистрация: 10-07-09
Пользователь №: 51 126



Вы хоть понимаете о чём идёт речь??? rolleyes.gif
Go to the top of the page
 
+Quote Post
Rash
сообщение Sep 20 2013, 06:59
Сообщение #27


Знающий
****

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



NSS и так программный, ибо в STM аппаратный он вроде только для slave режима. Переключать его внутри посылки думаю не правильно, поэтому F3 не вариант. Да и F4 заложен на дальнейшее макс. использование его возможностей, т.к. цена этого мк в данной случае не жмёт. Вот если бы возможно было бы сделать отправку каждого байт в SPI по тайм-ауту таймера и всё это без использование ресурсов мк, был бы реально мощный SPI в STM (даже пусть ещё таймер один забрался, всё равно их куча ещё). А так получается мощные и быстрые контролеры должны по старинке то ли через прерывания, то ли по ожиданию флагов читать данные из периферии по SPI.
Go to the top of the page
 
+Quote Post
HHIMERA
сообщение Sep 20 2013, 07:34
Сообщение #28


Местный
***

Группа: Участник
Сообщений: 226
Регистрация: 10-07-09
Пользователь №: 51 126



Цитата(Rash @ Sep 20 2013, 09:59) *
Вот если бы возможно было бы сделать отправку каждого байт в SPI по тайм-ауту таймера и всё это без использование ресурсов мк, был бы реально мощный SPI в STM (даже пусть ещё таймер один забрался, всё равно их куча ещё).

Ещё во втором посте вам выдали самое ценное... идею, реализацию...
Потрудитесь хоть немножко поработать головой и руками... там текста... несколько строчек... ничего особенного...
Настраиваете таймер, настраиваете ДМА... Запускаете ДМА, запускаете таймер...
Go to the top of the page
 
+Quote Post
DmitryM
сообщение Sep 20 2013, 07:41
Сообщение #29


Знающий
****

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



Цитата(HHIMERA @ Sep 20 2013, 11:34) *
Ещё во втором посте вам выдали самое ценное... идею, реализацию...
Потрудитесь хоть немножко поработать головой и руками... там текста... несколько строчек... ничего особенного...
Настраиваете таймер, настраиваете ДМА... Запускаете ДМА, запускаете таймер...

DMA на один байт? А зачем он тогда нужен?
Go to the top of the page
 
+Quote Post
HHIMERA
сообщение Sep 20 2013, 07:51
Сообщение #30


Местный
***

Группа: Участник
Сообщений: 226
Регистрация: 10-07-09
Пользователь №: 51 126



Цитата(DmitryM @ Sep 20 2013, 10:41) *
DMA на один байт? А зачем он тогда нужен?

Ысчо разз!!!
Вы точно в теме??? rolleyes.gif
Go to the top of the page
 
+Quote Post

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

 


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


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