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

Abo

Свой
  • Публикаций

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

  • Посещение

Репутация

0 Обычный

Информация о Abo

  • Звание
    Частый гость
  1. Цитата(vladimir52 @ Nov 26 2017, 12:06) Спасибо! Из прошлогодне темы нашел, что "Старший бит регистра будет выходом деленной частоты F2=F1*K/2^N." Как получить коэффициент деления 1/1000? И еще вопрос. Делитель с фиксированным дробным коэффициентом деления получить можно, а для всех возможноых вариантов деления генерить каждому по делителю? Хочется найти параметризованное решение. Кадый такт к счетчику прибавляете M и сравниваете резльтат с N. Если значение в счетчике больше или равно N, то формируете импульс на шаг и разность счетчика и N пишете в счетчик. Обнулять счетчик при смене N и M не нужно.
  2. Цитата(~Elrond~ @ Mar 5 2015, 13:07) Krys Я разбирался и писал свою версию исключительно по CORDIC for dummies. Крайне полезный и доступный для понимания материал, есть исходники. Оставалось только перевести в HDL и параметризовать. В аттаче моя версия вместе с тестбенчем. Мне тоже потребовалось сделать кордик для расчета арктангенса. Воспользовался этим кодом. Благодарю автора. Со своей стороны прикладываю немного ускоренный вариант с хранением сдвинутого предыдущего значения в отдельном регистре. До изменения на 10M50 максимальная тактовая была не более 119МГц, после выросла до 137МГц. Мне нужно было чтобы при 120МГц работало. Кодmodule cordic_core #(     parameter                         SIG_W    = 18,     parameter                         ACC_W    = 20 )(     input                  rst,     input                  clk,     input                  req,     input                  ccwr,     input  signed [SIG_W:0]        x_i,     input  signed [SIG_W:0]        y_i,     input  signed [ACC_W+1:0]    a_i,     output                 rdy,     output                 busy,     output reg signed [SIG_W:0]    x_o,     output reg signed [SIG_W:0]    y_o,     output reg signed [ACC_W+1:0]    a_o ); `define ANG_SCALE(s)    (ACC_W < 32) ? \     (ACC_W+2)'(unsigned'(``s`` >>> (32-ACC_W)) + unsigned'(1'(``s`` >> (32-ACC_W-1)))) : \     (ACC_W+2)'(``s``)      localparam logic signed [ACC_W+1:0]    ANG_TABLE[31] = '{     `ANG_SCALE(32'sd536870912),     `ANG_SCALE(32'sd316933406),     `ANG_SCALE(32'sd167458907),     `ANG_SCALE(32'sd85004756),     `ANG_SCALE(32'sd42667331),     `ANG_SCALE(32'sd21354465),     `ANG_SCALE(32'sd10679838),     `ANG_SCALE(32'sd5340245),     `ANG_SCALE(32'sd2670163),     `ANG_SCALE(32'sd1335087),     `ANG_SCALE(32'sd667544),     `ANG_SCALE(32'sd333772),     `ANG_SCALE(32'sd166886),     `ANG_SCALE(32'sd83443),     `ANG_SCALE(32'sd41722),     `ANG_SCALE(32'sd20861),     `ANG_SCALE(32'sd10430),     `ANG_SCALE(32'sd5215),     `ANG_SCALE(32'sd2608),     `ANG_SCALE(32'sd1304),     `ANG_SCALE(32'sd652),     `ANG_SCALE(32'sd326),     `ANG_SCALE(32'sd163),     `ANG_SCALE(32'sd81),     `ANG_SCALE(32'sd41),     `ANG_SCALE(32'sd20),     `ANG_SCALE(32'sd10),     `ANG_SCALE(32'sd5),     `ANG_SCALE(32'sd3),     `ANG_SCALE(32'sd1),     `ANG_SCALE(32'sd1) }; `undef ANG_SCALE localparam                         CNT_W = $clog2(ACC_W+1); localparam [CNT_W-1:0]        LAST_CNT = (CNT_W)'(ACC_W) - 1'b1; logic                                busy_t1; logic                  [4:0]            i;            // Изначально разрядность была настраиваемой [CNT_W-1:0], изменил чтобы квартус не предупреждал. logic signed     [SIG_W:0]    x_s, y_s; assign busy    = (i < LAST_CNT); assign rdy    = (~busy & busy_t1); wire signed [SIG_W:0] next_x_o = (ccwr) ? (x_o - y_s) : (x_o + y_s); wire signed [SIG_W:0] next_y_o = (ccwr) ? (y_o + x_s) : (y_o - x_s); wire signed [SIG_W:0] next_x_s = signed'(next_x_o >>> (i+1'b1)); wire signed [SIG_W:0] next_y_s = signed'(next_y_o >>> (i+1'b1));          always_ff @(posedge clk, posedge rst) begin     if(rst) begin         busy_t1    <= 0;         i    <= '1;         x_o    <= 0;         y_o    <= 0;         x_s     <= 0;         y_s    <= 0;         a_o    <= 0;     end     else begin         busy_t1    <= busy;              if(req | busy)             if(req) begin                 i <= 0;                 x_o    <= x_i;                 y_o    <= y_i;                 x_s     <= x_i;                 y_s     <= y_i;                 a_o    <= a_i;             end             else begin                 i        <= i + 1'b1;                 x_o    <= next_x_o; //(ccwr) ? (x_o - y_s) : (x_o + y_s);                 y_o    <= next_y_o; //(ccwr) ? (y_o + x_s) : (y_o - x_s);                 x_s     <= next_x_s;                 y_s     <= next_y_s;                 a_o    <= a_o + (ccwr ? ANG_TABLE[i] : -ANG_TABLE[i]); //(ccwr) ? (a_o + ANG_TABLE[i]) : (a_o - ANG_TABLE[i]);             end     end end endmodule
  3. Цитата(scifi @ Aug 19 2015, 16:19) Оно? К сожалению не оно. При этом запускается еще одна копия отладочной DLL и контрольной панели. В ней можно установить адрес командой exec SetRTTAddr и подключиться вьюером. Но при начале отладки будет запущена новая копия отладочной Dll, которая адрес уже не знает, загрузка и отладка будет идти через нее и после кейл упадет.
  4. По прочтению статьи Дебаггинг в реальном времени через JTAG/SWJ-DP для микроконтроллеров на ядре ARM Cortex-M, решил попробовать рецепт на ядре M4 мк LPC4337. Столкнулся со следующей трудностью: сервер отладки, который запускается IDE в начале отладочного сеанса не находит автоматически адрес структуры _SEGGER_RTT в ОЗУ. Ввести адрес вручную на вкладке RTTerminal окна "Control panel" не получается - там какое-то странное поле ввода, которое само постоянно обновляется (у меня версия софта 5.00I). В мануале от сеггера предлагают заставить отладчик самостоятельно передать адрес: КодIn some cases J-Link cannot locate the RTT buffer in the known RAM region. In this case the possible region or the exact address can be set manually via a J-Link exec command:     Set ranges to be searched for RTT buffer: SetRTTSearchRanges <RangeStart [Hex]> <RangeSize >[, <Range1Start [Hex]> <Range1Size>, ...] (e.g. "SetRTTSearchRanges 0x10000000 0x1000, 0x2000000 0x1000")     Set address of the RTT buffer: SetRTTAddr <RTTBufferAddress [Hex]> (e.g. "SetRTTAddr 0x20000000")     Set address of the RTT buffer via J-Link Control Panel -> RTT J-Link exec commands can be executed in most applications, for example in J-Link Commander via "exec <Command>", in J-Link GDB Server via "monitor exec <Command>" or in IAR EW via "__jlinkExecCommand("<Command>");" from a macro file. вот только как это сделать в Кейле тут не указано. Кстати, Если попытаться с помощью JLinkRTTViewer открыть еще одну сессию (при запуске этой утилиты можно указать адрес структуры _SEGGER_RTT) то отладочный вывод идет, но после выхода из отладочного режима в кейле и закрытия JLinkRTTViewer, кейл падает. Если же запускать JLinkRTTViewer так, чтобы он подключалась к уже запущенному отладочному процессу и потом автоматически реконнектился к нему, то естественно вывода нет - поскольку адрес структуры не найден, и задать его во вьюере нельзя. Прошу указать способ, как в отладчике кейла послать команду JLink серверу?
  5. Нужен ли в этой задаче АРМ?

    У nxp или ad поищите не тему видеоАЦП ( ADV7xxx - что-такое), в них как правило и коммутатор не несколько источников есть. Эти АЦП имеют на выходе синхронный параллельный (а может есть и с последовательным) интерфейс для содержания и сигналов синхронизации (кадры и строки). Таким образом -для приема с АЦП синхронный интерфейс с ПДП и ОЗУ на кадр. Но четкость с обычной видеокамеры наверняка будет не очень. Я бы предпочел построить систему на IP камерах и озаботиться лишь обеспечением канала связи (камеры должны частоту кадров под канал подстраивать) и ничего не придумывать - все уже придумали за нас, надо только правильно воспользоваться.
  6. eZ430-RF2500 и Windows-7 проблемы

    Цитата(rezident @ Jan 21 2010, 11:10) Читайте внимательно системные требования в User's Guide и Wiki Цитата из Wiki Кроме того, даже если у вас 32-х разрядная версия ОС учтите, что драйверы MSP-FET430UIF не имеют цифровой подписи Microsoft и поэтому в Windows 7 работать не будут. Любая 32х разрядная винда (даже семерка) не требует цифровой подписи от драйвера и прекрасно его грузит. А вот 64х разрядные версии, начиная с Vista, грузят драйверы без подписи только в специальном - тестовом режиме (при этом в углах или сверу рабочего стола отображается надпись "Test Mode"). Переключиться в этот режим можно с помощью утилиты bcdedit.
  7. Пульсоксиметр на MSP430FG437?

    А нельзя ли заполучить от Вас эту новую версию документа, а то на ТИ до сих пор старая еще лежит.
  8. Я вот так половину тактовой частоты периферии подаю на вывод 46 Код  // Настраиваем входные и выходные сигналы   PINSEL0 = (PINSEL0 & ~(0)) | 0x0;   // Вывод 46-P0.16 как MAT0.2   // Вывод 3-P0.21 как МАТ3.0   PINSEL1 = (PINSEL1 & ~((3<<0)|(3<<2)|(3<<4)|(3<<6)|(3<<8)|(3<<10))) | ((2<<0)|(2<<6)|(2<<8)|(2<<10));   // Настраиваем таймер 0 на выдачу сигнала SCK частотой 12,8 МГц - половина тактовой   PCONP |= PCONP_PCTIM0;                // Подаем питание на таймер   T0TCR   = 2;                          // Остановим и сбросим таймер   T0CTCR  = 0;                          // Работа в режиме таймера   T0PR    = 0;                          // Предделитель не используется - на таймер подается CCLK 25,6 МГц   T0MR0   = 1;                          // Определяет период выходного сигнала   T0MR2   = 1;                          // Определяет период выходного сигнала   T0MCR   = T0MCR_MR0R;                 // Сброс по совпадению с MR0   T0EMR   = 0;                 T0CCR   = 0;                          // Запретить режим захвата по всем входам   PWM0CON = 1<<2;                       // Разрешим генерацию PWM на выходе MAT0.2
  9. LPC2368 и ESD защита USB порта...

    резисторы нужны не для защиты от статики, а для снижения уровня излучаемых помех за счет завала крутых фронтов сигналов. Для этого кроме резисторов еще и кондюки на 27 пик ставят на землю на каждую линию данных. Правда это работает только для Low и Full Speed. На High Speed не знаю что ставить.
  10. На мой взгляд, экран USB разъема в устройстве не стоит соединять с минусом питания дросселем. Для этого рекомендуют использовать цепочку из параллельно включенных конденсатора 1000 пик на 250В и резистора 1МОм, через который этот конденсатор будет разряжаться при необходимости. Подобное включение предотвратит протекание по экрану USB кабеля уравнивающего тока промышленной частоты и в то же время обеспечит путь для стекания наносекундных импульсных помех. Без большой нужды не стал бы соединять минус источника питания с сетевым заземлением, правда если корпус самого устройства не железный. Ну а если есть такая необходимость - тогда придется USB интерфейс в устройстве гальванически изолировать от основного источника питания. В противном случае по экрану кабеля USB обязательно потечет уравнивающий ток, если заземляющий проводник в одной из розеток поврежден.
  11. Как программить flash в LPC без IAP ?

    Цитата(bus16 @ Oct 13 2008, 12:36) Интересно, а как на этапе производства этот-самый bootloader попадает во-флеш? А наверное через JTAG.
  12. Ну в общем получилось настроить. в /etc/udev/rules.d есть набор файлов с правилами, по которым демон udevd создает в каталоге /dev файлы устройств во время их подключения и убирает их в время отключения. в этом каталоге в файле 50-udev-default.rules есть такие строки: Код# libusb device nodes SUBSYSTEM=="usb", ACTION=="add", ENV{DEVTYPE}=="usb_device", NAME="bus/usb/$env{BUSNUM}/$env{DEVNUM}", MODE="0644" именно в ней и говорится, что при создании файла устройства подходящего под SUBSYSTEM=="usb", ACTION=="add", ENV{DEVTYPE}=="usb_device" необходимо файлу устанавливать права доступа MODE="0644". В простейшем случае, изменив MODE="0644" на MODE="0666" можно позволить всем использовать все подключаемые usb устройства. Но я решил поступить в соответствии с рекомендациями http://citkit.ru/articles/245/ http://citkit.ru/articles/245/ и создал в этом каталоге /etc/udev/rules.d файл 10-local.rules в который вписал одну строку: КодSUBSYSTEM=="usb", ACTION=="add", ENV{DEVTYPE}=="usb_device", ATTR{product}=="ABOJTAG", NAME="/bus/usb/$env{BUSNUM}/$env{DEVNUM}",  GROUP="usb", MODE="0664" где ABOJTAG = содержание строкового дескриптора ProductId из дескриптора устройства моей FT2232. Теперь при подключении устройства в каталоге /dev/bus/usb/001 создается файл с правами для группы usb на чтение и запись. Группу usb я создал и включил себя в нее. Теперь программа jtag и прочие примеры из поставки libftdi не ругаются если я из запускаю из под своей учетной записи, чего я собственно и добивался.
  13. Все правильно, /dev/ttyUSB0 и /dev/ttyUSB1 имеют группу "uucp" с правами на запись и чтение, только незадача, программы jtag и gdbproxy работают через библиотеку libftdi, которая в свою очередь работает через libusb, которая хочет открывать не виртуальные компорты /dev/tty*. а хочет открыть непосредственно файл устройства /dev/bus/usb/001/007, в полном имени файла последние числа это номер контролера USB и номеp устройства на шине этого контроллера. Права доступа к этому файлу и хочется поменять, а они: crw-r--r-- 1 root root 189, 6 Июл 29 14:49 007 . Насколько я понял из интернета - за создание и назначение прав отвечает пакет udev. Вот с ним и разбираюсь сейчас.
  14. Цитата(Mihail Gluhowchenko @ Jul 29 2008, 08:44) Каким устройством становится usbJtag? Можно посмотреть dmesg. Вот кусок из того что выдает dmesg при подключении ft2232 usb 1-1: new full speed USB device using uhci_hcd and address 8 usb 1-1: configuration #1 chosen from 1 choice ftdi_sio 1-1:1.0: FTDI USB Serial Device converter detected drivers/usb/serial/ftdi_sio.c: Detected FT2232C usb 1-1: FTDI USB Serial Device converter now attached to ttyUSB0 ftdi_sio 1-1:1.1: FTDI USB Serial Device converter detected drivers/usb/serial/ftdi_sio.c: Detected FT2232C usb 1-1: FTDI USB Serial Device converter now attached to ttyUSB1 usb 1-1: New USB device found, idVendor=0403, idProduct=6001 usb 1-1: New USB device strings: Mfr=1, Product=2, SerialNumber=3 usb 1-1: Product: ABOJTAG usb 1-1: Manufacturer: Abo usb 1-1: SerialNumber: 00000002 usb 1-2: new full speed USB device using uhci_hcd and address 9 usb 1-2: configuration #1 chosen from 1 choice hub 1-2:1.0: USB hub found
  15. Добрый день, заранее извиняюсь, если не в тему спросил. Есть необходимость поднять гнутый тулчейн для BF548. Начал с приобретения отладочной платы. Нашел по сходной цене у австрийцев Tiniboard. Поставил на рабочий комп OpenSuse, загрузил из svn исходники jtag и gdbproxy. После того как загрузил и скомпилировал libftdi, обе программы скомпилировались, установились и заработали но только из под рута. В качестве интерфейсов к target использовал wiggler и самодельный usbjtag на основе FT2232. Но из под рута как то не очень хорошо работать, поэтому прописал себя в группу lp, чтобы появились права на /dev/parport0. Обе программы заработали из под моей учетной записи через wiggler. Но наткнулся на проблему - никак не могу найти, что надо подправить чтобы появилась возможность работать через usbjtag из под учетной записи обычного пользователя?