Jump to content

    

Recommended Posts

ну DSP/BIOS то можно отдельно скачать и установить.

этим и занимаюсь... просто возмущен от обилия косяков, на которые тратится психо-кинетическая (или как ее там) энергия.

Как все видят, я кручу верчу Техас (а они меня), а так как от самовара не далеко ушел))) , то будет много вопросов.. Надеюсь кому-то из молодежи мои потуги и ваша помощь помогут

 

Полез тогда в Hepl-> about -> Component Manager. ну а там все пусто (такого ж не должно быть?? какая-нибудь да тулза должна быть установлена..) (картинка во втором вложении)

Был с моей стороны косячок: надо было установить галочку в Component MAnager-> View -> All CCS Installations и появляется все что и ожидалось

Как бы то ни было переустановил DSP/BIOS и это тоже дало результат: по адресу C:\CCStudio_v3.3\bios_5_41_10_36\packages\ti\platforms\dsk6455\ в папке под мою плату лежит уже Platform.tci !

Еще необходимо перезапустить композер, войти в компонент манагер раскрыть список Target Content'а(DSP/BIOS) и расскрыть подсписок с названием семейства вашего камня и установить галочку (см рисунок)

 

Нажимаю кнопочку File->New->DSP/Bios configuration

и теперь получаю что-то более правдивое (смотри второе вложение)

post-69111-1343127286_thumb.png

post-69111-1343127465_thumb.png

Edited by beaRTS

Share this post


Link to post
Share on other sites

Есть такой сайт C6000 Embedded Design Workshop Using BIOS . Наткнулся там на понятную презентацию, которая по первой сильно поможет начинающим в понимании DSP/BIOS PPT Slides Rev 6.50 (.zip). Поэтому качайте, смотрите. Куча презентаций. в Основном про Sys/BIOS (но походу это нынче мейнстрим). но есть и про DSP/BIOS: название BIOS_13a_Intro_to_DSPBIOS. смотрим. Нашел ответы на некоторые мелкие свои вопросы.

 

Так же только что хотел задать вопрос: чем отличаются Sys/BIOS и DSP/BIOS, почему две версии, для чего? что изучать, что ставить и т.д... ну и тут же нашел в скачанных презентациях. Ответ находится в BIOS_03_BIOS_Basics (смотри вложение)

post-69111-1343194003_thumb.png

Edited by beaRTS

Share this post


Link to post
Share on other sites

запустил не без проблем первый примерчик (до этого хотел сам разобраться, но все-таки лучше с примеров начинать - так быстрее)на плате TMS320C6455 DSK.

Проблема была следующей: начинаю грузить .out файл File->Load Program из папки дебаг, так CCS выдает ошибку " Does not match the target endianness, not loaded. Check build options, or use the setup program" . А на плате у меня (думаю, что и у большинства плат с навороченными камнями) стоит dip-switch (smd-переключатель), на одну ногу которого заведена опциональная функция установки формата big endian и little endian. Поэтому переведя выключатель в противоположное состояние, повторил попытку заливки программы и все получилось.

 

либо, как вариант, в Build Options -> Compiler -> Advanced в графе Endianness поменять формат и попробовать снова загрузить - может, получится. не пробовал.

Edited by beaRTS

Share this post


Link to post
Share on other sites

Смотрю 2 конфигурационных файла DSP/BIOS из разных примеров. Вопрос: что такое KNL_swi, PRD_swi? Просто вот понятно, например, что такое PRD_blinkLED0 - это поток, относящийся к периодически выполняемым, и функция его выполнения называется _blinkLED0() (если С-функция,но в С-файле будет просто blinkLED0() ) (The leading underscore is required because blinkLED0() is a C function. Functions written in assembly do not need the underscore. ). Понятно, что мы его создали, он нам нужен, т.к. будем в нем мигать светодиодом.. А для чего существуют KNL_swi (полагаю kernel-swi), PRD_swi (periodic-swi) непонятно?!

Картинка во вложении.

Приведу код

/*H***************************************************************************
*
* $Archive:: /boards/dsk6455_v2/examples/ledprd/ledprd.c                      $
* $Revision:: 2                                                               $
* $Date:: 6/27/06 9:29a                                                       $
* $Author:: Shilpab                                                           $
*
*
*H***************************************************************************/

/*
*  ======== ledprd.c ========
*
*  This example blinks LED #0 at a rate of about 2.5 times per second using
*  the LED module of the the DSK6455A Board Support Library.  The example
*  also reads the state of DIP switch #3 and lights LED #3 if the switch
*  is depressed or turns it off if the switch is not depressed.
*
*  When the program is run, DSP/BIOS initializes itself and calls the main( )
*  function.  Main( ) initializes the BSL then exits and returns control back
*  to DSP/BIOS.  The real work is done inside blinkLED0( ) which is a DSP/BIOS
*  periodic thread that is run every 200ms.
*
*  A second thread named blinkLED1( ) is also included that blinks LED #1
*  asynchronously with blinkLED0( ) to demonstrate DSP/BIOS multitasking.
*  It is not enabled by default but can be added by creating a new periodic
*  thread entry for it in the DSP/BIOS scheduler.
*
*  Please see the DSK6455 help file in the docs\hlp directory for more detailed 
*  information.
*/

