Первое практическое ознакомление с DSP TMS320F28335

Наверно вы уже могли читать эту информацию пока она готовилась-варилась в теме на форуме. Ну так как уже накопился объемчик на форуме, то решил поделиться теперь и тут, на блоге.

«Как выяснилось, петь и сочинять не сложно. Достаточно начать — закончить тоже можно.
Я за короткий срок так много сочинил, Что много из того, что сочинил, уже забыл.
Но это не беда, зато я творчески окреп. И вот пою еще одну песню в стиле р-р-р-эп.» — К.Кинчев — «Алиса»

Имея сейчас возможность пощупать в реале DSP TMS320F28335, (Кстати, почти аналогичный чип с TMS320F2808) параллельно решил делиться своим мнением об этом чипе, или может даже правильно сказать о всём семействе C2000, посколько они почти все одинаковы.
По мере появления новых мыслей и воспоминаний буду добавлять их.

Кстати, ранее я уже писал об этом чипе тут и тут и тут.

Краткий и повествовательный обзор мнения от опыта работы с перефериями:
— GPIO
— ADC
— ePWM
— SPI
— SCI
— DMA
— CAN
— IRQ

GPIO — Для работы с GPIO в режиме вывода сигнала используются способы: 3 быстрых и 1 медленный:
— быстрый — операция выдачи сигнала наружу в 1 такт процессора при установке состояний в регистр GPxTOGGLE | GPxCLEAR | GPxSET.
— медленный — операция выдачи сигнала наружу в 3 такта процессора (чтение+модификация+запись) при установке состояний в регистр GPxDAT
Скорость наростания фронта очень крутая, так что, чтоб не было лишнего ВЧ звона лучше сразу возле вывода поставить согласовывающий резистор, около 51Ом.

ADC — Очень крутой ADC, умеющий аппаратно стартовать от сигнала ePWM(а также GPIO, IRQ), причем АЦП тоже конфигурируемый, какой фронт будет задавать старт для начала измерения и т.д. За интервал времени в 80нс измеряет сразу по 16 каналам, и выдает 12 битные значения с очень высокой прицезионностью, я увидел погрешность в 2 разряда(вероятно сигнал был с пульсацияим). Этот АЦП может мерять сигнал с частотой до 12.5МГц.
Выяснил что кроме документированного регистра с измерянными данными есть еще слабо документированный регистр, называется Mirror, в документации про него всего пара строк мелким текстом, однако работать с ним намного быстрее.
(2) The ADC result registers are dual mapped. Locations in Peripheral Frame 2 (0x7108–0x7117) are 2 wait-states and left justified. Locations in Peripheral frame 0 space (0x0B00–0x0B0F) are 1 wait-state for CPU accesses and 0 wait state for DMA accesses and right justified. During high speed/continuous conversion use of the ADC, use the 0 wait-state locations for fast transfer of ADC results to user memory.
При чтении измерянных значений с 16 регистров AdcRegs тратится времени 778нс, а с AdcMirror 556нс, что на почти что 40% быстрее. По какойто странной причине Texas Instruments не приводит в своих примерах работу с этим регистром. Но порывшись в инете нашел что для быстрых измерений используют всегда миррор.
Есть встроенный в чип калибратор, который нужно программно вызывать.
Также есть приведение, указано в еррате на кристал, в симултэниоус режиме выдает неправильные значения первых нескольких измерений, воркэраунд описан там же, в эррате.

ePWM (ШИМ) — Работать может в 3х режимах: 1) UP, 2) DOWN, 3) UPDOWN и также между каналами можно устанавлить мертвую зону(dead-band), полезно при управлении транзисторами, чтобы на затворах исключить колизии относительно 2х каналов A и B. Ну и всякие навороченые фенички и свистоперделки типа детекта трипзоны и т.д. Очень расширенный по свои возможностям ШИМ.
При тактовой 150МГц(а тактируется без всяких делителей, от тактовой проца), я выжал с него все что мог в режиме UPDOWN на частоте канала-A 50МГц, и на канале-B 12.5МГц полностью синхронных. Цель была эксперементально узнать и получить на одном ШИМ 2 сигнала, основной и в 4 раза меньше.

SPI — Пробовал завести для теста loopback, завелся c с пол-пинка. В принципе на этом все, дальше не тестировал, т.к. небыло необходимости.

SCI (Serial Controller Interface) — Пробовал завести для теста loopback, завелся почти что c с пол-пинка только режим передачи. Паралельно гугля, обнаружил что эта проблема снаскоку не решенная не только у меня… Также, если верить даташиту то бит LOOPBACKENA в SCICCR не отображён на блок схеме внутреннего устройства этой переферии. Но что еще странно, для переферии SPI тоже не отображён.
UPD-1 — оказывается, SCI заводится нормально, nо у меня в коде была помеха, так что «страшилки» отсутствуют. Но одна страшилка всеж таки есть, а точнее приведение, о нем сказано в ерате на кристалл, а именно — на больших скоростях не формируется стоповый бит, потому что на 4 такта запаздывает на кристале сигнал…

DMA — не работает в режиме ДМА с перефериями SPI и SCI и это ясно указано в даташите. Причина почему Texas Instruments так сделал, лично мне не ясна, по идее наоборот это обязано быть. но…

