Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: stm32 spi+dma
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > ARM, 32bit
Still Enemy
Очень странную дичь я исследую сегодня. Возможно опять моя криворукость даёт о себе знать.
Поднят spi(он рабочий) и dma. И при пересылке данных через dma в spi, а в частности пересылке 256 байт данных, выходит такая картина: 195 байт проходят нормально, остаток какая то ересь. У меня IAR и в процессе всяческих манипуляций я понял, что это как то связано с дебагером, потому как, если остановиться на функции пересылки и нажать "Go"(f5), то собственно 195 байт нормально, остальные ересь, а, если же остановиться на функции и нажать "Step Over" (f10), то (о Боги) всё работает адекватно. Дебагер j-link-arm, интерфейс SWD.
adnega
Цитата(Still Enemy @ Jun 16 2015, 15:03) *
это как то связано с дебагером

Отладчик может читать регистры. Флаги могут сбрасываться от чтения. Сброс флагов может влиять на работу периферийных блоков.
Still Enemy
Я даже представления не имею какие флаги могут сброситься, что может произойти в момент передачи, что данные пойдут в регистр совсем левые. Какие флаги DMA влияют на передаваемый из памяти данные в периферию? я не понимаю.
Если вопрос не будет решен, я забью *** и буду делать по 128 байт. Надежнее. Сыт уже второй день хлебать эту дичь.
adnega
Цитата(Still Enemy @ Jun 17 2015, 14:49) *
Сыт уже второй день хлебать эту дичь.

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

так нет же, у меня f105. У вас ведь есть какой то опыт с этой проблемой или есть варианты, которые могут решить данную проблему?
UDmitry
Возможно проблема в том, что почему-то SPI нужна какая-то предварительная задержка перед отправкой, что собственно отладчик и делает.
adnega
Цитата(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 байт без каких-либо проблем.
AHTOXA
Цитата(Still Enemy @ Jun 17 2015, 23:30) *
У вас ведь есть какой то опыт с этой проблемой или есть варианты, которые могут решить данную проблему?

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

Пасибо большое, вот этот совет частично помог. Поставил задержку(2 мс) после запуска dma и убрал флаг Half transfer complete и всё заработало. Мне всё равно не пригодится этот флаг, я же не по Мбайту передаю, а по 256 байт всего.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.