|
|
  |
TMS320 - начало пути, Прошу помощи в освоении |
|
|
|
Nov 21 2011, 12:31
|
Группа: Новичок
Сообщений: 2
Регистрация: 21-11-11
Пользователь №: 68 432

|
Ломаю прошивку для TMS320C28xx под Code Composer Studio. Прошивка мне досталась "в наследство" от ушедшего сотрудника.
Суть проблемы: На данный момент отведено под прошивку только три сектора памяти, а сама прошивка вылезла за пределы. Необходимо подцепить четвёртый сектор. Кто может внятно рассказать где и как это сделать? Заранее спасибо.
|
|
|
|
|
Nov 21 2011, 12:39
|
Частый гость
 
Группа: Участник
Сообщений: 155
Регистрация: 30-06-10
Пользователь №: 58 210

|
Цитата(Spinch @ Nov 21 2011, 15:31)  Ломаю прошивку для TMS320C28xx под Code Composer Studio. Прошивка мне досталась "в наследство" от ушедшего сотрудника.
Суть проблемы: На данный момент отведено под прошивку только три сектора памяти, а сама прошивка вылезла за пределы. Необходимо подцепить четвёртый сектор. Кто может внятно рассказать где и как это сделать? Заранее спасибо. У Вас исходники есть или нет?
|
|
|
|
|
Nov 21 2011, 13:06
|
Группа: Новичок
Сообщений: 2
Регистрация: 21-11-11
Пользователь №: 68 432

|
Цитата(Matic @ Nov 21 2011, 15:39)  У Вас исходники есть или нет? Исходники в полном объёме. Их и дорабатываю. Правда пока не постиг полного дзена приходится консультироваться у гуру  Нашел файл 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
Сообщение отредактировал Spinch - Nov 21 2011, 13:07
|
|
|
|
|
Dec 14 2011, 07:47
|
Участник

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

|
Всем доброго времени суток. Осваиваю 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 такт?
|
|
|
|
|
Dec 14 2011, 09:32
|
Участник

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

|
Так я и измеряю на больших задержках на ножке порта, я в курсе, что порт не сможет отработать микросекунды. Но отработать несколько герц порт явно сможет.  Вопрос в другом, почему проц не выполняет команды за те такты, что написаны в даташите?
|
|
|
|
|
Dec 14 2011, 10:46
|
Участник

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

|
Конечно учитываю, 4 цикла на условный переход sbf (метка), NEQ (4 такта) Конвейер выборки из флэш отключен, если вы про это, но так как программка работает из RAM, может быть так, что конвейер там свой и не отключается? В доках по этому поводу ничего не сказано.
|
|
|
|
|
Dec 14 2011, 13:47
|
Участник

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

|
Ну вот я делал тестовый проект на F2808, загрузка с флэш, запись в RAM пользовательского кода, выход в GPIO. Только нужно поправить cmd-файл распределения памяти под свой ЦСП. Программа пока без прерываний, не разобрался с ними. Примерами не пользуюсь, а вытаскиваю из них нужный код, слишком много там лишнего мусора. По Piccolo есть интересные материалы для начинающих.Мой проект в CCS4
Led.zip ( 131.84 килобайт )
Кол-во скачиваний: 189
|
|
|
|
|
Dec 15 2011, 02:08
|
Участник

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

|
Генератор я не настраивал, он работает на установках по умолчанию 10Мгц, половина частоты кварца, без синтезатора. Кстати в примерах как раз и делается много лишней работы по установке регистров значениями умолчанию. Зачем, если они после сброса и так находятся в этом состоянии. Файлы заголовков находятся в примерах DSP280x_common\include и DSP280x_headers\include. К ним нужно прописать путь в настройках CCS4 ( project/properties/C2000 compiler/include options/иконка add), тогда они появятся в директории Includes проекта. Оператор goto в данном случае делает банальный безусловный переход [SB (метка), UNC] можно и бесконечный for сделать, но в асме все равно будет тот же безусловный переход. Вообщем-то это моя первая программа на Си для контроллеров вообще, до этого на 51-ых и avr обходился ассемблером, так что за некоторую кривость програмки простите. Вообще заметил, что компилятор не воспринимает некоторые классические конструкции си, нельзя допустим объявлять переменную в цикле, например на такую конструкцию выдает ошибку, for(int i=0;i<10;i++).
|
|
|
|
|
Dec 15 2011, 13:18
|
Участник

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

|
Так он и не должен так сразу компилится при копировании всего проекта, так как он рассчитан на F2808. Надо создать новый проект под ваш Piccolo 28027 контроллер и изменить следующее. 1. заменить хидеры в .с, кроме DSP280x_GlobalVariableDefs.c, его заменить своим из примеров, он не менялся. 2. DSP280x_CodeStartBranch.asm, в нем только отключается сторожевой таймер, думаю что его регистры в 28027 аналогичные. 3. DSP280x_Headers_nonBIOS.cmd заменить своим, не менялся 4. F2808.cmd по аналогии, обращая внимание на название областей, изменить свой, так как некоторых областей памяти в Piccolo нет. Разобрался таки с созданием и копированием таблицы прерываний PIE, кстати вот здесь есть кое-что по русски.
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|