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

 
 
> На что бы перейти..., В плане платформы
Arlleex
сообщение Mar 22 2018, 16:13
Сообщение #1


Местный
***

Группа: Участник
Сообщений: 492
Регистрация: 12-11-11
Пользователь №: 68 264



С практикой работы с STM32 у меня пополняется чаша больше ненависти к этим камням, нежели положительных эмоций.
Вот элементарно - есть АЦП внешний, управляется через SPI, CS-ом дергать обязательно. В STM32 CS не дергается аппаратно при транзакциях SPI, не понимаю, почему эти говноразработчики из STMicroelectronics не могут сделать это уже в какой реализации своих линеек микроконтроллеров? Из-за такого намеренного "косяка", который они вроде как и не пытаются исправить, невозможно запустить DMA на этот SPI, приходится запускать чертов таймер, дергать лапой в прерывании и там же запускать транзакцию (одиночную), потом снова выжидать нужное время и поднимать CS обратно, формируя нужные длительности между CS и первым/последним клоком SCLK... Помню в AT91SAM7X512 (и младших по памяти моделях) была возможность не то что аппаратно лапкой CS дергать, так даже время задавалось в количествах тактов вот этих самых задержек. А тут фигу.
С ходу даже не придумал как аппаратным таймером ножку аппаратно дергать так, чтобы еще после опускания CS выжидалось время небольшое и затем осуществлялась транзакция по SPI без прерываний, по DMA , например. И, чувствую, такой возможности тупо нет. Хотя, казалось бы, банальная вещь - что сложного было реализовать полностью аппаратный CS? Урезали половину функциональности DMA<->SPI...
И вот знаете, косяков все больше и больше обнаруживается с каждым детальным разбором.
Какие камни наиболее гибкие в этом плане? ПЛИС не в расчет, знаю что там проще сделать такое и т.д. но интересует возня именно с Cortex-M профиля. Раньше немного работал с ARM7TDMI, но это уже устаревший камень, Cortex-ы для меня более привлекательны, хотелось бы что-то действительно с хорошей периферией. Прокомментируйте, пожалуйста.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Arlleex
сообщение May 6 2018, 17:34
Сообщение #2


Местный
***

Группа: Участник
Сообщений: 492
Регистрация: 12-11-11
Пользователь №: 68 264



Цитата
Вы внимательнее прочитайте, что я написал: при выполнении линейного кода из флешь. А теперь посчитайте например за сколько тактов выполнится блок инструкций в 128-и битах? А если все (или многие инструкции 32-битные)? И сколько тактов нужно чтобы дочитать следующий блок на данной частоте МК? А теперь подумайте что в Tiva этот блок в 2 раза больше.

Да какая разница сколько тактов будет выполняться блок инструкций в 128 битах? Все эти prefetch-буферы и ускорители, а в Вашем случае более широкая шина необходима лишь для обеспечения zero-wait-state при чтении из Flash (значит 4 32-битные инструкции за 4 такта будет выполнено). Для Tiva, поскольку в нем ускорителя нет, сделали более широкую шину, для STM32 - поставили ускоритель. Но лишь для одной цели - получить нулевое ожидание при доступе к данным или инструкции при чтении из Flash. А раз это условие выполнено, то STM32 выигрывает, поскольку может исполнять линейный код с бОльшей частотой. Какая разница какая там шина, если что там, что там задержка при чтении из Flash отсутствует при чтении линейного кода? Между заполнениями 128-битных строк ускорителя тоже 0 циклов ожидания, так что при вычитке следующих 4 инструкций никакого ожидания не происходит.
Цитата
Опять же ещё раз открываем моё исходное сообщение и ещё раз внимательно перечитываем (раз не получается с первого раза):"когда мы выбирали Tiva для своего проекта".

Хорошо, с этим понятно.
Цитата
Не очень понятно как вообще можно просто так передать из I2C в UART без какой-либо обработки протокола? Уже хотя бы потому, что I2C - это не просто поток байтов, а ещё и старты/стопы и адресации и переключение передача/приём и т.п.