/*
*  DSP/BIOS is configured using the DSP/BIOS configuration tool.  Settings
*  for this example are stored in a configuration file called ledprd.cdb.  At
*  compile time, Code Composer will auto-generate DSP/BIOS related files
*  based on these settings.  A header file called ledprdcfg.h contains the
*  results of the autogeneration and must be included for proper operation.
*  The name of the file is taken from ledprd.cdb and adding cfg.h.
*/
#include "ledprdcfg.h"

#include "dsk6455.h"
#include "dsk6455_led.h"
#include "dsk6455_dip.h"


/*
*  blinkLED0( ) - Blink LED #0 and set LED #3 based on the state of DIP switch
*                #3.  If the switch is down, the LED is turned on.  If the
*                switch is up, the LED is turned off.
*
*                blinkLED0 is a periodic thread that is called every 200ms
*                from the DSP/BIOS scheduler.  It is configured in the
*                DSP/BIOS configuration file ( ledprd.cdb ) under Scheduling
*                --> PRD --> PRD_blinkLED0.  Right click PRD_blinkLED0 and
*                select Properties to view its settings.
*/

void blinkLED0( )
{
    /* Toggle LED #0 */
    DSK6455_LED_toggle( 0 );

    /* Check DIP switch #3 and light LED #3 accordingly, 0 = switch pressed */
    if ( DSK6455_DIP_get( 3 ) == 0 )
        /* Switch pressed, turn LED #3 on */
        DSK6455_LED_on( 3 );
    else
        /* Switch pressed, turn LED #3 off */
        DSK6455_LED_off( 3 );
}


/*
*  main( ) - Initialize BSL then drop into DSP/BIOS idle loop
*/

void main( )
{
    /* Initialize the board support library, must be first BSL call */
    DSK6455_init( );

    /* Initialize the LED and DIP switch modules of the BSL */
    DSK6455_LED_init( );
    DSK6455_DIP_init( );
}

post-69111-1343289124_thumb.png

Edited by beaRTS

Share this post


Link to post
Share on other sites
. Вопрос: что такое KNL_swi, PRD_swi?

Попробую сам же и поразмышлять...

Начинает складываться общая картинка об DSP/BIOS. А складывается она на фоне параллельного изучения freeRTOS. во freeRTOS мы все файлы ядра добавляем ручками в папку нашего проекта, ручками же правим какие задачи будут включаться в сконфигурированное ядро (например, по-моему, в файле FreeRTOSconf.h, где в дефайнах выставляем 0ки или 1чки)

С DSP/BIOS дела обстоят, видимо, по-иному. Поправьте меня если неправ!. В DSP/BIOS среда разработки за нас сделает всю эту черную работу, а нам же остается в конфигурационной тулзе, да еще и с графическим интерфейсом (альтернатива - Tconf скрипты), настроить нужные задачи. Вот и все. и К тому же среда разработки сама пропишет нужные пути к файлам и библиотекам ядра, чтоб была возможность его скомпилировать, т.е. нет необходимости лазить по папкам и собирать в папку своего проекта все разрозненные файлы ядра..

Это было лирическое отступление.

Теперь к обозначенному вопросу. (Рассматриваем стандартный пример под названием "ledprd"). НА картинке выше, где было изображение открытой конфигурационной тулзы в Software Interrupt Manager'е был модуль например KNL_swi, за который отвечает некая функция "KNL_run();"... Итак, нашел в файле ledprdcfg.h62 (или YourNamecfg.h62)

.global    null
    .global    _IDL_loop
    .global    IDL_F_loop
    .global    _KNL_run            //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
    .global    IDL_F_stub
    .global    IDL_F_calibrate
    .global    IDL_F_busy

что объявление _KNL_run , видимо глобальное (поправьте если что), хотя ".global" - вроде бы, секция памяти какая-то на ассемблере.... тогда полез искать это имя уже за пределы папки проекта (до этого пытался искать Тотал командером в папке проекта). ЗА пределами (в папке с биосом) нашел файл knl.h:

#ifdef _BIOSROM_

extern Void (*KNL_enterPtr)(Void);
extern Void (*KNL_exitPtr)(Void);
extern Void (*KNL_ipostPtr)(KNL_JobHandle job);
extern Void (*KNL_postPtr)(KNL_JobHandle job);
extern Void (*KNL_readyPtr)(KNL_Handle task);
extern Void (*KNL_runPtr)(Arg mode_arg);            //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
extern Void (*KNL_switchPtr)(Ptr *oldsp, Ptr *newsp);

