Перейти к содержанию
    

Ломаю прошивку для TMS320C28xx под Code Composer Studio.

Прошивка мне досталась "в наследство" от ушедшего сотрудника.

 

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

Заранее спасибо.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ломаю прошивку для TMS320C28xx под Code Composer Studio.

Прошивка мне досталась "в наследство" от ушедшего сотрудника.

 

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

Заранее спасибо.

 

У Вас исходники есть или нет?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

У Вас исходники есть или нет?

 

Исходники в полном объёме. Их и дорабатываю. Правда пока не постиг полного дзена приходится консультироваться у гуру :)

Нашел файл 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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Всем доброго времени суток.

Осваиваю 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 такт?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вы где эти задержки меряете? На GPIO? Ну тогда это у вас задержка GPIO. Ну не предназначен он для таких временных интервалов.

Если уж пишете о %, то элементарно проверьте на больших величинах задержки. Если ошибка не пропорциональна величине задержки,

а является константой - это явно из-за частоты работы GPIO.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А Вы учитываете сколько времени выполняется условный переход в конце цикла и время на перезагрузку конвеера при срабатывании перехода?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Конечно учитываю, 4 цикла на условный переход

sbf (метка), NEQ (4 такта)

Конвейер выборки из флэш отключен, если вы про это, но так как программка работает из RAM, может быть так, что конвейер там свой и не отключается? В доках по этому поводу ничего не сказано.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Здраствуйте, подскажите как с нуля создать проект для TMS 28027 в CCSv4. А то примерами пеользуюсь, а с нуля создать не догоню как. Или совсем простенький проект (только свой) может у кого есть, где пинами дрыгать.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ну вот я делал тестовый проект на F2808, загрузка с флэш, запись в RAM пользовательского кода, выход в GPIO. Только нужно поправить cmd-файл распределения памяти под свой ЦСП. Программа пока без прерываний, не разобрался с ними. Примерами не пользуюсь, а вытаскиваю из них нужный код, слишком много там лишнего мусора.

По Piccolo есть интересные материалы для начинающих.

Мой проект в CCS4

Led.zip

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

спасибо, но я не увидел функцию настройки генератора. И еще для меня ново увидеть goto (ну да ладно каждый пишит как умеет). Еще нету хидеров или вы всё в *.с файлы всунули?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Генератор я не настраивал, он работает на установках по умолчанию 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++).

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Не компилиться, не находит "DSP280x_Device.h", что странно в свойствах проекта подключена директория с этим файлом и более того если проводником проекта пользоваться то открыть "DSP280x_Device.h" можно.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Так он и не должен так сразу компилится при копировании всего проекта, так как он рассчитан на F2808. Надо создать новый проект под ваш Piccolo 28027 контроллер и изменить следующее.

1. заменить хидеры в .с, кроме DSP280x_GlobalVariableDefs.c, его заменить своим из примеров, он не менялся.

2. DSP280x_CodeStartBranch.asm, в нем только отключается сторожевой таймер, думаю что его регистры в 28027 аналогичные.

3. DSP280x_Headers_nonBIOS.cmd заменить своим, не менялся

4. F2808.cmd по аналогии, обращая внимание на название областей, изменить свой, так как некоторых областей памяти в Piccolo нет.

Разобрался таки с созданием и копированием таблицы прерываний PIE, кстати вот здесь есть кое-что по русски.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Какая разница, компилиться должен и ваш, только его не зашить в F28027 нормально, тут дело в другом в чём то.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...