|
|
|
На что бы перейти..., В плане платформы |
|
|
|
Mar 24 2018, 08:11
|
Гуру
Группа: Свой
Сообщений: 2 724
Регистрация: 14-05-07
Из: Ярославль, Россия
Пользователь №: 27 702
|
Цитата(dac @ Mar 24 2018, 10:52) приходит прерывание от таймера/внешнего прерывания с интервалом 1мкс 1мкс -> 1МГц. Даже на МК с тактовой 168МГц у вас 168 тактов на посылку. По-моему, ничего разумного за такое время не сделать. STM32F тут не подходит не из-за SPI, а из-за общей производительности. Тут вариант - на внешней ПЛИС сделать опрос АЦП, а МК предоставить доступ по внешней шине, или правдами-неправдами "окутать" доступ к АЦП в какой-нить DCMI при помощи CPLD попроще. У ТС озвучивалась задача 5кГц, и под нее выбирались МК типа STM32F Цитата задача описана словами "надо дискретизировать сигнал 5000 выборок/сек и передать отсчеты наружу...", невольно понимаешь, что STM32 тут за глаза. Цитата(adnega @ Mar 24 2018, 11:09) 1мкс -> 1МГц. Даже на МК с тактовой 168МГц у вас 168 тактов на посылку. По-моему, ничего разумного за такое время не сделать. STM32F тут не подходит не из-за SPI, а из-за общей производительности. Тут вариант - на внешней ПЛИС сделать опрос АЦП, а МК предоставить доступ по внешней шине, или правдами-неправдами "окутать" доступ к АЦП в какой-нить DCMI при помощи CPLD попроще. У ТС озвучивалась задача 5кГц, и под нее выбирались МК типа STM32F Если 5кГц это максимум, то на любом STM32F это делается легко даже с ручным дерганьем CS.
|
|
|
|
|
Mar 24 2018, 08:54
|
Знающий
Группа: Свой
Сообщений: 600
Регистрация: 27-05-05
Пользователь №: 5 482
|
QUOTE (adnega @ Mar 24 2018, 14:11) 1мкс -> 1МГц. Даже на МК с тактовой 168МГц у вас 168 тактов на посылку. По-моему, ничего разумного за такое время не сделать. у меня процесс непериодический, т.е. мне не надо постоянно с таким интервалом, поэтому dma решает проблему. новые stm32f умеют произвольное слово от 4 до 16 бит ЗЫ даже если 5кГц два раза дергать прерывание по 8 тактов вход/выход + сохранить, тоже нифига не радостно
|
|
|
|
|
Mar 24 2018, 10:21
|
Гуру
Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713
|
Цитата(dac @ Mar 24 2018, 09:52) а еще извращенцы из LT делают ацп которым нужно 17-18 тактов на SPI, вот тоже ни туда, ни сюда, но это уже так, придирки Так возьмите МК с богатой реализацией SPI, а не урезанной. Например: XMC4xxx - "Number of data bits per data frame 1 to 63". И будет Вам и туда и сюда. А вообще во многих SPI-АЦП частота преобразования и частота SCLK - это разные частоты, с разными источниками. Так что SCLK просто берётся с запасом и всё. Цитата(adnega @ Mar 24 2018, 10:11) 1мкс -> 1МГц. Даже на МК с тактовой 168МГц у вас 168 тактов на посылку. По-моему, ничего разумного за такое время не сделать. STM32F тут не подходит не из-за SPI, а из-за общей производительности. Тут вариант - на внешней ПЛИС сделать опрос АЦП, а МК предоставить доступ по внешней шине, Не сделать чего??? 168 тактов - это вагон + ещё маленькая тележка. 168 тактов - это не много, а очень дофига для любой пересылки. Ну конечно если иметь полноценный SPI-контроллер, а не "ручками" как на STM32. Да впрочем и на STM32 тоже можно сделать "не ручками" если голову включить. И будет совсем незначительная загрузка МК. Для МК с более фичастым SPI, 1МГц - это вообще ни о чём. У меня на XMC4700 SPI работают с SCLK в 30-36 МГц при ядре 120-144МГц. Причём - параллельно по 2 канала SPI да ещё один при этом в dual-SPI. Загрузка CPU незначительная. Цитата(_pv @ Mar 24 2018, 10:34) ну нормальные последовательные порты умеют не только нормально аппаратно чипселектами дёргать но и произвольную длину слова задавать. У меня в проекте на XMC4700 даже один из UART-ов работает с длиной слова 26 бит (1старт+24данных+1стоп). Вот это и называется - гибкая и эффективная периферия Цитата(dac @ Mar 24 2018, 10:54) ЗЫ даже если 5кГц два раза дергать прерывание по 8 тактов вход/выход + сохранить, тоже нифига не радостно Ну это уже скорее паранойя.... или тяжкое наследие АВР 12*2*2*5000/168e+6 = ~0.143% загрузка CPU (168МГц). Даже с учётом того что вход/выход в ISR явно не 8 тактов (с чего Вы взяли?), а 12 тактов - это всё равно ни о чём. Да и вообще - как уже говорил выше - с головой даже на STM32 можно сделать без дёрганий в прерывания: завести сигнал прерывания от АЦП на какую-нить периферию, умеющую генерить запросы обслуживания к DMA (таймер например), и дальше всё сделать DMA: и CS и транзакцию по SPI.
|
|
|
|
|
Mar 24 2018, 17:02
|
Местный
Группа: Участник
Сообщений: 492
Регистрация: 12-11-11
Пользователь №: 68 264
|
Да вот элементарный пример, решение которого полностью решило бы такую проблему. Возможно ли в STM32F4 настроить периодическую отправку в SPI по DMA? Я бы настроил событие по совпадению таймера 5000 раз в секунду пинать DMA, чтобы он положил данные в SPI->DR. Началась бы передача, по завершении которой выставился флаг RXNE, который пинал бы другой канал DMA, и тот складировал данные в буфер и говорил мне когда нужный объём данных наберётся для передачи по другому интерфейсу разом. DMA устроен же так, что в режиме память-регистр я могу указывать только адрес регистра только того модуля, который пнул этот канал DMA, а как было бы здорово по запросу DMA от таймера сделать пересылку в SPI-DR, то есть в модуль, который не пинал этот DMA. Периодические вещи, например, отправки или прием данных по разным интерфейсам, в том числе SPI, стали бы возможны вовсе без участия процессора!
|
|
|
|
|
Mar 24 2018, 17:16
|
Гуру
Группа: Свой
Сообщений: 2 724
Регистрация: 14-05-07
Из: Ярославль, Россия
Пользователь №: 27 702
|
Цитата(Arlleex @ Mar 24 2018, 20:02) DMA устроен же так, что в режиме память-регистр я могу указывать только адрес регистра только того модуля, который пнул этот канал DMA, С чего вы это взяли? DMA может откуда угодно куда угодно произвести транзакцию, если на это нет ограничений (CCM, выравнивание и т.п.) и есть доступ к соответствующим шинам. Много раз обсуждалось, как таймер инициирует транзакцию в SPI. Там единственная особенность, что от момента запроса до момента транзакции может пройти некоторое время (у меня получалось ~12 тактов) и при высоких скоростях SPI сложно получить равномерный SCK (без межсимвольных пауз).
|
|
|
|
|
Apr 26 2018, 13:38
|
Профессионал
Группа: Свой
Сообщений: 1 123
Регистрация: 8-03-09
Из: Днепр
Пользователь №: 45 848
|
Цитата(backa @ Apr 24 2018, 23:31) TI "TM4C1294" - дорого и сердито - SPI работае на частоте до 60МГц (1/2 от тактовой) и с выборкой внешнего кристала "SS" там все хорошо))) Никаких . . . Так что для начала - просто сказка а не камушек и платы у них не хуже чем у STM - цена та же - около 20 баксаф... . . . Нечто эдакое ? EK-TM4C1294XL (цена у нас, правда, около 40 кваксов). Программатор-отладчик, по виду, на плате. Как эта платформа в отладке ? (привык к "хорошему", IAR)
|
|
|
|
|
Apr 26 2018, 23:16
|
Местный
Группа: Свой
Сообщений: 313
Регистрация: 15-06-05
Из: Минск
Пользователь №: 6 028
|
Цитата(k155la3 @ Apr 26 2018, 17:38) Нечто эдакое ? EK-TM4C1294XL (цена у нас, правда, около 40 кваксов). Программатор-отладчик, по виду, на плате. Как эта платформа в отладке ? (привык к "хорошему", IAR) У нас чуть дороже 20ки $ настоящих денег) Программатор-отладчик на плате и виртуальный комп-порт для отдалки через принтф , например... Отладка прекрасная - никаких притензий - все доступно - все ресурсы и периферия ... это все в Keil ( тоже привык к хорошему!!! и больше никогда на IAR c этим "убогим" спартанским IDE и "недоотладчиком"). После того как Keil купила ARM .. все встало как надо... Самое важное, что для этого камня есть "безглючная" библиотека низкого уровня и TI поставляет бесплатную, постоянно обновляему IDE собственного производства, но ввиду безальтернативности в лице Keil-а оставил ее без внимания... Вобщем рекомендую для старта!
|
|
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|