Ну, скажем, сформировать старт-стоп можно. А вот все пересылки данных ничем не отличаются между I2C и UART. Внешнее устройство пишет в UART какой-нибудь зарезервированный символ - XMC4800 формирует старт-условие. Дальше устройство пишет физический байт адреса по UART - он транслируется в I2C-шную посылку. И все остальные байты передаются либо принимаются (тем более UART полнодуплексный). По завершении транзакции XMC4800 формирует стоп-условие. Правда для этого XMC4800 нужно знать длину записываемых/считываемых данных для корректной работы логики запуска DMA. Ну опять же, это все мысли вслух, и если уж докопаться, то можно разных изворотов придумать, как угодно творческой душе разработчика (и не надо вот сейчас говорить что это сплошной бред и т.д., порой причудливые решения куда лучше справляются с задачей).
Цитата
И обработку этих запросов в DMA-контроллере сделали по уровню, а не по edge. Вот в XMC к сожалению до этого не додумались и там с этим связано много проблем.

А какие преимущества запроса по уровню, а не по фронту?
Цитата
PS: В первую очередь советую Вам сразу же на купленной плате проверить ревизию чипа (XMC). И перапаять на последнюю.
...
Так что имейте в виду.

Жесть biggrin.gif Ревизию гляну как доберусь до платки. Спасибо, буду знать.
Go to the top of the page
 
+Quote Post
jcxz
сообщение May 6 2018, 20:16
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Цитата(Arlleex @ May 6 2018, 20:34) *
Между заполнениями 128-битных строк ускорителя тоже 0 циклов ожидания, так что при вычитке следующих 4 инструкций никакого ожидания не происходит.

Да ладно?!... Похоже вы так и не взяли калькулятор и не посчитали... sad.gif
4 инструкции в 128-битной строке кеша (допустим все они 1-тактные) - значит 4 такта. А сколько тактов wait-states требуется STM32 на 180МГц на выборку очередной порции данных из кеша при кеш-промахе? 7 или 8? И как позвольте узнать будет 0 тактов ожидания между заполнениями строк, если вся строка выполняется за 4 такта, а на чтение новой нужно 8 тактов??? (ещё раз - разговор про линейный код, или линейный участок кода по-крайней мере такой длины, что не влезает в кеш; т.е. - имеют место кеш-промахи).
И "ускоритель" в STM32 как я понимаю - это и есть просто кеш команд. Ну так в Tiva он тоже есть, только маленький.

Цитата(Arlleex @ May 6 2018, 20:34) *
Ну опять же, это все мысли вслух, и если уж докопаться, то можно разных изворотов придумать, как угодно творческой душе разработчика

Прочитаете мануал - разберётесь с возможностями.
Например у меня на XMC была задача: необходимо было передать из одного устройства на XMC в другое (на XMC) по UART небольшой пакет с данными (результаты вычислений). Кроме самих данных необходимо было в этой же пересылке передать и время получения этих данных на устройстве-источнике данных (в некий момент времени Т на устройстве-источнике данные считываются с АЦП, над ними выполняется ряд математических операций, полученный результат отправляется устройству-приёмнику, а также устройству приёмнику нужно передать момент времени чтения данных из АЦП (устройство-приёмник должно знать когда было чтение по его собственным часам) с максимально-возможной точностью, желательно до такта CPU).
Так вот я сделал примерно так: от таймера, который своим сигналом S1 запускает преобразование АЦП, также через некоторое время T2 (несколько мкс) генерится сигнал S2, запускающий передачу содержимого FIFO UART-а. По прерыванию завершения преобразования АЦП в ISR обрабатываются данные и записываются в FIFO UART. Время преобразования АЦП + время вызова и работы ISR заведомо меньше T2. Значит сигнал S2 возникает в момент когда данные для передачи уже лежат в FIFO.
В принимающем XMC я первый перепад на линии RX.UART (начала старт-бита) фиксирую таймером. Получается синхронизация ведущий-ведомый с точностью до такта частоты тактирования таймеров. И без джиттера!
На каком еще МК можно сделать подобное? Я таких не знаю. laughing.gif

Цитата(Arlleex @ May 6 2018, 20:34) *
А какие преимущества запроса по уровню, а не по фронту?