#define KNL_enterJ()                    (KNL_enterPtr)()
#define KNL_exitJ()                     (KNL_exitPtr)()
#define KNL_ipostJ(job)                 (KNL_ipostPtr)(job)
#define KNL_postJ(job)                  (KNL_postPtr)(job)
#define KNL_readyJ(task)                (KNL_readyPtr)(task)
#define KNL_runJ(mode)                  (KNL_runPtr)(mode)
#define KNL_switchJ(oldsp, newsp)       (KNL_switchPtr)(oldsp, newsp)

#else

#define KNL_enterJ()                    KNL_enter()
#define KNL_exitJ()                     KNL_exit()
#define KNL_ipostJ(job)                 KNL_ipost(job)
#define KNL_postJ(job)                  KNL_post(job)
#define KNL_readyJ(task)                KNL_ready(task)
#define KNL_runJ(mode)                  KNL_run(mode)            //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
#define KNL_switchJ(oldsp, newsp)       KNL_switch(oldsp, newsp)

#endif

#ifdef __cplusplus
}
#endif /* extern "C" */

#endif /*KNL_*/

осталось осмыслить для полного понимания... Вроде, теперь мы знаем, что KNL_run(mode) соответствует внешне определенной функции, возвращающей указатель, а именно: extern Void (*KNL_runPtr)(Arg mode_arg);

Edited by beaRTS

Share this post


Link to post
Share on other sites
Смотрю 2 конфигурационных файла DSP/BIOS из разных примеров. Вопрос: что такое KNL_swi, PRD_swi?

Нашел ответ. KNL_swi, PRD_swi - Это стандартные встроенные объекты (вроде, так называются) ядра. А _KNL_run и PRD_F_swi - стандартные функции (где-то =) и не понятно где определенные, теперь хоть ясно чем они занимаются) В spru303b.pdf "TMS320C6000 DSP/BIOS User’s Guide" в разделе 1.3.3 " Operation Names" об них и говорится.

 

