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

 
 
 
Reply to this topicStart new topic
> stm32 spi+dma
Still Enemy
сообщение Jun 16 2015, 12:03
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 66
Регистрация: 29-01-15
Из: Нижний Новгород
Пользователь №: 84 817



Очень странную дичь я исследую сегодня. Возможно опять моя криворукость даёт о себе знать.
Поднят spi(он рабочий) и dma. И при пересылке данных через dma в spi, а в частности пересылке 256 байт данных, выходит такая картина: 195 байт проходят нормально, остаток какая то ересь. У меня IAR и в процессе всяческих манипуляций я понял, что это как то связано с дебагером, потому как, если остановиться на функции пересылки и нажать "Go"(f5), то собственно 195 байт нормально, остальные ересь, а, если же остановиться на функции и нажать "Step Over" (f10), то (о Боги) всё работает адекватно. Дебагер j-link-arm, интерфейс SWD.
Go to the top of the page
 
+Quote Post
adnega
сообщение Jun 16 2015, 14:26
Сообщение #2


Гуру
******

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



Цитата(Still Enemy @ Jun 16 2015, 15:03) *
это как то связано с дебагером

Отладчик может читать регистры. Флаги могут сбрасываться от чтения. Сброс флагов может влиять на работу периферийных блоков.
Go to the top of the page
 
+Quote Post
Still Enemy
сообщение Jun 17 2015, 11:49
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 66
Регистрация: 29-01-15
Из: Нижний Новгород
Пользователь №: 84 817



Я даже представления не имею какие флаги могут сброситься, что может произойти в момент передачи, что данные пойдут в регистр совсем левые. Какие флаги DMA влияют на передаваемый из памяти данные в периферию? я не понимаю.
Если вопрос не будет решен, я забью *** и буду делать по 128 байт. Надежнее. Сыт уже второй день хлебать эту дичь.
Go to the top of the page
 
+Quote Post
adnega
сообщение Jun 17 2015, 12:10
Сообщение #4


Гуру
******

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



Цитата(Still Enemy @ Jun 17 2015, 14:49) *
Сыт уже второй день хлебать эту дичь.

А камушек какой? Не из F3, случайно?
Go to the top of the page
 
+Quote Post
Still Enemy
сообщение Jun 17 2015, 18:30
Сообщение #5


Участник
*

Группа: Участник
Сообщений: 66
Регистрация: 29-01-15
Из: Нижний Новгород
Пользователь №: 84 817



Цитата(adnega @ Jun 17 2015, 16:10) *
А камушек какой? Не из F3, случайно?

так нет же, у меня f105. У вас ведь есть какой то опыт с этой проблемой или есть варианты, которые могут решить данную проблему?

Сообщение отредактировал Still Enemy - Jun 17 2015, 18:30
Go to the top of the page
 
+Quote Post
UDmitry
сообщение Jun 17 2015, 18:42
Сообщение #6





Группа: Участник
Сообщений: 13
Регистрация: 28-01-14
Из: Таганрог
Пользователь №: 80 225



Возможно проблема в том, что почему-то SPI нужна какая-то предварительная задержка перед отправкой, что собственно отладчик и делает.
Go to the top of the page
 
+Quote Post
adnega
сообщение Jun 17 2015, 19:20
Сообщение #7


Гуру
******

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



Цитата(Still Enemy @ Jun 17 2015, 21:30) *
или есть варианты, которые могут решить данную проблему?

Нужно все грамотно инициализировать:
1. Сбросить SPI_CR2_TXDMAEN;
2. Сбросить флаги соответствующего канала DMA и запретить этот канал;
3. Настроить канал DMA и разрешить этот канал;
4. Установить SPI_CR2_TXDMAEN.

После этого с небольшой задержкой (тактов 12) DMA начнет записывать значения в SPI.
У меня на F100 и F407 выводятся до 1024 байт без каких-либо проблем.
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Jun 18 2015, 03:37
Сообщение #8


фанат дивана
******

Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684



Цитата(Still Enemy @ Jun 17 2015, 23:30) *
У вас ведь есть какой то опыт с этой проблемой или есть варианты, которые могут решить данную проблему?

Я делаю вот так. Работает как часы.


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
Still Enemy
сообщение Jun 18 2015, 06:37
Сообщение #9


Участник
*

Группа: Участник
Сообщений: 66
Регистрация: 29-01-15
Из: Нижний Новгород
Пользователь №: 84 817



Цитата(adnega @ Jun 17 2015, 23:20) *
После этого с небольшой задержкой (тактов 12) DMA начнет записывать значения в SPI.
У меня на F100 и F407 выводятся до 1024 байт без каких-либо проблем.

Пасибо большое, вот этот совет частично помог. Поставил задержку(2 мс) после запуска dma и убрал флаг Half transfer complete и всё заработало. Мне всё равно не пригодится этот флаг, я же не по Мбайту передаю, а по 256 байт всего.
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 21st July 2025 - 03:11
Рейтинг@Mail.ru


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