CAN — Тоже навороченный, и да, то же присутствует в еррате на кристал, так что готовьтесь ловить приведения. Успел пощупать на практике, он ну и чекнутый это протокол однако… Главное что в этом интерфейсе из недостатков, это то, что его нельзя просто так взть и замкнул вход с выходом и получить loopback. Но, у микроконтроллера есть аналог режима лупбэка, называется Self Test Mode, эт такой там бит в регистре, называется STM. Для того чтобы работать с CAN интерфейсом нужно обязательно подключить прием и передачу на микросхему can-driver, иначе на выводе пина TX даже байт не выйдет, так что осциллографом ничего не увидите. Я полдня промучался, пока это не понял, и главное об этом ни где не сказано, во всяком случае я не нашёл. Как только драйвер припаялся, вам удастся отправлять данные. Но не радуйтесь, не спешите, так как для приема вам нужно по линии CAN отправить ответный байт, или используя сан-аналайзер с возможностью эхо. Приколы с скоростью тут полностью присутствую, так что следите за скоростью внимательно. Скорость может быть от 50кбит/с, до 1Мбит/с. Муть полная, не советую я вам закладывать этот интерфейс, я для себя это решил точно, назачто, хотя он и не плохой с точки зрения задумки.

IRQ — Начал читать про прерывания, очень огорчился по факту. В документации расписано как все круто и красиво, но после глубокого ознакомленя становится очевидно что красивые решение с использованием прерываний не получится, потому что нет явной преоритезации прерываний. Как таковые приоритеты есть, но это не те преоритеты которые позволяют в прерывании отвлечься на ещё более высокоприоритеныое событие. Суть в том что при возникновении прерывания, запускается тот обработчик который с высовим приоритетом. и если в процесссе его обработки возникают ещё несколько прерываний. то они становятся в очередь, и по завершению текущено выполнится следом тот у которого высшый приоритет. Очень напоминает реализацию прерываний у microchip`овских микроконтроллеров. В общем после глубокого прочтения про прерывания стало както угрюмо… не лично я не доволен такой реализацие прерываний и как это все помпезно преподнесено, не смотря на такую деревянную угрюмость в реализации… Не стоит забывать что это DSP, видимо что бы не было неппредусмотреностей они и отказались делать разширенный механизм прерываний. Так что это просто обратная сторона медали, имейте это ввиду.

Из того что мне не понравилось

— char — 16 bit. да, вот такой архитектурный парадокс. И что самое странное  char=short=int

— очень мало памяти, всего 68кбайт ОЗУ. Болеее того, если говорить правильно то 34К*16бит

— double — 32bit, тоесть что float, что double, ну вы поняли….

Итак, таких приключений там придостаточно, однако самое радостное что они все хорошо описаны в документации и таким образом как бы красиво перенесены из плоскости «минус» в «плюс».

 

Из серии — добавил позже… :

Вопрос: Где можно еще почитать про этот чип?

Ответ: Сылок много, если вы в гугле не забанены, то найдете без затруднений. Например вот ранее я уже тут кое-что писал о нём для ознакомления, ну и сойдут также  интереные ссылки: 1. Анализ ядер MIPS32 M4K, Cortex-M3 и C28x как решений для цифровой обработки сигналов. а так же 2. Микроконтроллеры TMS320F28xx

 

Вопрос: Чем эти чипы прошивать и в какой среде разрабатывать?

Ответ: Для разработки программы нужно скачать CCS (Code Composer Studio), он содержит уже хороший компилятор и интегрирована среда разработки с IDE Eclipse(удалено все лишнее, так что работает очень шустро), в связи с этим разработка становится очень комфортной и быстрой.  Прошивать можно отладчиком XDS100V1 или XDS100V2 (XDS100 можно собрать или купить за 17 баксов в составе Piccolo LP) либо через бутлоадер по любому имеющемуся интерфейсу.  В процессе можно программу запускать как с RAM так же и с Flash

 

Вопрос: Где взять или как сделать XDS100 v1.0 ?

Ответ: Можно купить ( XDS100V2 стоит около 100 грн ), а можно также собрать самостоятельно. Варианты кстати есть, например: Ссылка , где отладчик-программатор работает через всеми горячолюбимый FT2232D.

 

Вопрос: Я везде встречаю информацию что этот чип предназначен только под управление движков?

Ответ: Нет, это не верно и верно одновременно. Он скорее предназначен под разные фокусы с ШИМом, а там уж что вы будете на него нагружать это второй вопрос — движки или затворы драйверов для источника питания или че нить ещё, это уже не принципиально. Этот чип к моторам не имеет прямое отношение, он имеет прямое отношение к ШИМу который очень тут продвинут. Можно также через DMA спуститься на более оппаратный уровень таким образом освободив рессурсы процессора для других задач. ;)

 

Вопрос: Где можно найти ряд уроков для начинающих, например для помигать светодиодиком, затем тоже самое, но через прерывание, примеры для работы с периферией, и т д?

Ответ: 1) Для каждого MCU есть так называемые «Header Files and Peripheral Examples» на оф сайте. А по применению «Application Notes» от туда же.  C2000 Teaching ROM дла начала хватит :) На главной www.ti.com/product/TMS320F28335 есть ссылки в разделе — Software (10). Кроме того скачайте архив от TI — controlSUITE(800 МБайт) который содержит рабочие примеры и проекты, а также описания на абсолютно всю переферию.  В гугле легко находятся по поиску через вариации запроса вокруг «tms320f28335 source code ftp» и т.д.

2) http://s.pudn.com/search_hot_en.asp?k=tms320f28335 + http://s.pudn.com/search_hot_en.asp?k=tms320f2812 — о-о-о-очень много исходных кодов с примерами

 

 

Добавить комментарий