Я где-то в этой теме (а может другой, но недавно) уже подробно описывал какие проблемы возникают при генерации DMA-запросов по перепаду уровня заполненности FIFO. Не хочу повторяться. Так вот: DMA-event-ы "по уровню" полностью снимают эти проблемы.
Вот оно: https://electronix.ru/forum/index.php?showt...t&p=1558972
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Arlleex   На что бы перейти...   Mar 22 2018, 16:13
- - _pv   а таймер разве не может дёргать по совпадению и CS...   Mar 22 2018, 16:30
- - jcxz   Цитата(Arlleex @ Mar 22 2018, 18:13) Вот ...   Mar 22 2018, 16:52
- - Arlleex   Цитата(_pv @ Mar 22 2018, 19:30) а таймер...   Mar 22 2018, 16:55
|- - jcxz   Цитата(Arlleex @ Mar 22 2018, 18:55) Пожа...   Mar 22 2018, 17:03
|- - twix   Цитата(Arlleex @ Mar 22 2018, 17:55) Види...   Mar 22 2018, 18:00
|- - _pv   Цитата(Arlleex @ Mar 22 2018, 22:55) Атме...   Mar 22 2018, 19:27
- - Arlleex   jcxz, как раз листаю референс на XMC4800. Общее вп...   Mar 22 2018, 17:23
|- - inventor   Цитата(Arlleex @ Mar 22 2018, 20:23) jcxz...   Apr 7 2018, 14:55
- - yes   > В STM32 CS не дергается аппаратно при транзак...   Mar 22 2018, 18:35
- - technik-1017   Как альтернативу STM32 рассматриваю чипы SmartFusi...   Mar 22 2018, 19:17
- - skripach   LPC54 CSами умеет дергать невероятно, с настраивае...   Mar 23 2018, 01:51
- - Arlleex   Цитата(twix @ Mar 22 2018, 21:00) Вы може...   Mar 23 2018, 13:54
|- - jcxz   Цитата(Arlleex @ Mar 23 2018, 15:54) 10МБ...   Mar 23 2018, 15:49
- - adnega   Цитата(Arlleex @ Mar 22 2018, 19:13) нево...   Mar 24 2018, 07:21
|- - dac   QUOTE (adnega @ Mar 24 2018, 13:21) 2. В ...   Mar 24 2018, 07:52
|- - adnega   Цитата(dac @ Mar 24 2018, 10:52) приходит...   Mar 24 2018, 08:11
||- - dac   QUOTE (adnega @ Mar 24 2018, 14:11) 1мкс ...   Mar 24 2018, 08:54
|- - _pv   Цитата(dac @ Mar 24 2018, 14:52) а еще из...   Mar 24 2018, 08:34
|- - jcxz   Цитата(dac @ Mar 24 2018, 09:52) а еще из...   Mar 24 2018, 10:21
|- - adnega   Цитата(jcxz @ Mar 24 2018, 13:21) на STM3...   Mar 24 2018, 13:25
- - Arlleex   Да вот элементарный пример, решение которого полно...   Mar 24 2018, 17:02
|- - adnega   Цитата(Arlleex @ Mar 24 2018, 20:02) DMA ...   Mar 24 2018, 17:16
- - Andrew Su   Добрый день. На отладочнике STM32L476-disco провер...   Mar 25 2018, 11:36
- - backa   TI "TM4C1294" - дорого и сердито - SPI р...   Apr 24 2018, 20:31
|- - k155la3   Цитата(backa @ Apr 24 2018, 23:31) TI ...   Apr 26 2018, 13:38
|- - backa   Цитата(k155la3 @ Apr 26 2018, 17:38) Нечт...   Apr 26 2018, 23:16
|- - k155la3   Цитата(backa @ Apr 27 2018, 02:16) . . . ...   Apr 27 2018, 16:09
|- - jcxz   Цитата(k155la3 @ Apr 27 2018, 19:09) IAR,...   Apr 28 2018, 05:45
|- - k155la3   Цитата(jcxz @ Apr 28 2018, 08:45) О каких...   Apr 28 2018, 13:09
- - AlexandrY   Цитата(Arlleex @ Mar 22 2018, 19:13) Каки...   Apr 28 2018, 07:58
|- - ViKo   Цитата(AlexandrY @ Apr 28 2018, 10:58) Во...   Apr 28 2018, 08:55
|- - jcxz   Цитата(ViKo @ Apr 28 2018, 11:55) Без флэ...   Apr 28 2018, 09:52
|- - AlexandrY   Цитата(ViKo @ Apr 28 2018, 11:55) Без флэ...   Apr 28 2018, 10:48
- - segment   А что за "Wireless connectivity interface for...   Apr 28 2018, 12:00
|- - AlexandrY   Цитата(segment @ Apr 28 2018, 15:00) А чт...   Apr 28 2018, 14:02
|- - k155la3   Цитата(AlexandrY @ Apr 28 2018, 17:02) . ...   Apr 28 2018, 18:04
|- - adnega   Цитата(k155la3 @ Apr 28 2018, 21:04) У ST...   Apr 28 2018, 18:59
|- - k155la3   Цитата(adnega @ Apr 28 2018, 21:59) Может...   Apr 28 2018, 19:23
|- - adnega   Цитата(k155la3 @ Apr 28 2018, 22:23) А ес...   Apr 29 2018, 05:45
|- - k155la3   Цитата(adnega @ Apr 29 2018, 08:45) Т.е. ...   Apr 29 2018, 10:46
- - Arlleex   За документацию с кучей перекрестных ссылок можно ...   May 6 2018, 08:20
|- - AlexandrY   Цитата(Arlleex @ May 6 2018, 11:20) За до...   May 6 2018, 12:05
|- - jcxz   Цитата(AlexandrY @ May 6 2018, 15:05) Сек...   May 6 2018, 15:39
- - Arlleex   Тогда действительно что-то с ним точно не так Ко...   May 6 2018, 15:06
- - Arlleex   ЦитатаНу "в каком-то из STM32" максимум ...   May 6 2018, 16:29
|- - jcxz   Цитата(Arlleex @ May 6 2018, 19:29) 3. В ...   May 6 2018, 17:04
- - Arlleex   Да уж, я думал я один изворачиваюсь с периферией к...   May 6 2018, 21:09
- - Arlleex   Итак, ради интереса сделал тест. Использую аппарат...   May 7 2018, 19:56
|- - jcxz   Цитата(Arlleex @ May 7 2018, 22:56) 7. Вк...   May 9 2018, 05:06
- - COMA   Я для себя определил два варианта для перехода: се...   May 9 2018, 05:58
- - Arlleex   ЦитатаТолько зачем было делать столько телодвижени...   May 9 2018, 13:03
- - Arlleex   Итак, выложу сюда две растактовки из экспериментов...   May 9 2018, 15:26
|- - jcxz   Цитата(Arlleex @ May 9 2018, 18:26) Итак,...   May 9 2018, 15:48
- - Arlleex   Никакого абсолютно. У меня в проектах он всегда вк...   May 9 2018, 15:54
- - Arlleex   Подниму свою же тему. 1. Программировал платку с X...   Jul 6 2018, 05:17
|- - jcxz   Цитата(Arlleex @ Jul 6 2018, 08:17) 1. Пр...   Jul 6 2018, 08:05
|- - Arlleex   Цитата(jcxz @ Jul 6 2018, 12:05) PS: Ну и...   Jul 6 2018, 08:25
|- - jcxz   Цитата(Arlleex @ Jul 6 2018, 11:25) А впе...   Jul 6 2018, 08:30
|- - Arlleex   Цитата(jcxz @ Jul 6 2018, 12:30) Да, чере...   Jul 6 2018, 08:35
|- - jcxz   Цитата(Arlleex @ Jul 6 2018, 11:35) Вы ис...   Jul 6 2018, 08:36
- - Arlleex   Боюсь мне начальство не выделит времени на такие п...   Jul 6 2018, 09:07
- - jcxz   Цитата(Arlleex @ Jul 6 2018, 12:07) Боюсь...   Jul 6 2018, 09:50
- - Arlleex   Цитата(jcxz @ Jul 6 2018, 13:50) Начальст...   Jul 6 2018, 10:04


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

 


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


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