Кроме того, в моем примере (ledprd) светодиодом мигают в потоке PRD_blinkLED0 (см. periodic function manager в картинке). Ссылаясь на spru303b.pdf раздел 1.3.3: "PRD_F_swi. Run by the highest priority SWI object, PRD_swi, to run the PRD functions.", делаем вывод: чтобы запустить нами созданные периодические функции (в periodic function manager'е), нам необходим вспомогательный встроенный объект (создаваемый, скорее всего, нами) под названием PRD_swi (и только таким названием!), который создается в "SWI - Software Interrupt Manager'е" (с приоритетом выше наибольшего: в моем примере у объекта PRD_swi на 1 больше приоритет,чем у KNL_swi) и который использует стандартную функцию ядра PRD_F_swi. А эта функция уже, имея наибольший приоритет, уже используется для запуска PRD -функций из PRD - Periodic Function Manager. Вот! Сие понимание у меня сложилось. Так ли?

 

И теперь стало понятно почему в другом примере (его конфигурационный файл led.tcf в левой части открытого композера на картинке, которая все мусолится здесь) в конфигурационном файле "led.tcf" отсутствует объект PRD_swi - т.к. в этом примере мигают периодически не при помощи второго PRD-потока, а в main'е:

void main( )
{
    /* Initialize the board support library, must be first BSL call */
    DSK6455_init( );

    /* Initialize the LED and DIP switch modules of the BSL */
    DSK6455_LED_init( );
    DSK6455_DIP_init( );

    while( 1 )
    {
        /* Toggle LED #0 */
        DSK6455_LED_toggle( 0 );
     
        /* Check DIP switch #3 and light LED #3 accordingly, 0 = switch pressed */
        if ( DSK6455_DIP_get( 3 ) == 0 )
            /* Switch pressed, turn LED #3 on */
           DSK6455_LED_on( 3 );
        else
            /* Switch not pressed, turn LED #3 off */
            DSK6455_LED_off( 3 );
    
        /* Spin in a software delay loop for about 200ms */
        DSK6455_waitusec( 200000 );
    }
}

Edited by beaRTS

Share this post


Link to post
Share on other sites

Напоследок, еще выдержка из юзер гайд, чтоб стало до конца все понятно:

"_KNL_run. Run by the lowest priority SWI object, KNL_swi, to run the

task scheduler if it is enabled. This is a C function called KNL_run. An

underscore is used as a prefix because the function is called from

assembly code.

"

так что объект KNL_swi в SWI - Software Interrupt Manager, как я понимаю, должен быть всегда!.

Edited by beaRTS

Share this post


Link to post
Share on other sites

Подскажите, как заставить работать эмулятор XDS100v2 в CCS 3.3 SR12, последний доступный апдейт установлен. Читал, что официально XDS100v2 не поддерживается в CCS 3.3, только XDS100v1, но вроде бы в последнем релизе SR12 неофициально внедрена поддержка XDS100v2. Поиском нашел, что нужно переписать какой-то xml-файл и jioserdesusb.dll из CCS 4 в CCS3.3.

Сам работаю с CCS4 без DSP/BIOS с F2808, а прошлые старые проекты были написаны до меня в CCS3.3 с DSP\BIOS и импортируются в CCS 4 с конфликтами версий.

Share this post


Link to post
Share on other sites
где-то лежит на некоем фтп:

upload/DSP/TI - Code Composer Studio/CCS3.3-xds100v2/ccs3xds100v2.rar

Огромное спасибо! Скачал, CCS 3.3 соединяется с XDS100V2, только при попытке прошить ругается на распределение памяти memory map, похоже ошибка в файле cmd?

Share this post


Link to post
Share on other sites

Здравствуйте. У меня несколько вопросов по плате TMS320C6455 DSK.

1. Можно ли управлять процессором с компьютера по USB, минуя CCS: перезагружать процессор, загружать программу, запускать ее, читать и перезаписывать память (в том числе, DDR)? Ясно, что должно быть можно (CCS это как-то делает), но как?

2. Возможно ли человеку, не знакомому с паяльником, присоединить к этой плате устройства ввода-вывода (либо тачскрин, либо LCD+что-нибудь мыше- или джойстико-образное). Если да, то какие и как?

3. Надо ли готовиться к тому, что придется покупать лицензию на CCS5, когда кончится trial период? Или она поверит, что наличие платы - весомый аргумент для бесплатной лицензии? Если окажется, что придется покупать - работает ли CCS3.3 (которая пришла вместе с платой) под 64-битной Windows 7?

Share this post


Link to post
Share on other sites
Здравствуйте. У меня несколько вопросов по плате TMS320C6455 DSK.

1. Можно ли управлять процессором с компьютера по USB, минуя CCS: перезагружать процессор, загружать программу, запускать ее, читать и перезаписывать память (в том числе, DDR)? Ясно, что должно быть можно (CCS это как-то делает), но как?

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

 

2. Возможно ли человеку, не знакомому с паяльником, присоединить к этой плате устройства ввода-вывода (либо тачскрин, либо LCD+что-нибудь мыше- или джойстико-образное). Если да, то какие и как?

Нельзя.

 

3. Надо ли готовиться к тому, что придется покупать лицензию на CCS5, когда кончится trial период? Или она поверит, что наличие платы - весомый аргумент для бесплатной лицензии? Если окажется, что придется покупать - работает ли CCS3.3 (которая пришла вместе с платой) под 64-битной Windows 7?

Да, готовиться надо. Но проще и полезнее выкинуть глючную виндовс 7, отдав ее бухгалтерам и игроманам, и забыв как страшный сон, и спокойно работать в старом добром CCS3.3 под XP. Либо открутить часы компа назад, CCS будет думать, что еще триальный период.

 

Share this post


Link to post
Share on other sites

Спасибо, интересно. Хотя язык TCL смущает, я с ним не работал. Наверное, из-под C# общаться с ним будет тяжело. В вашей библиотеке можно читать/записывать бинарные файлы в память напрямую, без промежуточных массивов?

Кстати, за полтора года у меня не было ни одного сбоя Windows 7 :) Но выкинуть ее - тоже вариант. И поставить старую добрую Windows 8 - заодно и трайл период обнулится. А проще мне, наверное, будет купить плату с C6678 - к ней CCS5 идет в приложении, а стоит она примерно столько же, сколько лицензия :)

Share this post


Link to post
Share on other sites
Спасибо, интересно. Хотя язык TCL смущает, я с ним не работал. Наверное, из-под C# общаться с ним будет тяжело. В вашей библиотеке можно читать/записывать бинарные файлы в память напрямую, без промежуточных массивов?

 

Я совершенно не представляю себе, как с ним из-под C# общаться, и что это за C# имею только слабое теоретическое познание, что это что-то типа явы, только микрософтовское. Однако, если из-под C# можно выполнить другую программу с передачей ей параметров, и получить от нее код возврата, то все сделается без каких либо проблем. На языке TCL можно написать скрипт, который прочитает бинарный файл, приконнектится к плате, и загрузит его туда. И далее, если это физически возможно, то из C# надо будет запустить этот скрипт, который и выполнит задачу. Также в библиотеке имеется готовая функция по загрузке в память процессора COFF-файла (.out, то, что композер делает, когда линкует программу) - она сама написана на TCL, так что ее можно посмотреть, как она устроена.

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this