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

ELVEES R&D Center

Участник
  • Постов

    50
  • Зарегистрирован

  • Посещение

Сообщения, опубликованные ELVEES R&D Center


  1. По итогам совместной проработки обнаружили, что проблема была в пересекающихся адресах секций .bss и .sbss:

    Вот начало секции .bss:

    Disassembly of section .bss:
    
     
    
    80004028 <testcnt>:
    
    80004028:           00000000             nop
    

     А вот секция sbss:

     Disassembly of section .sbss:
    
     
    
    80004038 <_edata>:
    
    80004038:           00000000             nop

    Переменные, находящиеся в разных секциях, имели одинаковые адреса. Из-за этого и портились те переменные, которые не ожидались.

    Само же пересечение секций было вызвано ошибкой в скрипте линковки:

     .data :
      {
        __data_start = . ;
      /*  .eh_frame = .;  */
    
        _edata = .;
      } > sdram_c
    
    
      .bss ADDR (.data) + SIZEOF (.data) (NOLOAD) :
    
      {
    
       __bss_start = .;
    
       . = ALIGN (64 / 8);
    
      } > sdram_c

    Секция же sbss ставится линковщиком сразу после .data, без указания в скрипте линковки.

    Для решения проблемы оказалось достаточно изменить объявление секции bss: 

    .data :
      {
        __data_start = . ;
      /*  .eh_frame = .;  */
    
        _edata = .;
      } > sdram_c
    
    
      .bss  (NOLOAD) :
    
      {
    
       __bss_start = .;
    
       . = ALIGN (64 / 8);
    
      } > sdram_c
    

     

  2. Судя по приведенным кускам дизассемблера в конце, тут вопрос не к процессору, а к компоновке программы. Потому что обе записи происходят по адресу (0x8002_0000-10440). По какой-то причине при сборке обоим символам назначаются одинаковые адреса.  Процессор лишь исправно выполняет запись по неправильно указанному адресу, что в симуляторе, что на живом  чипе :)

    Я бы сказал, что MAP-файл тут малоинформативен. Можете дать ELF-файл или (лучше) проект целиком? Можно на [email protected].

  3. 1) Значение указателя стека в пределах, но как-то очень уж маленькое. Верхушка стека, выходит, 0x9802_0000, а указатель сдвинут на 0x18 байт. Маловато как-то. Вход в каждую функцию сдвигает указатель стека еще немного вниз относительно верхушки. Если исключение происходит, когда мы находимся в main(), то выглядит нормой, а если хоть немного "глубже" в функциях - то уже нет. Пока выглядит лишним аргументом в пользу некорректного восстановления контекста. Можно поставить точки останова перед сохранением и после восстановления контекста, убедиться, что значение sp не меняется. Ну и надо понять, какое штатное значение указателя стека при штатном входе в функцию, из которой происходит исключение.

    2) По логу сборки вроде особо нечего пока сказать.

    3) По коду после ERET - штатно он действительно не исполняется. Введён из каких-то соображений, которые сейчас нет смысла уточнять, а навскидку вспомнить не получается. Это скорее всего никак не связано с обсуждаемой проблемой.

  4. Тут сложный момент. С одной стороны, правильнее сохранять все регистры. С другой стороны, кэш надо сбрасывать сразу при входе в обработчик.

    Здесь нам на помощь приходит MIPS ABI (application binary interface) - соглашение, по которому регистры k0, k1 используются именно что в обработчиках, а в основной программе не используются. Поэтому мы вроде бы безбоязненно можем "портить" эти регистры. По факту GCC по умолчанию это требование не выполняет и вполне может использовать эти регистры. Чтобы он этого не делал, есть ключ -ffixed. В наших проектах для MCStudio 4 как раз по умолчанию выставлены ключи GCC " -ffixed-k0 -ffixed-k1". Возможно, их по какой-то причине нет в Вашем проекте? Покажете лог сборки на всякий случай?

     

    Еще как вариант - может, просто где-то что-то не так с сохранением и восстановлением стека? В какой-то момент он сдвигается за границы допустимого и все портится? Или, совсем уж простое - размер стека физически "вылезает" за границы доступной физически памяти? Чему равно значение sp в момент исключения? Чему равно значение символа _stack и размер стека в настройках проекта?

     

    В функции действительно ничего криминального нет.

  5. 1) Включено ли кэширование в Вашем проекте? Если включено - то сбрасывается ли кэш в обработчике прерываний?

    2) Вероятно, стоит сразу указывать, какое значение у регистра CP0.EPC при возникновении исключения? Что за код находится по этому адресу?

  6. Добрый день!

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

    Предполагаемый обновленный обработчик прилагаем. Там также добавлен сброс кэша, сохранение части регистров CP0 и некоторые другие вещи. Если планируется работать с float/double - нужно также сохранять в обработчике регистры FPU. Пока мы этого не добавили в обработчик, чтобы не перегружать его. Возможно, добавим.

    Если кому-то интересна причина, почему сейчас такое сохранение контекста в примерах, то даём пояснение: он создавался достаточно давно, когда в наших чипах CPU-ядро не имело сопроцессора FPU. Соответственно, у CPU не было 64-разрядных обращений в память, только 32-разрядные (инструкции LW/SW) - и выравнивания по 32-разрядному слову было достаточно. С появлением FPU появились 64-разрядные обращения (SDC1/LDC1) - появилась необходимость выравнивать стек по границе 64-разрядного слова. Но поскольку примеры в составе IDE демонстрируют узконаправленную работу с конкретным блоком - в примерах этой проблемы не всплывало. Теперь обновим, еще раз спасибо за указание на проблему.

    hb80000180.s

  7. On 1/11/2019 at 2:25 PM, sweetpirate said:

    Первый момент: в руководстве написано, что существуют 2 варианта использования приложений: с возвратом и без возврата в u-boot. При выполнении примеров возврата в u-boot  не происходит(тк приложение уходит в бесконечный цикл), т.е. возврат в u-boot происходит только после завершения работы baremetal приложения? И только тогда можно запустить Linux?

    При запуске U-Boot (начиная с версии v2017.07.0.7) останавливает ядро CPU1 и отключает его домен питания. 
    Предполагается, что U-Вoot загружает приложение используя только одно ядро CPU. 
    Само приложение может включить домен питания и  использовать второе ядро.

    Вы можете доработать U-Вoot так, чтобы он запускал baremetal-приложение на ядре CPU1.

    On 1/11/2019 at 2:25 PM, sweetpirate said:

    И второе, существует ли возможность запуска на исполнение baremetal приложений из под Linux-a. (В этом случае Linux будет запущен на CPU0, CPU1 для исполнения baremetal и управления DSP). Т.е. во время работы Linux-a при выполнении определенных условий имеется необходимость загружать различные baremetal-приложения.

    Штатно такой возможности нет. 
    Для добавления такой возможности необходимо разработать отдельный драйвер.

    На данный момент ведётся разработка драйвера Linux  для DSP-кластера DELcore-30M.
    Драйвер позволит запускать задачи на DSP-ядрах и получать результаты в user space.
     

    On 1/11/2019 at 2:25 PM, sweetpirate said:

    И еще вопрос, можно ли получить, при разработке ПО, доступ к регистрам CPU и DSP из под Linux?

    Доступ к регистрам разрешен из ядра Linux (kernel space).


    Можно реализовать в драйвере мапировние регистров в пользовательское пространство.

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

  8. On 12/17/2018 at 10:26 AM, sweetpirate said:

    Каким образом можно запустить Linux на одном arm-ядре?

    Для этого существует параметр запуска ядра  nosmp.

    On 12/17/2018 at 10:26 AM, sweetpirate said:

    Возможно ли назначить различные модули ОЗУ для каждого ядра?

    Например, первый модуль ОЗУ используется для Linux, который запущен на 0 ядре.

    И, следовательно, второй модуль выделен для baremetal приложений, которые работают на втором ядре?

    Тут возможны два варианта: 

    1.Можно ограничить использование памяти (SDRAM) с помощью параметра запуска ядра mem=;

    2. Можно использовать другой тип памяти (SRAM) для второго ядра.

    Во втором случае необходимо будет настроить блок NORMPORT микросхемы 1892ВМ14Я в загрузчике U-boot. 

    On 12/17/2018 at 10:26 AM, sweetpirate said:

    И как, в таком случае, возможен обмен данными между Linux и baremetal приложением?

    Для этой цели можно использовать блок Mailbox микросхемы 1892ВМ14Я.

    On 12/17/2018 at 10:26 AM, sweetpirate said:

    И имеется ли доступ к виртуальным регистрам arm ядер из Linux-a?

    Не понятно о каких регистрах идет речь.

     

    Описанный Вами режим работы потребует существенной доработки загрузчика U-boot. 

    При разработки baremetal-приложения следует учесть тот факт, что контроллер прерываний (GIC) общий для двух ARM-ядер. 

     

  9. 10 minutes ago, Grizzly said:

    А под Linux имеется компилятор?

    Да.

    В составе демо-версии IDE MCStudio 4 для ОС Linux (CentOS 7).

    Также toolchain для DSP-ядра ELcore-30M доступен отдельно: ftp://ftp.elvees.com/1892VM14YA/Baremetal/Tools/Linux/eltools_3.6_linux_5519_2017.04.03.tar.gz 

  10. Добрый день!

     

    Quote

    есть ли у нас отечественная снк с DSP

     

    Quote

    самое главное - радстойких , можно в составе снк

     

    Рекомендуем ориентироваться на микросхему 1892ВМ15АФ. Информация по ней представлена здесь - http://multicore.ru/index.php?id=1340

    Информация по отладочному модулю для нее здесь - http://multicore.ru/index.php?id=1405

     

    Линейка радстойких микросхем в целом представлена здесь - http://multicore.ru/index.php?id=556

     

    Quote

    потому как отечественный радстойкий DSP будет золотым

     

    В целом по рынку радстойких микросхем у нас очень конкурентоспособные цены. Для уточнения подробностей рекомендуем обратиться в отдел продаж – market@elvees.com.

     

    Quote

    насколько я знаю это не dsp, это мипсовские процессоры


    В микросхемах НПЦ «ЭЛВИС» есть и CPU-ядро (в радстойких это MIPS32-совместимое ядро), и высокопроизводительные DSP-ядра.

     

    Quote

    там есть ускорители (лет 5 назад очень глючные, то есть сильно не соответствовали объявленной ISA), с ограниченным доступом к памяти, периферии и т.п.

     

    DSP-кластер DELcore-30MH в составе 1892ВМ15АФ не имеет ограничений по доступу к памяти и другим ресурсам микросхемы.

    Если под «ISA» имеется в виду система команд – то наши ядра описанию соответствуют. Имеющиеся ограничения приведены в документации.

     

    Quote

    программисты, которые с ними разбирались, говорили, что можно было брать только куски кода из поставляемых Элвисом библиотек и из них что-то собирать

     

    Это не так. Существует достаточно много применений, где использован оригинальный код, написанный нашими пользователями самостоятельно.

     

    Quote

    компилера, ес-сно не было, по моему и нет - GCC только для МИПС.


    Компилятор Си для DSP-ядер есть. Доступен свободно в составе демо-версий среды разработки на сайте - http://multicore.ru/mc/software/MCStudio3M_Demo_Setup.exe

     

    Quote

    может это специально сделано так, чтобы код для этих ДСП покупали у Элвиса, а не сами писали

     

    Мы заинтересованы в увеличении количества разработчиков, работающих с нашими микросхемами. Для этого мы максимально документируем наши микросхемы, проводим курсы и семинары, сотрудничаем с университетами и авторами независимых курсов, и стараемся отвечать на все запросы, поступающие в техподдержку.

     

    another_one, Вы также можете обратиться на support@elvees.com с более подробным описанием задачи, мы постараемся подсказать, как ее можно решить с применением наших микросхем.

  11. 20 hours ago, sweetpirate said:

    Вопрос: возможно ли вместе с ядром ОС загрузить и файловую систему по TFTP, чтобы имелась возможность перепрошить модуль eMMC?

    Можно включить в состав ядра файловую систему в виде диска c файловой системой в ОЗУ.

    Сделать это можно в конфигураторе  ядра Linux (make menuconfig). 

    Там же указывается путь до каталога с rootfs.

     

  12. 43 minutes ago, sweetpirate said:

     

    Скажите, алгоритм для прошивки NAND Flash идентичный?

    Нет, утилита mcom_flash_mmc.py не подходит для прошивки NAND-Flash. 

    Инструкция по прошивке NAND-Flash представлена в п.5.3.1. документа "Загрузчик U-Boot для 1892ВМ14Я. Руководство пользователя".

    47 minutes ago, sweetpirate said:

    Задал параметры запуска Linux setenv bootargs 'console=ttyS0,115200 root=/dev/mmcblk0p2 rootfstype=ext4 rwrootwait'

    Установил команду загрузки setenv bootcmd 'tftpboot; bootz ${loadaddr} - ${fdtcontroladdr}'

    На хостмашине (Windows 10) запустил TFTP server (TftpServ.exe) выбрал папку к образу SD карты (к разделу Boot).

    Запустил сервер.

    Плата виснет и требует рестарта. 

    Настройку TFTP Вы выполняете правильно.

    В U-Boot 2017.07.0.14 (из Buildroot v.2.9) возникает ошибка при загрузке через TFTP.

    Ошибка будет исправлена в следующих выпусках дистрибутива Buildroot.

    Если Вам требуется загрузка по TFTP, рекомендуем Вам использовать Buildroot v.2.8 и соответствующий загрузчик U-Boot.

     

  13. Quote

    Интересует вопрос, как можно загрузить Linux/Buildroot во внутреннюю память ПЗУ mmc0?

    mmc0 это микросхема eMMC, установленная на процессорном модуле Салют-ЭЛ24ПМ2.

     

    Для этого можно использовать утилиту mcom02_flash_mmc.py из пакета mcom02-flash-tools.

    Ссылка на github: https://github.com/elvees/mcom02-flash-tools

    Ссылка на дистрибутив: ftp://ftp.elvees.com/1892VM14YA/linux/Buildroot/v2.9/mcom02-buildroot-v2.9.0-2018-09-21.tar.bz2 . Путь относительно корня архива:

    Процесс установки данного пакета в Windows описан в п.3 документа «Инструкция по прошивке SPI флеш-памяти модулей на базе 1892ВМ14Я».

    В ОС Linux пакет Python 2.7 обычно уже установлен.

    Необходимо выполнить одно из предложенных ниже  действий:

    pip install --upgrade <mcom02_flash_tools>

    для установки из распакованного архива,

    где <mcom02_flash_tools> — путь к архиву пакета или директории, содержащей распакованный пакет.

    pip install --upgrade git+https://github.com/elvees/mcom02-flash-tools.git

    для установки из репозитория на github.

    При работе в OC Windows путь установки python/имя пользователя/имя компьютера не должны содержать кириллических символов.

    После установки пакета необходимо:

    Процесс записи образа на SD-карту в ОС Linux описан в п.6 документа «Дистрибутив ОС GNU/Linux на базе Buildroot для 1892ВМ14Я.Руководство системного программиста».

    Запись образа SD-карты в ОС Windows можно выполнить с помощью программы Win32DiskImager (https://sourceforge.net/projects/win32diskimager/).

    Необходимо использовать загрузчик U-boot с версией, соответствующей версии используемого дистрибутива. 

    • Выполнить загрузку ОС с SD-карты:
    1. Установить джампер XP4 в положение "uSDcard";
    2. Установить переключатели BOOT (SA1) в положение «011» (загрузка из SPI-Flash);
    3. Подключить разъем XS13 к ПЭВМ c помощью кабеля MiniUSB-USB; 
    4. Запустить терминал COM-порта;
    5. Подать питание на отладочный модуль;
    6. Остановить автозагрузку U-Boot отправкой любого символа в терминал  COM-порта; 
    7. Выполнить команды:
    env set mmcdev 1 //устанавливаем  загрузку и импорт переменных окружения с SD-карты;
    
    saveenv //Сохраняем изменения

        8. Перезагрузить отладочный модуль.

     

    • Прошить необходимый образ SD-карты в eMMC  (mmc0) c помощью утилиты mcom02_flash_mmc.py.

    1. Подключить отладочный модуль к сети;

    2. Подать питание на отладочный модуль;

    3. Дождаться появления  запроса входа в систему в терминале COM-порта;

    4.На ПК запустить процесс прошивки eMMC:

    mcom_flash_mmc.py <bord ip or host name >  </dev/ mmcblk0>  <path to img>

    , где <bord ip or host name >  - ip-адрес или сетевое имя отладочного модуля;

    </dev/ mmcblk0> - имя устройства, в которое будет записан образ. В Вашем случае необходимо использовать /dev/ mmcblk0 т.е. eMMC;

    <path to img> - путь до образа SD-карты, который необходимо прошить в eMMC.

    5. Дождаться окончания процесса прошивки (Verifying... ОК).

     

    • Проверить работоспособность записанного образа:

    1. Выполнить перезагрузку отладочного модуля;

    2.Остановить автозагрузку U-Boot отправкой любого символа в терминал  COM-порта;

    3. Выполнить команды:

    env set mmcdev 0 //устанавливаем  загрузку и импорт переменных окружения с eMMC;
    
    saveenv //Сохраняем изменения

    4. Перезагрузить отладочный модуль;

    5.Убедиться в успешном запуске ОС с eMMC.

    Возникающие вопросы лучше адресовать напрямую на [email protected], чтобы сократить время ответа.

  14. Здравствуйте уважаемые!

    Кто-нить применял 1892ВМ15АФ от Элвиса?

    Интересует производительность на примере цифровых КИХ фильтров.

    И подводные камни.

    Спасибо.

     

    Добрый день!

     

    Оценка производительности одного DSP-ядра ELcore-30M при реализации КИХ-фильтра приведена в приложенном файле.

    В микросхеме 1892ВМ15АФ кластер из двух ядер ELcore-30M.

     

    Дополнительно хотелось бы отметить, что в составе микросхемы есть блок аппаратных ускорителей функций БПФ и сжатия JPEG.

    Описание известных ограничений отдельных блоков приведено соответствующих разделах технических описаний.

    Например, ограничения конвейера DSP-ядра ELcore-30M приведены в разделе 7.7 документа «DSP-КЛАСТЕР DELCORE-30М. АРХИТЕКТУРА. DSP-ЯДРО ELCORE-30М» - http://multicore.ru/mc/data_sheets/Manual_...-30M_031210.pdf

    Также обращаем ваше внимание на документ «Рекомендации по проектированию принципиальной электрической схемы» и другие общие документы в разделе «Техподдержка->Документация->Цифровые сигнальные процессоры» на нашем сайте.

     

    Если ответов от коллег в форуме не будет, можно обратиться за подобной информацией в ЭЛВИС.

    Подскажем, кто именно применял процессор.

     

    FIR_ELCore_30M.pdf

  15. В данном случае вопрос был продублирован в техподдержку. Ответ был дан тогда же.

    Если конкретно - в описанном случае в коэффициенты FIR нужно было писать не "1, 0, 0, 0...", а "16384, 0, 0, 0...".

  16. Вот я и рисую пока библиотеку Altium под 1892ВМ8Я (к стати может она у Вас есть уже готовая?), но мне не нравится 64 разрядная шина данных, придется много элементов памяти городить, а у нас за каждый мВатт на счету.

    Есть библиотека PCAD: ELVEES_LIB_090610.zip

    Процессор 1892ВМ8Я имеет режимы работы как с 32-, так и с 64-разрядной внешней памятью. Загрузочная ПЗУ может быть и 8-разрядной. Подробнее - в руководстве пользователя на микросхему, в описании порта внешней памяти.

    Пишите лучше на support. Форум редко смотрим.

  17. Есть отечественные процессоры разработки НПЦ "ЭЛВИС".

    Два варианта radiation tolerant систем на кристалле:

    1) 1892ВМ8Я, 80 МГц, от -60 до +85°С, CPU MIPS32 c FPU 64 бит, 2SIMD DSP 8/16/32 бит 480 MFLOPs (float32) / 1280 MOPS (int16) , 2 канала SpaceWire, 4 MFBSP (SPI\LPORT\GPIO), UART, корпус BGA-416

    2) MCT-02R, 100 МГц, от -50 до +80°С, CPU MIPS32 c FPU 64 бит, 17 Мбит СОЗУ, 4 канала SpaceWire, 4 MFBSP, 4 UART, корпус металлокерамический CPGA-416

     

    Каталог НПЦ ЭЛВИС

     

    Частота ниже 200 МГц, но для DSP, может, не так критично.

    Подробности на [email protected]

  18. Проц адекватен... если не учитывать недоработанную документацию в части неправильных смещений регистров (пока обнаружено только 1), особенность работы команды lb на внешнюю память (старшие 24 разряда почему то заполняютя далеко не нулями), ну и по мелочам - глюки далеко недешевых отладочных средств, итд...

     

    P.S.: А куда смотрят модераторы? Это вообще то DSP а не микроконтроллер. :laughing:

    Сообщите, пожалуйста, на [email protected] смещение какого регистра указано неверно.

     

    По поводу работы команды LB. Старшие 24 бита и не обязаны заполняться именно нулями. Описание работы команды:

     

    "Формат: LB rt, offset(base)

     

    Описание: Вычисляется исполнительный адрес: 16-битная offset расширяется знаком и складывается с содержимым общего регистра base. Байт памяти, определяемый этим адресом, выбирается, расширяется знаком до 32 бит и загружается в общий регистр rt."

     

    То есть, если байт по указанному адресу имеет значение от 0x00 до 0x7F – в регистре будет значение 0x0000_0000-0x0000_007F, а если байт имеет значение от 0x80 до 0xFF – то в регистре будет 0xFFFF_FF80-0xFFFF_FFFF.

  19. Есть ли официальный форум поддержки.. или всё разрешать тут?

    Просто возникло несколько вопросов:

    *какие ограничения у демо версии MCStudio?

    *чем отличаются MCStudio2 , MCStudio3(о которой сказано только на этом форуме) и MCStudio-ECL?

    *остались ли у Вас СнК без DSP? только RISC..

    Все вопросы лучше решать через [email protected] - это официальная почта тех.поддержки. Официального форума пока нет, но планируется.

    1)Демо-версии MCStudio не поддерживают отладку на «живом» процессоре. Только в симуляторе.

    2)MCStudio 2 – это среда, предназначенная для работы с процессорами MC-12 (1892ВМ3Т), MC-24 (1892ВМ2Я), MC-0226 (1892ВМ5Я), MC-24R (1892ВМ8Я). MCStudio 3M – среда, предназначенная для работы с процессорами NVCom-01 и MC-0428 (1892ВМ7Я). MCStudio-ECL – среда, предназначенная для работы с процессорами MC-12 и MC-24. Ее отличительная особенность – она имеет в своем составе компилятор C для DSP-ядра. Но на наш взгляд, этот компилятор создает недостаточно оптимальный код для DSP-ядра, поэтому имеет смысл использовать его в тех приложениях, где ресурсы DSP-ядра не используются на 100%. Среда MCStudio-ECL разработана и поставляется компанией «Интерстрон». Техническая поддержка также осуществляется этой компанией. Хотя мы по возможности тоже стараемся помочь, если возникают вопросы.

    3)Есть проекты и без DSP, но чипы пока не поставляются.

  20. Да вы правы, как то я и забыл про установку PC, изначально он же установлен в 0x000 и при первом запуске все было нормально.

    Тогда такой вопрос. Очень интересует команда ADDSUBX, а именно ее приминение с масштабированием т.е. ADDSUBXs. Но при такой записи компилятор ругается. В документации написанно, что включение режима масштабирования осуществляется установкой в «1» бита 15 (Esc) регистра PDNR. После принудельной установки бита 15 масштабирования все равно не происходит. Может подскажите, а?

    Режим масштабирования может включаться двумя способами.

     

    1) Установкой бита 15 в регистре PDNR. В этом случае все операции, которые могут исполняться с масштабированием, исполняются с масштабированием. Этот способ удобен, когда необходимо выполнять много инструкций с масштабированием. Писать суффикс "s" после инструкции не нужно.

     

    2) Если же нужно выполнить небольшое количество инструкций с масштабированием среди множества инструкций без масштабирования - удобнее использовать команду с суффиксом "s". Важно учитывать, что команды, употребляемые с суффиксом "s", можно использовать только в формате 8 (подробнее о форматах инструкций - в описании системы команд DSP-ядра). То есть, в командах такого вида:

     

              LSRL R6,R0,R8   ADDSUBXs R2,R4,R6   R8.L,R16.L

    Необходимо также при вызове ассемблера подключать файл dsp.cmd, в котором описаны инструкции с суффиксом "s". Это делается в окне MCStudio 2 "Tools->Settings". В пятой строчке таблицы к вызову elcore-elvis-elf-as необходимо приписать параметр "-t dsp.cmd", после чего добавить специально созданный файл dsp.cmd в файл проекта.

     

    Во вложении - пример проекта, в котором реализованы оба способа использования инструкций с масштабированием. Если Вам необходимо использовать инструкцию ADDSUBXs в других проектах - скопируйте файл dsp.cmd в папку с Вашим проектом.

    RiscDsp.rar

  21. ELVEES R&D Center, можете оставить контактную информацию? Мой e-mail есть в профиле.

    Пробовал свазаться с вами, но ответа не получил. Отправка личных сообщений у меня запрещена в профиле.

    Связываться лучше напрямую с [email protected]. Переслал ответ Вам по email.

     

    Работает. Недокументированных особенностей не обнаружено.

    Но рекомендуем обратить внимание на "документированную":

    Еще одно важное документированное замечание:

    PCI-контроллер микросхемы 1892ВМ5Я обеспечивает обмен с частотой до 100 МГц (в том числе, 66МГц), однако пятый бит (66MHZ_CAPABLE) в статусном регистре не выставляется.

  22. Еще проконсультируемся с разработчиками кристалла, и, конечно, отразим в документации.

    В документации (руководстве пользователя) этот момент был отражен в разделе 4.2 (системное управление):

    Отключение внутренней тактовой частоты выполняется следующим образом:

    • программа CPU должна выполняться из кэш программ или из внутренней

    памяти CRAM;

    • SPORT, UART, DMA должны быть в неактивном состоянии;

    • перевести DSP в режим STOP;

    • записать 1 в 31 разряд регистра SDRCON (поле RFR не должно быть

    изменено). По данной операции SDRAM деактивизируется (выполняется команда PRECHARGE);

    ...

    Запись 1 в 31 разряд регистра SDRCON - это инициализация. В данном случае

    повторная.

    Чтобы было яснее введем в п. 9.2.6:

    Следует отметить, что повторная инициализация (не отключая питания

    микросхемы) памяти типа SDRAM (запись 1 в 31 разряд регистра SDRCON)

    приводит к ее деактивизации и отключению регенерации (см. п. 4.2). Для того,

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

    произвести запись всех единиц по адресу 182F_1018 (установка сигнала CKE в

    единичное состояние и включение регенерации) (см. п. 4.2).

     

     

    В связи с этим, возник вопрос - работает ли контроллер PCI в ВМ5Я на частоте 66 МГц, или тут тоже есть недокументированные особенности?

    Работает. Недокументированных особенностей не обнаружено.

    Но рекомендуем обратить внимание на "документированную":

     

    В режиме PCI Master:

    При записи в фазе передачи данных микросхема ВМ5Я удерживает на выводах nCBE[3:0] высокий уровень.

    В режиме PCI Slave (при записи в микросхему ВМ5Я):

    При чтении в фазе передачи данных микросхема ВМ5Я игнорирует состояния сигналов nCBE[3:0] и всегда выполняет запись слова. Запись отдельных байтов не выполняется.

     

    Таким образом, в режиме PCI Master можно работать только с PCI-устройствами, игнорирующими состояния сигналов nCBE[3:0] в фазе передачи данных. В режиме PCI Slave можно работать с PCI-устройствами, не использующими байтовых операций.

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