Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: TMS320 - начало пути
Форум разработчиков электроники ELECTRONIX.ru > Цифровая обработка сигналов - ЦОС (DSP) > Сигнальные процессоры и их программирование - DSP
Страницы: 1, 2, 3, 4
zi4rox
Есть задача и желание разобраться и освоить работу c TMS320.
Первый заход в поисковики и форумы - выдал примерную картину для меня: "обсуждения каких-то конкретных проблем есть, решения есть - но такое ощущение что все как бы сразу уже умеют работать с ними, а начального уровня нигде не увидел".

Для освоения данных процессоров есть простая задача: сделать на базе тмс320 цифровой фильтр н-ого порядка. Первый вопрос который сразу же задал себе - чем и как программировать, среда разработки и т.п. Вообще куча вопросов (потому что опыта работы с ними нет вообще, есть большой опыт проектирования девайсов на авр - там то инфы было завались). Надеюсь что поможете добрым словом, и данный тред будет полезен таким же новичкам

1. Среда разработки
Ну тут вроде все прозрачно, почти все упоминания сводятся к Code Composer Studio. Вроде все хорошо тут и на си кодится )

2. Программатор
Вот здесь у меня оооочень большие вопросы и сомнения. Схем программаторов как таковых не нашел вообще нигде, на форумах у всех есть тестовые-платы которые стоят очень много и заводские программаторы-эмуляторы, которые стоят ещё дороже. Единственное что нашел так это Olimex TMS320-JTAG программатор-эмулятор + на форуме по нему отзывы тоже разношерстные.
В общем я очень сильно задаюсь вопросом - как прошивать-то?. Или я действительно оплошался, наивно полагая что заказав сэмпл проца с техаса и спаяв/купив дешевый программатор можно начать работать?

3. Какой проц взять?
Из вашего личного опыта - с каким семейством проще начать работу и изучение? Пока склоняюсь, что надо заказывать TMS320FC28xx - исходя только из тех соображений, что именно их можно прошивать бюджетным программатором от Olimeх.

4. Примеры, схемы
И ещё один нюанс который не очень нравиться - почти нет схем, примеров проектов на данных процах. Все юзают отладочные платы, которые мне не под силу достать. Хоть парочку бы простеньких реализаций, посмотреть обвязку, как программить и подключать - хоть что-то. В даташите тоже ооочень скудно.

Так что вот, пока смотрю как на большой черный ящик, у которого приоткрыл крышку - но пока все равно ничего не видно. Но желание осилить это дело есть - прошу добрых людей направить в нужную сторону и помочь добрым постом )
kamil_yaminov
1) Если писать алгоритмы ЦОС, то писать на ассемблере
2) Грузить и прошивать можно разными способами, в том числе и через RS232. Софт для этого наверное можно найти на spectrumdigital.com. Про способы загрузки и прошивки есть пдфки на сайте техасцев. Вообще, у них на сайте можно найти много чего полезного. Есть простенький эмулятор XDS100. На сайте техаса выложена схема данного устройства - можно собрать самому, либо купить, благо стоит он 79$. Для начала пойдет.
3) 28хх больше ориентированы на управление двигателями и источниками питания и являются больше МК, чем ЦСП. Если нужно реализовывать алгоритмы ЦОС, то стоит обратить внимание на С5000 и С6000. Хотя в последнее время и среди 28хх появились интересные камни.
4) Куча разных примеров есть на сайте ti.com. На spectrumdigital.com можно найти схемы отладочников.

Но для начала стоит определиться, для каких целей предполагается использовать процессор. Потом выбрать семейство, а дальше будет легче со всем остальным.

UPD. Сечас sigmaN еще подкинет дровишек )
sigmaN
http://focus.ti.com/docs/toolsw/folders/pr...dx28027usb.html

Стоит около 40баксов.
Выглядит как флэшка, там на плате сразу контроллер и эмулятор.
Можно и шить и отлаживать(хотя и медленно, конечно).

Ну самоделок вы не найдете наверное....это ж не АВР всё таки smile.gif тут бабки делаются на всём чем можно. smile.gif

Ну и искать нужно если чисто для C2000 - то цена будет ниже соответственно.
с TMS320 начинается очень много процов.
По С2000 это ИМХО самый дешевый вариант. 40$

