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

Ar-han

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

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

  • Посещение

Весь контент Ar-han


  1. Спасибо за информацию. Отладчик купил за 2000 руб: Но еще не успел заказать плату переходника, не пробовал, на днях собираюсь заказать. Как-то попытался подключить XDS100 v2 к плате, тест коннект прошел, а отладка не заработала, в причинах не разобрался. Буду рад помощи в вопросе тестирования платы, и программатора. Плата грузится с загрузочной флешки, терминал с ней работает.
  2. Питание, полагаю, что нужно дополнительное питание, т.к. на JTAG разъеме отладочной платы есть сигнальное напряжение 1.8V, и не известно, можно ли эту ногу нагружать преобразователями уровней. А получить нужно 3.3V и 1.8V. Поставил два LDO, на входе внешние 5V, на выходе 3.3V и второе LDO - 1.8V делает из 3.3V. Будут лишние - можно не паять. Если будет желание покритиковать схему или разводку: PCAD_Jtag_low_voltage_adapter_TI.7z
  3. Да, Вы правы, подтяжка к 1.8v уже реализована на плате. отсюда: https://www.isee.biz/support/downloads/item...erence-manual-2 отсюда: http://www.ti.com.cn/cn/lit/ug/spdu079a/spdu079a.pdf На сколько я понял, питание для преобразователя в 1.8v, не корректно брать с разъёма платы, с контакта PD(VCC) Нужно внешними проводами с платы заводить? "PD (VСС) Обнаружение присутствия. Этот сигнал указывает на то, что кабель эмулятора подключён и что на тестируемое устройство подано питание. PD должен быть связан с VCC в тестируемой системе" Таблица 1. Сигналы 14-контактного разъёма JTAG http://www.scanti.ru/bulleten.php?v=411&p=15 Для питания, 100 mA LDO, полагаю, должно хватить? TPS76918 http://www.ti.com/lit/ug/slvu024/slvu024.pdf https://www.terraelectronica.ru/catalog_info.php?CODE=214906
  4. Подойдут ли для преобразования буферы? SINGLE-BIT DUAL-SUPPLY BUS TRANSCEIVER WITH CONFIGURABLE VOLTAGE TRANSLATION AND 3-STATE OUTPUTS https://www.terraelectronica.ru/catalog_info.php?CODE=66411
  5. Ищу схему преобразователя напряжения на 1.8В для эмулятора XDS510, или информацию, где купить готовый переходник. "A 14 pin JTAG header is provided on board to facilitate the SW development and debugging of the board by using various JTAG emulators. The interface is at 1.8V on all signals. Only 1.8V CMOS levels are supported. DO NOT expose the JTAG header to 3.3V." OMAP demo board IGEP v2 Спасибо.
  6. Новичок, пытаюсь создать периодически запускающиеся задачи. .tfc файл -> Sheduling -> PRD Manager Создаю объект PRD0 и функцию _PRD_ISR1 mode - continuous period (ticks) - 1000 Вижу в SWI Manager появилась функция PRD_F_swi с приоритетом = 1. Объявляю системную функцию: extern "C" { void PRD_ISR1(); } Определяю её: void PRD_ISR1() { LOG_printf(&trace, "PRD_ISR1"); a1= !a1; fnLedOnOff(a1); } Функция PRD_ISR1() не вызывается. Что забыл сделать? Где найти пример? Почему неактивно меню Insert TSK ? Почему неактивно меню Insert SWI ? Почему я могу создать только один объект PRD? Спасибо.
  7. Корпус LFCSP-40, композитный вход, PAL сигнал, на входе Ain2. С регистрами в pdf какая-то неувязка. Есть I2C PROGRAMMING EXAMPLES в ADV7180.pdf Rev. B Которая указывает на регистры, неописанные в даташите. А в новых ревизиях эта секция удалена 1/14—Rev. G to Rev. H ... Deleted I 2 C Programming Examples Section ............................106 Не нашел описания регистров 0x3E 0x3F и 0x55 Переключение в защищенную область регистров описано как: рег 0x0E -> установить бит 5 => 0x20 А в примере: 0x0E -> 0x80 Причем ни так, ни этак запись не проходит в этот неописанный регистр, и в соседний, описанный из защищенной области, к примеру 0x58 - пытаюсь установить в 1, а читаю оттуда 0. Сейчас так пытаюсь конфигурировать: // Composite Uint8 VGAReg03[] = {0x03, 0x0C }; // Output Control Uint8 VGAReg00[] = {0x00, 0x03 }; // Input Control // S-Video (LFCSP) in2 Autodetect PAL B Uint8 VGAReg04[] = {0x04, 0x55 }; // Extended Output Control Uint8 VGAReg17[] = {0x17, 0x41 }; // Shaping Filter Control Uint8 VGAReg3D[] = {0x3D, 0xA2 }; // Manual Window Control Uint8 VGAReg3E[] = {0x3E, 0x6A }; Uint8 VGAReg3F[] = {0x3F, 0xA0 }; Uint8 VGAReg0E[] = {0x0E, 0x80 }; // {0x0E, 0x20 };// ADI Control Interrupt and VDP System Register Map Uint8 VGAReg55[] = {0x55, 0x81 }; Uint8 VGAReg0E_1[] = {0x0E, 0x00 }; // ADI Control // PAL Uint8 VGAReg31[] = {0x31, 0x1A }; // VSYNC Field Control 1 Uint8 VGAReg32[] = {0x32, 0x81 }; // VSYNC Field Control 2 Uint8 VGAReg33[] = {0x33, 0x84 }; // VSYNC Field Control 3 Uint8 VGAReg34[] = {0x34, 0x00 }; // HSYNC Position Control 1 Uint8 VGAReg35[] = {0x35, 0x14 }; // HSYNC Position Control 2 Uint8 VGAReg36[] = {0x36, 0x92 }; // HSYNC Position Control 3 Uint8 VGAReg37[] = {0x37, 0xA1 }; // Polarity Uint8 VGARegE8[] = {0xE8, 0x40 }; // PAL V Bit Begin Uint8 VGARegE9[] = {0xE9, 0x83 }; // PAL V Bit End Uint8 VGARegEA[] = {0xEA, 0x06 }; // PAL F Bit Toggle Uint8 VGAReg58[] = {0x58, 0x05 }; // VS/Field Pin Control Читаю статусный регистр: Status 1 (0x10), и не вижу бита захвата входного PAL сигнала (IN_LOCK). От включения к включению питания меняется состояние регистра от 0x6A, до 0x0A Сигналы синхронизации, данные и клок в процессор идут. Что делаю не так? Спасибо.
  8. Начал слать пакеты на другой компьютер с сетевухой интегрированной в материнскую плату, при тех же параметрах ошибок в 15 раз меньше. Статистика: Num_ALL_line= 258304 Num_Ok_line= 258286 Num_ERR_line= 18 Lines_all/err_relations= 0.0070 num_all_frames= 531 num_ok_frames= 513 num_err_frames= 18 frames__all/err_relation= 3.3898 Ошибки: 1 число - номер кадра, второе число - разница в номерах принятых строк отличная от 1 и от числа строк в кадре (486 - 1). 37251 79 37265 2 37282 3 37295 3 37316 3 37343 -457 37374 -446 37407 3 37471 3 37480 2 37512 2 37513 5 37519 3 37559 79 37670 3 37688 2 37697 2 37706 2 Максимальной скорости отправки не прибавилось. Заменил кабель на более короткий и 6-ой категории, не помогло. Число дескрипторов n_tx_descriptors - 256 вместо 64 не заметил разницы. tcp_tx_checksum - offload - почему-то никаких изменений в максимальной скорости не заметно. tcp_tx_ip_tx_checksum - offload => куча ошибок при компиляции, пока не разбирался с ними (перестал находить какие-то файлы) memp_n_buf - 1024 вместо 16 => не заметил изменений. pbuf_pool_bufsize - у меня 1700 стоит. С выделением памяти еще не совсем разобрался, сейчас выделяю тут и так: pbuf_to_be_sent = pbuf_alloc( PBUF_RAW, 1048, PBUF_RAM); Пробовал менять частоту таймеров, на первый взгляд, ни скорости не прибавило, ни ошибок не убавило.
  9. Кажется, я никакого обмена не видел между UDP пакетами. Пробовал эту функцию вызывать единожды в начале, не проходят. Могу ошибаться, но вроде бы, вначале плата спрашивает мак PC с указанным IP и начинает пулять туда пакеты. Завтра проверю. Функции дергаются по колбеку таймера. Интервал таймера 250 ms и 500 ms, насколько я понимаю. #define MHZ 400 #define PIT_INTERVAL (250*MHZ*1000) Завтра попробую их уменьшить. А как у вас со стороны компьютера организован приём, под какой операционкой? Я пробую через Winsock, с блокирующими функциями чтения, в MFC. При создании отдельного потока для чтения сокета в статический массив, а по выходу сохранение массива в файл, статистика потерь пакетов порядка 0.1%, если во втором отдельном потоке делать распаковку данных, АРУ, сохранение кадра в BMP формате на диск, чтение этого файла и вывод на экран, потери увеличиваются. Реально, около 30 % кадров выкидываю из-за полученного неполного количества строк (частота 26 кадров в сек) Не могу понять в чём дело.
  10. Вы имеете ввиду эти функции? void timer_callback() { /* we need to call tcp_fasttmr & tcp_slowtmr at intervals specified by lwIP. * It is not important that the timing is absoluetly accurate. */ static int odd = 1; tcp_fasttmr(); odd = !odd; if (odd) tcp_slowtmr(); } Не забываю, дергаю. Значит выкидывать xemacif_input(netif); не стоит, упрощать на первый взгляд нечего? Хотел выкинуть чтение порта, хотя может это и пригодиться в дальнейшем. Еще у меня порт выбран 1024, может стоит более высокий номер взять, этот может быть занят чем-то. Ввел нумерацию строк и кадров в пакеты, наблюдаю потерю части строк со стороны PC. Спасибо.
  11. Так и есть, сейчас UDP пакет заполняю данными из DDR, использую DDR как буфер. У меня двупортовая BRAM - 512KByte, со стороны железа в один порт закидываю кадр, когда она полна, дергаю за ногу внешнего прерывания процессор. А через второй порт в процессоре, по флагу прерывания копирую кадр из BRAM, в DDR, с помощью memcpy(), а из DDR, по строкам передаю UDP пакетами. Если просто в бесконечном цикле, один и тот же кадр отсылаю из DRR transfer_utxperf_data() { ... for (zz = 0; zz < N_packets; zz++) // читаю кадр из DDR { memcpy(pbuf_to_be_sent->payload, pData_DDR + (zz*1040),1040); err = udp_send(pcb, pbuf_to_be_sent); } } То сниффер показывает скорость 350 Mbit в сек. (Без ожидания прерывания и копирования кадра из BRAM в DDR) Если в бесконечном цикле, без ожидания прерывания, но с копированием кадра 648*486 из BRAM в DDR, то скорость 250 Mbit в сек. Копирование делаю, чтобы исключить одновременное чтение и запись в BRAM со стороны железа и процессора. main.c ... while (1) { if (is_ext_interrupt == 1) // Флаг внешнего прерывания { is_ext_interrupt = 0; memcpy(pData_DDR, pData_1, frame_size); xemacif_input(netif); // без неё нет отправки transfer_utxperf_data(); // отправка UDP пакета } } Пример отправки UDP пакетов взял из echo - сервера. Не могу понять необходимость вызова функции чтения входного порта перед отправкой UDP пакета: xemacif_input(netif); Без неё пакеты не отправляются.
  12. Получилось! Вместо Fifo для Temaca подключил DMA, частоту проца поднял до 400 Mhz, а частоту шины до 100Mhz. (было 333/83) Скорость 30000 пак в сек (длина пакета с заголовком 1082 байта), примерно 250 Mbit/sec Enable TxCheckSum offload for Temac - галку поставил, он на той же частоте она скорости не прибавила, как и увеличение Fifo Depth 16kB вместо 4kB В XAPP 1041 подсмотрел, что частоту шины поднимают до 133 Mhz на этом же ките (ML507) при частоте процессора 400, но в XPS, BSB помощник не предлагает такого варианта. Стоит ли попробовать? Настраивается ли как-то LWIP ? Увидел, что если в SDK -> Board Support Package setting выделить LWIP, то появятся куча настроек. Control various settings of your Board Support Package. Сейчас всё по умолчанию, включая RAW_API C чем еще можно поэкспериментировать?
  13. Учусь укладывать видео-поток в UDP пакеты. Отправка пакетов: Железо Virtex-5, ML507 Процессор PowerPC 333 Мгц Temac, GMII + LocalLink FIFO (4096 byte) LWIP библиотеки. Модифицированное приложение echo-сервера. Длина пакета 1082 байта cache D/I Enable ld-script: stack size: 0xA000 heap: 0xA000 все секции памяти в DDR Приём: На PC - windows. на 100 Mbit канале и на 1000 Mbit, скорость почти не меняется 75-80 Mbit/sec Пока что пролезает 18 кадров в сек, 640х480х12bit Можно ли вытянуть больше скорость? P.S. Emac-lite даёт не более 54 Mbit/sec И требует паузы между пакетами. Что почитать? Куда двигаться дальше? Спасибо.
  14. Правильно ли я понимаю, что JTAG UART можно использовать только с MDM, и всё должно работать через программатор JTAG STM2 ?
  15. Моё почтение присутствующим! XILINX, powerPC процессор-> JTAGPPC Controller-> среда SDK, -> STDIO connection Раньше использовал com-port для вывода отладочной информации процессора. Всё работало, но теперь ноутбук без com-порта, как связаться с процессором? железо - virtex-5 (ML507), прошиваю через JTAG STM2 в меню "STDIO connection" есть выбор между com-портом и JTAG UART. Если выбираю JTAG UART => ошибка: 'Error opening JTAG UART @ localhost:-1' Спасибо.
  16. Правильно ли я понимаю, что память с двумя буферами, это две одинаковые корки BRAM, с разными адресами, на одной шине (PLB) ? Кстати, интересно, можно ли двухпортовую BRAM повесить на LMB шину? У меня, вроде бы, получалось, но были проблемы, и не удалось её корректно использовать. Приём данных, кажется, удалось победить. Теперь вопрос по флагам, флаг процессору - по внешнему прерыванию. Ок. Это сделал. Измеренная wireshark -ом скорость получилась 2940 пакетов в сек по 1 кБайту. Теперь как мне передать от процессора флаг, что память прочитана? Первое, что приходит в голову - это GPIO, но подозреваю, что это не оптимально. Сейчас использую microblaze на частоте 100 Мгц, интересно, что даст повышение частоты? Хочу перейти на powerPC, только не соображу как на PowerPC запустить UDP пакеты. Под PowerPC тестовое приложение с эхо сервером организовано через TCP протокол. Насколько я понял, если сделать большие UDP пакеты, то lwip сама их разрежет, и отошлет кусками. Но кажется, UDP не поддерживает нумерацию пакетов, значит, рассчитывать, что они склеятся на стороны компа не приходится. Значит самому нужно их резать кусками, нумеровать, и склеивать на компе? Нет, не прописаны, буду рад подсказке, с констрейнами еще не успел разобраться. Если, можно, ткните где почитать про констрейны. Правильно ли я понимаю, что констрейны пишутся руками в UCF файле, рядом с распиновкой ног? Где-то я слышал, что они удобно прописываются в PlanAhead, только с ходу не нашел. У меня есть пример констрейна для входного сигнала: NET "CLOCK_110" TNM_NET = CLOCK_110; TIMESPEC TS_CLOCK_110 = PERIOD "CLOCK_110" 110 MHz HIGH 50% INPUT_JITTER 100 ps; OFFSET = IN 9.09091 ns VALID 9.09091 ns BEFORE "CLOCK_110" RISING; Можно ли таким же образом указать ограничения на тактовый сигнал, который рождается после диф. приёмников - USER_CLK? Из каких соображений выбирается JITTER ? IBUFGDS_1 : IBUFGDS port map (I=>SMA_DIFF_CLK_IN_P, IB=>SMA_DIFF_CLK_IN_N, O=>USER_CLK); IBUFDS_6 : IBUFDS port map (I=>HDR2_64_SM_9_P, IB=>HDR2_62_SM_9_N, O=>DDR_6); IDDR_6 : IDDR port map (C=>USER_CLK, CE=>VPP, D=>DDR_6, R=>GRND, S=>GRND, Q1=>out12, Q2=>out13); Спасибо! Только не понятно, откуда брался шум при отсутствии входного сигнала.
  17. Ура, всё заработало! Нашел еще одну дурацкую ошибку, пихал данные в память по совершенно другой частоте, не по той, на которой они защелкивались в диф. приемниках. На входе синус, 2 МГц.
  18. 64-битная шина GPIO была в самом начале, от неё перешёл на двухпортовую BRAM, повешанную на PLB шину. Как мне лучше флаг заполнения памяти передать процессору? Сейчас его завожу на ногу внешнего прерывания. А как правильно? Тоже через корку какую делать обмен флагами? Разделил по времени запись и чтение в двухпортовую память. Теперь сигнал не режется на куски, но какие-то ошибки возникают, снова запутался, порядок ног уже 5 раз проверил. Пила на входе вместо диф. приемников рисуется правильно. синус на входе без сигнала с замкнутым входом Может быть какие-то временные ограничения нужно указать сигналу, по которому защелкиваю данные в диф. приемниках? Защелкиваю данные по сигналу clk_out с АЦП. Может нужно подвигать фазу защелкивания DCM блоком, или указать допустимый джиттер на этот сигнал (USER_CLK) ? У меня сейчас так: IBUFGDS_1 : IBUFGDS port map (I=>SMA_DIFF_CLK_IN_P, IB=>SMA_DIFF_CLK_IN_N, O=>USER_CLK); IBUFDS_6 : IBUFDS port map (I=>HDR2_64_SM_9_P, IB=>HDR2_62_SM_9_N, O=>DDR_6); IDDR_6 : IDDR port map (C=>USER_CLK, CE=>VPP, D=>DDR_6, R=>GRND, S=>GRND, Q1=>out12, Q2=>out13); ...
  19. Было бы интересно взглянуть, хотя может сначала стоит своих шишек набить. А то у меня сегодня микроблейз на внешние прерывания напрочь отказывался реагировать. Бывает, застряну на какой-то мелочи и сижу по пол дня. В моём варианте двухпортовая память в один порт ацп пишет по два значения (14бит) в один регистр (32бит), а вторым портом она на PLB шине (пока что микроблейза): #define XPAR_XPS_SHARED_BRAM_IF_CNTLR_BASEADDR 0xA0000000 Указатель на эту память: #define pData ((char*)0xA0000000) копирую: memcpy(pbuf_to_be_sent->payload,pData,STR_SIZE); отправляю: err = udp_send(pcb, pbuf_to_be_sent); Хочу научиться понимать и работать со всеми вариантами обмена данными, но пока иду от простого к сложному. Не пинайте сильно, не всегда с новыми понятиями легко разобраться, такими как DMA. Периодически, даю команду читать ацп и писать в память до заполнения, складывая два значения в один регистр. Дергаю ногу прерывания микроблейза флагом, что память заполнена, по этому прерыванию пытаюсь читать данные и отправлять пакет. Пока что заткнулся на прерывании микроблейза. Упорно не хочет работать, хотя раньше с ним проблем не было. (Может я импульс короткий даю на прерывание? он порядка 100 ns) До этого, писал в эту память 4 мкс сигнала, ждал 200 ms и снова писал, а проц выгребал оттуда 10 раз в секунду данные со своей, уж не знаю какой скоростью, и посылал пакеты. В таком варианте сигнал приходил порезанный на несколько кусков в разных фазах. При этом, если снизить частоту тактирования АЦП раз в 10, то сигнал приходил без искажений. Я пока только учусь, хочу попробовать как не правильно делать и как правильно. Всем большое спасибо за поддержку.
  20. Нет, еще не нашел. Хочу, всё же, для начала попробовать добить свою двупортовую память, сделал ногу внешнего прерывания на процессоре, и хочу её дергать флагом заполнения памяти. Посмотреть, не будет ли ошибок, и померить скорость, с которой процессор сможет её прочитать. Уже почти доделал, потом попробую с коркой ФИФО. Спасибо.
  21. Это мне понятно, но я пишу про преобразование не в прямой код, а в беззнаковый формат, в котором самое маленькое число - это 00000000, и дальше оно растет до 11111111. И мне показалось, что удобным из дополнительного кода преобразовать в этот формат путём инвертирования старшего бита. На таблице выше это видно. Прошу прощения, что застрял на этой теме, она этого не стоит. Просто, со стороны компьютера чтение UDP пакетов пока что через LABVIEW, которое читает пакет данных и преобразует его в массив беззнаковых байтов.
×
×
  • Создать...