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

koljakh

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

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

  • Посещение

Весь контент koljakh


  1. А у Вас ексепшены висят? Этот проц довольно таки сложно повесить наглухо. а в ексепшене можно посмотреть код ошибки. section("L1_data") unsigned long var_SEQSTAT; section("L1_data") unsigned char var_EXCAUSE; section("L1_data") unsigned long var_RETX; EX_EXCEPTION_HANDLER(section("L1_code") ExeptionRoutine) { asm("R0 = SEQSTAT;"); asm("P0.H=_var_SEQSTAT;"); asm("P0.L=_var_SEQSTAT;"); asm("[P0]=R0;"); asm("R0 <<= 26;"); asm("R0 >>= 26;"); asm("P0.H=_var_EXCAUSE;"); asm("P0.L=_var_EXCAUSE;"); asm("[P0]=R0;"); asm("R0 = RETX;"); asm("P0.H=_var_RETX;"); asm("P0.L=_var_RETX;"); asm("[P0]=R0;"); PrintExeption(); for(;;) { } }
  2. Добрый день! Есть проблема. Программирование в системе XMEGA с помощью BLACKFIN происходит по PDI интерфейсу. Все бы ничего, но PDI со стороны XMEGA если не меняется уровень, на следующий клок уходит в tri-state. Поэтому параллельно этой цепи подключена Altera MAX II. Этот пин внутри альтеры подключен на ALT_IN_BUF со свойством ENABLE_BUS_HOLD. Проблема возникает когда параллельно всему этому подключается внешний программатор, который тоже имеет функцию BUS_HOLD. Вопрос, можно как-то отключать эту функцию в альтере не меняя ее прошивки?
  3. Все я это видел :) Там в основном продают. Но есть и схемы. Но меня момент маленький его смутил, поэтому и спросил. Он пальцами легко останавливается.
  4. а то он на 110 В, а трансформатор ставить не хочется. Пробовали обмотки включать последовательно + конденсатор и параллельно одной обмотке фазосдвигающий кондер. Движок вращается, но легко останавливается рукой. Или так должно быть? Там все-таки редуктор стоит не хилый. Момент должен быть большим. Да, и еще вопрос. На сколько должны быть сдвинуты фазы на обмотках относительно друг друга? А слона то я и не заметил. :) Только что увидел подобную тему внизу. Там все расписано. Хотя поиск ничего не выдал :( Закройте тему.
  5. 1. Так счетчик можете хранить где угодно, хоть L1, или L2, или L3. Для вашего случая нужно только создать секцию c атрибутом NO_INIT, чтобы бут лоадер ее не инициализировал, и программно обнулять при аппаратном сбросе, а при программном инкрементировать. 2. Да нефиг делать :) прочитайте слово по невыровненому адресу, а в обработчике исключения сделайте тоже самое.
  6. Попробуйте пересобрать либы с помощью утилиты elfar.exe: то что хотите в L1 в одну либу, что в L2 в другую. У нее и свой хелп есть, и я думаю, что в хелпе ВДСП она подробно описана.
  7. $USER_LIBRARIES_L1 = Lib1.dlb; $USER_LIBRARIES_L2 = Lib2.dlb; L1_code { INPUT_SECTION_ALIGN(4) INPUT_SECTIONS($USER_LIBRARIES_L1(program)) } > MEM_L1_CODE L2_sram { INPUT_SECTION_ALIGN(4) INPUT_SECTIONS($USER_LIBRARIES_L2(program)) } > MEM_L2_SRAM C данными по образу и подобию
  8. Что-то мне помнится, что подчеркивание нужно ставить перед переменной на асме, чтобы она была в С видна, ну и глобал соответственно.
  9. Это радует :) И почитайте еще главу 18 в мануале BLACKFIN PROCESSOR DEBUG Там тоже много чего интересного
  10. Да есть баги новые, если сравнить аномали лист, то видно что новые есть, хотя конечно новых гораздо меньше, чем исправленных старых. Сам недавно столкнулся с багой PPI-порта, которой в старых ревизиях не было, а в 0.4 появилась это касательно 532. Для 561 появилась проблема при работе с памятью в рев 0.5, а в 0.3 ее не было. Так что несоответствие ревизий может стать основной проблемой.
  11. Да, но прога слинкована под 532, и BOOT будет грузить ее по адресам которые есть и 532 и 533. Да я и не спорю. Я про то, что ВООТ грузит по тем адресам, которые прописаны в LDR файле. И выполняет переход по адресу, определяемому битом RESVECT. Т.е. если код для 532 загрузить в 533, то работать будет, а наоборот нет. Я писал наоборот :) "Мы случайно запаяли 533 вместо 532, все работало. "
  12. Ну программа грузится туда, куда линкер скажет. После ресета проц уходит, в зависимости от BMODE[1..0], или на прямое выполнение из внешней памяти, или на BOOT ROM. далее BOOT ROM грузит LDR, в котором есть бит Bit 1: RESVECT и после загрузки происходит переход на адрес, который зависит от этого бита. Кто сказал что 533 жестко переходит по 0xFFA00000? Я так понял это от этого бит в прошивке зависит. А бут ром там один для 531(2,3), вот он и выбирает куда прыгать. After booting is complete, the on-chip Boot ROM uses this bit to jump to address 0xFFA0 0000 for the ADSP-BF533 or to address 0xFFA0 8000 for the ADSPBF531/ BF532. Другое дело, что надо посмотреть на ревизию чипа. Вот здесь могут быть проблемы. Старые баги уходят, новые приходят :)
  13. Да должно работать. Ну не будет часть памяти использоваться. Вот наоборот не будет. Мы случайно запаяли 533 вместо 532, все работало. Случайно заметил, начал копаться. Там так распределение памяти и boot сделаны, что все работать должно. А вот если прошиву поменять, то работать не будет. Загрузка пройдет как 532, а старт будет как в 533.
  14. Да я понял что Вы хотите сделать:) нужно причину найти почему этого не происходит. Вот я и предлагаю исключить idle из кода. Ядро B ждет перенастройки PLL, а ядро A этого не делает. Выход и этого состояния заблокирован по другим событиям. Может в этом проблема. У меня нет кита, к сожалению экспериментировать не могу. А на плате JTAG не разведен. Так что могу только фантазировать :) Сейчас одну штуку посмотрю, если чего отпишу. А сделайте так. В ядре B включите прерывание от ядра A. Поставьте breakpoint на это прерывание, а по завершении работы ядра A вызывайте это прерывание. Прерывание должно быть с наивысшим приоритетом. Код ядра А вызов прерывания *pSICB_SYSCR = (1<<7) ; ssync(); Код ядра В инит *pSICB_IAR7 = 0xF0FFFFFF; register_handler(ik_ivg7, core_a_int); *pSICB_IMASK1 = (1UL<<30); само прерывание EX_REENTRANT_HANDLER(core_a_int); { чего нибудь, и на это чего нибудь breakpoint } только не блокируйте wakeup от этого источника. у Вас в примере это заблокировано
  15. а нахрена вам этот код в ядре В? Не проще ли настроить PLL до запуска ядра B? Попробуйте сделать там просто вечный цикл Я вообще настройку PLL в инит коде делаю, первым делом, чтобы потом с сдрам проблем не было. Да, и вот в чем вопрос, idle, случаем, доступ к ядру по JTAG не ограничивает ли?
  16. А Вы можете загрузить этот же проект в симулятор, и посмотреть что в ядре В находится по этому адресу 0xFF600BB4 в окне дизассемблера?
  17. Да хрен его знает. Могу предположить что в Emulation Mode. Т.е. в состоянии с наивысшим приоритетом. Но это только догадки.
  18. Огромное спасибо, то что надо. Только вроде бы как они (ЭПУ2-2) снимаются с производства, но им есть замена (БОТ). У меня еще один вопрос, а нафига к нему еще сглаживающий реактор? Выбросы в сеть уменьшить?
  19. Добрый день, всем! Тут меня попросили ребята подобрать привод к двигателю, а так как я этим никогда не сталкивался спрошу у вас. Вот тип двигателя: двигатель 2ПБ112LГУХЛ4 . 220В, 10.5А . Возбуждение независимое 220В 0.45А. 3150/4000об.мин. Вот схема двигателя И еще пару ссылок на приводы 4q2_rev0.pdf http://www.eurotherm.co.uk/products/drives...i/?locale=en_GB Подойдут ли эти приводы? Может еще чего подскажите. А то я на другие смотрел, так у них цена космическая. Двигатель используется для привода шпинделя токарного станка.
  20. А если так *pSICA_SYSCR|=0x10; ssync(); asm("RAISE 1;"); asm("NOP;"); asm("NOP;"); asm("NOP;"); asm("NOP;"); asm("NOP;");
  21. а printf прерываний более низкого уровня не использует? Может лучше ножкой подергать, так надежнее :)
  22. Да, ВДК это зло :):) 100 нс... Да должен войти. А попробуйте raise 2. Если проблема внутри проца, то ничего не изменится, если извне, то заработает. Хотя может быть и там и там :) А проц не входит туда или не выходит. Ничего не виснет? Инкрементируемая переменная volatile ?
  23. Да должно получиться, только смотрите это прерывание по уровню, и если не снять запрос на прерывание то проц там и останется. Посмотрите на длительность этого сигнала. А с уровнем все нормально. VIH High Level Input Voltage 2.0 ... 3.6V VIL Low Level Input Voltage –0.3 ... +0.6V
×
×
  • Создать...