Конечно, полноценная отладочная плата от Спектрум Дигитал за 500 баксов это может быть дороговато, но зато там реально БЫСТРЫЙ эмулятор на борту и некоторая переферия имеется....
Т.е. цена конечно завышена, спору нет, но зато это удобно smile.gif
Купите ezDSP F28335 один раз и сможете много чего попробывать(на много круче, чем просто фильтр)......

Added: эх. Опять опередили, пока мой ADSL переподключался smile.gif
А чё, в C2000 тоже неплохая DSP цифромельница стоит. Многое можно на ней обкатать. А ежели ещё проц с FPU сразу взять - так и ваще сказка.
Другое дело, что памяти маловато и флэш тормознутая - это ДА smile.gif
SM
Цитата(zi4rox @ Nov 16 2009, 20:09) *
2. Программатор
Вот здесь у меня оооочень большие вопросы и сомнения. Схем программаторов как таковых не нашел вообще нигде

Ну плохо искали. Я довольно давно выкладывал. http://projects.caxapa.ru/?ID=6 И его суть - внутрисхемный отладчик, а не програмамтор, программировать/грузить можно почти все процы через их разнообразные интерфейсы, SPI, UART, USB, I2C, у кого что есть. Кстати, сейчас в принципе возможно убрать из схемы ACT8990, у меня уже есть решение для размещения внутри ПЛИС, но нет стимула возиться.

Цитата(zi4rox @ Nov 16 2009, 20:09) *
3. Какой проц взять?
Из вашего личного опыта - с каким семейством проще начать работу и изучение? Пока склоняюсь, что надо заказывать TMS320FC28xx - исходя только из тех соображений, что именно их можно прошивать бюджетным программатором от Olimeх.

Возьмите TMS320VC5509 или 5507. Их можно грузить просто через их же USB без каких либо программаторов. И для запуска ему достаточно питания и кварца 12-мгц-ового. Для старта самое то. А на 28хх пересядете если что легко.

Цитата(kamil yaminov @ Nov 16 2009, 20:48) *
1) Если писать алгоритмы ЦОС, то писать на ассемблере

Ага, особенно под 6000-ки smile.gif smile.gif Крышу на раз сносит!
Fedor_spb-2
Да не обидится на меня zi4rox создавший тему. У меня аналогичная ситуация со знаниями по этому DSP, но вопрос другой: как считать память из флэш? Уж и чем только не пробовал, везде erase, program, verify есть, а read нет. Почему? И как это можно сделать? В наличии TMS320F2811, XDS510, CCS4, SDFlash, SDConfig. Спасибо.
SM
Цитата(Fedor_spb-2 @ Nov 17 2009, 11:50) *
как считать память из флэш?

Оригинальная формулировка... Как считать память из памяти. smile.gif

В CCS3 это было Tools->Memory Save/Load utility.
Fedor_spb-2
Да да. Сам перечитал, улыбнулся, но, подумал, ведь профи-то меня поймут.

В CCS4 есть Tools->On-Chip Flash. Раскрывается закладка, а там Erase, Program, Verify. Чуть ниже Program, Verify и еще ниже Load RAM only. И все. sad.gif
SM
Цитата(Fedor_spb-2 @ Nov 17 2009, 12:39) *
В CCS4 есть Tools->On-Chip Flash.

Да причем тут флеш? Там совсем другой тул, который просто сохраянет кусок адресного пространства проца, флеш там или нет, внутренняя или внешняя, в файл. Это не во флеш-тулзах. Четвертого композера у меня сейчас нет под рукой, а где в третьем - я же конкретно указал.
Fedor_spb-2
Уррря. Нашел. View->Memory, откроется окно, а тум уж правой мышкой выбрать. Казалось бы просто, но с наскока не видел пока с каждой кнопочкой не разобрался. Собственно, задавал вопрос только для того, чтобы вдруг не искать долго и нудно то, чего нет и не предусмотрено. Когда сказали есть, стал искать. Спасибо за помощь.
zi4rox
Начальный курс понял - закажу процы, проштудирую дш, и буду уже ручками пробывать. Тогда уже конкретные вопросы будут. спасибо
qxov
Цитата(kamil yaminov @ Nov 16 2009, 20:48) *
1) Если писать алгоритмы ЦОС, то писать на ассемблере

Голословно.
SM
Цитата(qxov @ Dec 10 2009, 13:48) *
Голословно.

Зато эффективно. Целые немаленькие фирмы трудятся над оптимизацией ЦОС-алгоритмов на ассемблерном уровне и живут этим. Даже с 6000-ками, где асм-программирование трудно и геморройно, оно нередко себя оправдывает на ЦОС-алгоритмах.
segnetik
Добрый день! С TMS320VC5507 при загрузке через USB возникла следующая проблема - процессор не определяется компом. Для загрузки, следуя инструкциям из мануала, выполняю следующие шаги :
1. Включаю питание
2. Перевожу проц в режим загрузки с USB
3. Делаю сброс проца

после сброса никаких эмоций... если линии данных USB подтянуть к 3.3В ( D- через 1.5К, D+ через 1М резисторы), то появляется неизвестное устройство с пустыми вид и пид, что естественно ни о чем не говорит... Уровни напряжений на линиях данных - 0,5 на D- и 0 D+ crying.gif

USBVdd = Vdd = 3,33В. CVdd = 1,26В. кварцевый резонатор стоит на 12 МГц.
соответственно, возникло несколько вопросов :
1. +5В от USB не подключено никуда?
2. PU ( через 1,5К подключено к D+, по даташиту ) должно быть внутри проца соединено с 3,3В, однако даже при отключенном шнуре USB, на данном пине этими 3,3 В и не пахнет... Каюк USB модулю в проце?

P.S. Отсутствие КЗ или непропаев исключено - проверял множество раз уже...
Alex11
Вроде бы все правильно. Проверьте, действительно ли Вы поставили его в режим загрузки с USB. Там легко можно попутать выводы. Проверьте фронт сигнала Reset. Если он пологий - проц может просто не запускаться.
SM
А еще проверьте, чтобы на EMU0 и EMU1 было по единице. А то процессор просто может оказаться в состоянии "OFF" когда все его пины в третьем состоянии.
bullit
Всем добрый день!
Вот смотрю в сторону TMS320F28234 и понять не могу по поводу частоты переключения "ног".
Может кто нить пояснить?
Вот в даташите написанно мол скорость на выход макс 25 МГц, а на вход? там чёт такое написанно, а разобраться не могу...
Если кому не трудно, поясните пжлст.
Дело в том что хочу ентот камень на ацп 20MSPS подключить. Вот думаю буду ли я успевать читать с портов? Или может какой другой камень лучше подойдёт?
Yura_K
1) Обычно у таких АЦП LVDS выходы, а у DSP'ков вроде как нет LVDS интерфейсов.
2) Для работы со скоростными интерфейсами лучше применить ПЛИС, возможно даже FPGA (в них и поддержка LVDS имеется).
3) В даташите пишут: If QUALPRD = 00, then the sampling period is 1 SYSCLKOUT cycle, т.е. при отключении входного "фильтра", частота опроса равна 150 МГц.
Alex11
Если Вам нужно взять, скажем 1000 отсчетов, затем пауза для обработки, а затем снова - тогда еще шанс есть, хотя и невеликий. А если в непрерыве и с обработкой - то не успеете.
bullit
1) У данной АЦП обычный паралельный интерфейс. Вот уже у 40МГц-овых LVDS стоит.
2) с ПЛИСами не знаком, к сожелению. Времени освоить боюсь больше нужно будет.
3) тогда это меняет дело. Но выход выше 25 достичь нереально?
А то ведь еще операции (чтение порта, запись в внутр. озу, счётчик измерений проверять) делать надо.

Мне 2000-3000 точек максимум всего. А потом пульнуть по SPI, но не всё, а тока кусочек (выбирается из сигнала некоторый кусочек). Задача у мк всего-то принять, найти кусок сигнала где он меняется (по уровню сигнала) и несколько точек передать.
segnetik
Добрый день! Получилось завести железяку tms320vc5507, определятся через USB, грузится и через SPI EEPROM и через USB.
Возник вопрос по программированию - как выставлять данные на линии D0-D15 (как при использовании EMIF, так и при HPI)? насколько я понял - регистры связанные с данными интерфейсами содержат только флаги управления и состояния. В CSL обнаружил функции только для конфигурирования (( Подскажите пожалуйста.
SM
Цитата(segnetik @ Jan 20 2010, 15:36) *
Возник вопрос по программированию - как выставлять данные на линии D0-D15 (как при использовании EMIF, так и при HPI)?


При EMIF - просто записью или чтением по адресам адресного пространства процессора, соответствующим нужному CEx емифа. При HPI - никак. HPI работает наоборот - обеспечивает доступ к памяти процессора со стороны другого внешнего устройства, выступающего в роли мастера.
segnetik
Спасибо!
kamil_yaminov
А может тему того? Подвесить сверху?
segnetik
Возник новый вопрос по TMS320VC5507/09A smile.gif Существует ли возможность однократного вывода данных на линии D0-D15? Другими словами мне необходимо на данные линии в произвольные моменты времени выводить некоторые данные. Возможно ли это реализовать и если да то как лучше?
aaarrr
И что подразумевается под "однократным выводом"? Пишете по нужному адресу, EMIF на шине ставит данные - дергает стробы. Или же вы хотите устанавливать линии D0-D15 на манер GPIO?
segnetik
Грубо говоря - да, на манер GPIO. Ведь когда данные выводишь через EMIF, он начинает последовательно перебирать содержимое отведенной памяти. Что данные линии (Д0-Д15) линиями GPIO не являются я знаю, но возможно существует какой-либо фокус с конфигами EMIF или с использованием однократного DMA DARAM -> EMIF, чтобы их можно было использовать как таковые? rolleyes.gif
SM
Сигналы данных и управления так использовать не представляется возможным. А вот сигналы шины адреса - A15...A0 - можно, переключив режим в регистре EBSR на DATA EMIF или MULTIPLEXED HPI.

Цитата
Ведь когда данные выводишь через EMIF, он начинает последовательно перебирать содержимое отведенной памяти

Извините, но это какой-то бред. EMIF сам никогда и ничего перебирать не начинает. Сделали один вывод в адресное пространство, соответствующее EMIF-у, он, EMIF, сгенерировал один цикл доступа в внешнюю память. А вот останется ли после этого цикла линия данных в том состоянии, в котором была во время цикла - смотрите осциллографом. Возможно и останется, там есть bus holder-ы. А возможно и нет... Никто не обещает.
Andron_
bus-holder'ы есть на шине данных... но штука специфичная, для GPIO плохо подходит... триггер басхолдера запросто опрокидывается емкостью щупа осциллографа...
aaarrr
А простую защелку(-и) типа 16374/374 подцепить никак нельзя?
SM
Цитата(aaarrr @ Jan 24 2010, 09:53) *
А простую защелку

Как правило плату сначала разводят и изготавливают, а потом начинают думать, как теперь что сделать smile.gif
segnetik
Поначалу разбирался с tms320vc5502, там половину линий данных можно под пользовательские нужды задействовать, потому никак не мог предположить что такая засада может быть smile.gif Хранители действительно как-то странно работают здесь... В итоге решил оставить в покое эти Д0-Д15 и использовать преобразователь I2C -> параллельные 8/16 бит. Для поставленной задачи производительности I2C за глаза. Спасибо всем за ответы!!!
SM
Цитата(segnetik @ Jan 24 2010, 14:52) *
Поначалу разбирался с tms320vc5502,

так 5501/2 сделали значительно позже, чем 5509 (5507 это он же, но кастрированный). В нем, 5501/2, видимо и сделали GPIO на данных по пожеланию недовольных от 5509
kamil_yaminov
Спрошу и я. Никак не могу сообразить как заинлайнить функцию. Процессор F2809.

В хидере пишу вот такое:
Код
inline void CanWrite(Uint16 CHAN_NUMBER, TCAN_DATA *DATA);

В сишном файле вот такое:
Код
inline void CanWrite(Uint16 CHAN_NUMBER, TCAN_DATA *DATA)
{
    //тут код, который запихивает данные в дата-регистры меэйлбокса
}

Компилятор, соответственно ругается матом, говорит, что function "CanWrite" was declared but never referenced. Что почитать? Керниган и Ритчи по этому поводу молчат. Понимаю, что K&R C не самой последней свежести, хочется поднять свой уровень с быдлокодерства чутка повыше ).

PS. Товарищам модерам: может данную тему закрепить как важную сверху, чтобы тут те кто присматривается/начинает спрашивали/читали, дабы каждый раз не плодить новую тему?
aaarrr
Так в чем проблема? Если функция "never referenced", так стало быть и некуда ее инлайнить.
kamil_yaminov
Да вроде используется она, в другом месте: есть сишный файлик с основным циклом, там делаю:
Код
#include "CAN.h"
.......
    CanWrite(AnswerTx, &TxData);
.......

CAN.h - это там, где объявлена функция CanWrite
aaarrr
Цитата(kamil yaminov @ Jan 28 2010, 15:09) *
Да вроде используется она, в другом месте

В другом месте компилятор ее, естественно, не видит: тела-то нет, оно закопано в другом C-файле, о котором компилятор не имеет ни малейшего понятия.
kamil_yaminov
Так, когда я убираю из описания функции ключевое слово inline, то все работает.
aaarrr
Конечно - тогда это забота линкера, который в курсе всего.

Чтобы использовать инлайн функцию, нужно ее разместить так, чтобы компилятор ее видел, т.е. или в самом модуле, или в подключаемом хидере.
Andron_
тело inline-функций должно размещаться в месте объявления.

вот это все должно быть написано в хедэре:

Код
inline void CanWrite(Uint16 CHAN_NUMBER, TCAN_DATA *DATA)
{
    //тут код, который запихивает данные в дата-регистры меэйлбокса
}


дядька Страуструп об этом писал английским по белому.
kamil_yaminov
Спасибо!! Теперь ясно. Надо попробоватьУже запробовал - работает. Признаю, про линкер ступил, мог бы и додуматься сам )
C-r-o-w
Ребят, очень надеюсь, что тема не умерла. Прошу помощи по TMS320VC5506. Где можно посмотреть любой готовый проект на данном (или хотя бы из серии C55xx) процессоре? Интересует банальный запуск сего камня с загрузкой через USB, т.е. что и как нужно в нем запитать (в частности, питание 1.2 вольта относится ТОЛЬКО к ядру и модулю USBPLL? т.е. управление всеми логическими уровнями (в т.ч. GPIO для выбора boot-loader'а) производится с помощью +3.3 В? какие еще выводы (кроме RESET и вышеупомянутых EMU0,1) нужно повесить на "1" (или "0"))?
Ramil
Частичный перевод даташита на tms320f2808. На "ляпы" перевода не ругайтесь ), не профи в этом, там где стоят символы ???? не уверен в правильности, вставлял для того чтобы вернутся к этим фрагментам позже - искать проще. Переводил для себя, - английский немного подучить, да и на русском проще воспринимается. Не закончил потому что больше нет необходимости в этом. Может и понадобится кому. laughing.gif

Racurs
Возникла проблема при программировании CAN в TMS320F2812. Решил руководствуясь даташитом настроить CAN и отправить данные -- отправка в шину не идёт. Скачал пример sprc097 ecan_back2back, изменил в нём бит STM=0 -- тот же результат. Может кто-нибудь сталкивался с программированием CAN и есть рабочие проекты, как увидеть хоть что-нибудь на выходе? И ещё вопрос: необходимо ли подключать на шину хотябы одно устройство CAN чтобы пошла передача от модуля CAN в TMS?
argentum
Цитата(Fedor_spb-2 @ Nov 17 2009, 14:04) *
Уррря. Нашел. View->Memory, откроется окно, а тум уж правой мышкой выбрать. Казалось бы просто, но с наскока не видел пока с каждой кнопочкой не разобрался. Собственно, задавал вопрос только для того, чтобы вдруг не искать долго и нудно то, чего нет и не предусмотрено. Когда сказали есть, стал искать. Спасибо за помощь.

Уважаемый Fedor_spb-2, подскажите, как вам удалось скачать программу из памяти?
У меня в указаном окне все элементы неактивны!
Spinch
Ломаю прошивку для TMS320C28xx под Code Composer Studio.
Прошивка мне досталась "в наследство" от ушедшего сотрудника.

Суть проблемы: На данный момент отведено под прошивку только три сектора памяти, а сама прошивка вылезла за пределы. Необходимо подцепить четвёртый сектор. Кто может внятно рассказать где и как это сделать?
Заранее спасибо.
Matic
Цитата(Spinch @ Nov 21 2011, 15:31) *
Ломаю прошивку для TMS320C28xx под Code Composer Studio.
Прошивка мне досталась "в наследство" от ушедшего сотрудника.

Суть проблемы: На данный момент отведено под прошивку только три сектора памяти, а сама прошивка вылезла за пределы. Необходимо подцепить четвёртый сектор. Кто может внятно рассказать где и как это сделать?
Заранее спасибо.


У Вас исходники есть или нет?
Spinch
Цитата(Matic @ Nov 21 2011, 15:39) *
У Вас исходники есть или нет?


Исходники в полном объёме. Их и дорабатываю. Правда пока не постиг полного дзена приходится консультироваться у гуру sm.gif
Нашел файл f2812.cmd

Вроде интересубщее место тут:
Код
SECTIONS
{

   /* Allocate program areas: */
   .cinit              : > FLASHB      PAGE = 0
   .pinit              : > FLASHB,     PAGE = 0
   .text               : > FLASHC      PAGE = 0
   codestart           : > BEGIN       PAGE = 0
   ramfuncs            : LOAD = FLASHC,
                         RUN = RAML0,
                         LOAD_START(_RamfuncsLoadStart),
                         LOAD_END(_RamfuncsLoadEnd),
                         RUN_START(_RamfuncsRunStart),
                         PAGE = 0

   csmpasswds          : > CSM_PWL     PAGE = 0
   csm_rsvd            : > CSM_RSVD    PAGE = 0


собственно текст ошибки:

Код
<Linking>
>>   error: can't allocate ramfuncs, size 00000360 (page 0) in FLASHC (avail:
            00000331)
>>   error: errors in input - ./Debug/iss.out not built

>> Compilation failure




----------------------------------------------------------------------------------------------
UPD:
Всем спасибо, что выслушали. Внимательное прочтение всоего же сообщения выявило подсказку sm.gif
Вроде всё заработало после переноса ramfuncs в сектор D
Andron77
Всем доброго времени суток.
Осваиваю TMS320F2808 всего пару недель, есть несколько вопросов по тактам и по реализации точных временных задержек.
ЦСП установлен на планке, заводском контрольном модуле под DIMM100, отладочной плате кто-то приделал ноги, поэтому сделал свою, программирование и отладка в CCS4.1.3 через XDS100V2 USB JTAG, DSP/BIOSа нету.

Тестовая небольшая программка моргает парой светодиодов в разных режимах. В ней реализована обычная программная задержка, прерывания все отключены. Частота кварца 20МГц, SYSCLKOUT проца 10МГц, выход внешнего такта 10/4=2.5МГЦ (точно измерено), то есть все по умолчанию.

В автономке JTAG отключен, общая программа записана во флэш (конвейер отключен), но подпрограмма задержки при инициализации копируется один раз в RAM L0 и там выполняется все время (проверено дизассемблером).
Подпрограмка задержки на С простая.
------------------------------------------------
void delay_loop(Uint32 tmp)
{
do{
tmp--;}
while (tmp>0);
}
-----------------------------------------------
Соответствующий asm дизассемблера, цикл который крутится, от него в основном и зависит длительность задержки
отрабатывает за 7 тактов, то есть по идеи за 0.7мкс на 10_МГц, цикл крутится 428571 раз (расчет 0.3сек)

m1: movb acc,#1 (1 такт)
subl *-sp[2],acc (1 такт)
movl acc,*-sp[2] (1 такт)
sbf m1, NEQ (4 такта)

Но реально измеренная задержка больше расчетной на 30%, 0.4с вместо 0.3с. Почему?
Выходит, что доступ к RAM L0 работает с циклами ожидания? хотя в даташите написано 0-wait?
Либо какая-то команда выполняется больше, чем 1 такт?
jcxz
Вы где эти задержки меряете? На GPIO? Ну тогда это у вас задержка GPIO. Ну не предназначен он для таких временных интервалов.
Если уж пишете о %, то элементарно проверьте на больших величинах задержки. Если ошибка не пропорциональна величине задержки,
а является константой - это явно из-за частоты работы GPIO.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2024 Invision Power Services, Inc.