Jump to content

    

pulsar-17

Свой
  • Content Count

    31
  • Joined

  • Last visited

Community Reputation

0 Обычный

About pulsar-17

  • Rank
    Участник
  • Birthday 11/17/1976

Контакты

  • Сайт
    Array
  • ICQ
    Array

Информация

  • Город
    Array

Recent Profile Visitors

1261 profile views
  1. Приветствую коллеги! Прошу совета в реализации генератора шума (ГШ) с управляемой полосой в диапозоне от 0.5Гц до 28МГц при тактовой частоте 56МГц (112МГц) на Virtex 4. Проблема в высоком темпе смены полосы, которая заранее неизвестна. Латентность не должна превышать единиц тактов, а фаза не должна рваться при смене полосы. Сам генератор реализован так: N(i+1) = N(i) * A + C; где А и С константы. FIR на выходе ГШ не решает проблему латентности. Простейший вариант усреднение значений от N(i) до N(i+k) в скользящем окне, что тоже не решает проблему латентности... Может есть другие, более эффективные алгоритмы решения подобных задач? Если кто сталкивался с подобной проблемой подскажите советом
  2. Всем большое спасибо за помощь!!! Вопрос решился.
  3. Необходимо генерировать синус с частотой до 28МГц с шагом 1Гц и возможностью изменения фазы в произвольный момент времени. Табличные методы не подходят по точности. Подскажите как можно подобное сделать?
  4. На какой версии GCC компилировалось? Вот что делает WinAVR от 22.01.2007 с GCC 4.1.1 (оптимизация - "s"): 000000ca <main>: main(): ca: 95 e0 ldi r25, 0x05 ; 5 cc: 90 93 02 01 sts 0x0102, r25 d0: 80 91 00 01 lds r24, 0x0100 d4: 82 95 swap r24 d6: 86 95 lsr r24 d8: 87 70 andi r24, 0x07 ; 7 da: 80 93 00 01 sts 0x0100, r24 de: 90 93 03 01 sts 0x0103, r25
  5. Все правильно, оптимизация сработала. В R25 загружается число 5, которое равно количеству сдвигов(загружается в R0: MOV R0, R25) и равно z(запись в память: STS 0x0063, R25).
  6. Работаю с этой операционкой на машине посерьезней мезозойских :) бегетов от корунда. Все устраивает за редким исключением, использовал многие прелести ОС: кучи ниток с разными приоритетами (все со стратегией планирования FIFO), семафоры, мьютексы, условные переменные, очереди сообщений, синхронный и асинхронный ввод-вывод и т.д. Слышал, что время реакции у неё незначительно хуже чем у eCos (сам не проверял). Нюансов много, как и в любой другой ОСРВ, но в целом впечатление хорошее.
  7. Я как раз из НИИ Приборостоения им.Тихомирова. Прекрасно понял о чем вы говорите, кроме одного: что вы собираетесь разработать? Демо плату для обработки сигнала или плату ПД (типа как в том-же Багете) или что-то универсальное? Какие задачи он должен выполнять? И всетаки, в какой локатор вы его собираетесь вставить :) ? Для обработки сигнала, тем более с Вашим РАЗМАХОМ по ассортименту локаторов и самолетов на которых они установлены нужен только DSP ооочень высокой тактовой частотой и да еще и не один. Полюбому их как то связывать придется. Слабые вычислители никому не нужны... Кучи дээспэшников для хорошего вычислителя маловато, RISC нужен. Обязательна плавающая точка (если речь идет о радиолокации, навигации) и высокая тактовая частота и большой объем кэша, широченная шина с памятью и тд тп. Разработка подобного хорошего вычислителя, тем более для подобных задач очень сложная задача. Мало изучить процы на которых все будет построено и наладить работы с неграми с паяльниками и постовщиками элементной базы, найти несколько сотен тысяч баксов... Подобных вычислителей полно и Корунд со своим ... уже давным довно не законодатель мод. Если делать с нуля, то лучше использовать готовый и больше времени уделять радиолокации и алгоритмам и реализовывать тайные желания, а не тратить время на изобретение велосипеда, тем более деревянного, трехколесного... Удачи с защитой дисера!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
  8. Позвольте, для каких самолетов? Вы сами поняли что написали? Вы лично разрабытываете алгоритмы для бортовых локаторов и лучше всех знаете требуемые вычислительные затраты? Не смешите людей, уважаемый, особенно при упоминании LPC2000 и LPC3000 для решения этих задач. Если вы радиовысотомер делаете(по сути тоже локатор), то AVR вполне может хватит если обработка сигнала аппаратная, а если не аппаратная то надо смотреть в сторону DSP процессоров (вым уже советовали). Для решения навигационных задач ARM без FP негодится, если конечно ваш самолет не мотодельтаплан, летающий в пределах нескольких километров от газона с которого взлетел . Да и бортовой вычислитель это не только проц с памятью. Еще и интерфейсы МКИО, РКИО и тд. Надо учесть накладные расходы на обмен с железом интерфейсов, чтобы посчитать "чистое время" процессора (то, что он потратит на Ваши алгоритмы). Крайне важно наличие кеша (LPC3000). Несоветую искать рецепт "универсального клея", надо сначала продумать решение, реализовать, а потом эксперементы ставить.
  9. А почему Вы решили что это именно стек переполняется? Если используется только накристальная память то увеличивай не увеличивай - результат один - при сильном заполнении накристалки возможно наползание стека на BSS, а за ней и на DATA сегмент, в итоге данные запораты и стек поврежден. Выход один - оптимизировать программу с точки зрения использования памяти данных(уменьшать размеры массивов, оптимизировать математику для обработки "не лету",...), а также убрать рекурсивные функции(если есть таковые) и тд. Если есть внешняя память, то перенести сегмент DATA и BSS в неё. Стек оставить в накристалке, там он работает быстрей. Как перенести сегменты читайте в avr-libc-user-manual, лежит в winavr\doc.
  10. при чтении из конечной точки, в которой выключена передача происходит зависание драйвера (?). Сам ендпоинт работает и адресуется. Насколько я понимаю, ендпоинт должен посылать NAK и драйвер после нескольких попыток должен(?) прекратить опрос ендпоинта, чего похоже не происходит и драйвер на этом циклится. Драйвер переделан из примера взятого из DDKXP build 2600. Посоветуйте плз как это обойти на уровне драйвера, железо трогать нельзя.
  11. Посмотрите WinAVR - http://sourceforge.net/projects/winavr/ GNUшный компилятор с либами, бинутилсами, множеством полезных программ и прекрасной документацией. Все в одном дистрибутиве. Для прошивания пользуюсь ALT*ERA BY*TE BLA*STER и avreal32(с него начинал), хотя в WinAVR входят прошивальшики, которые даже покруче avreal, поддерживают больше возможностей по конфигурированию самой прошивалки(например назначение сигналов на любой бит на LPT). Можно использовать JTAG, но если Вы планируете полноценно работать со всеми каналами АЦП про JTAG можно забыть - он на порте F, АЦП там же. Главное осторожнее с fuse, можно сильно "навредить"(не пугаю!!! просто будте внимательнее!!!). В комплект входит универсальный makefile - самое сложное, по моему мнению, для новичка. Думаю разберетесь с ним без проблем, там все хорошо коментировано. Знания GNUшных средств разработки возможно Вам понадобится на пути дальнейшего роста и переходе на архитектуру ARM :)
  12. Мнение хорошее. Компилятор делает хороший код, но иногда надо ему "помогать", писать исходник разбиваая сложные расчеты на несколько простых, явно перобразовывать типы (особенно char), учитывать, что AVR восьмиразрядный и лишние операции ненужны(по умолчанию int 16 бит). Причуды тоже есть, например иногда два ret в конце функции ставит... Но это компенсируется большим количеством всевозможных чисто GNUшных фич, морем всевозможных утилит, библиотек и хорошей документацией на все это.
  13. При включении сейчас появляется в правом нижнем углу "USB Device Not Recognized". И в менеджере устройств появляется Unknown Device. <{POST_SNAPBACK}> Эти сообщения скорее всего говорят о том, что устройство подключено к порту, но не отвечает на запросы или отвечает криво(на этом не одну собаку скущал :)). Как правило, это связано с неправильной инициализацией самой USBN, кривым описанием дескрипторов или софтом. На кривоту дескрипторов нарывался при переходе на другой компилер, он структуры с описанием config, interface и endpoint дескрипторов расположил не в заданном порядке, а наоборот. Итог те же сообщения винды. Запрос конфигурации проходит в два этапа: 1) запрос собственно config дескриптора(в нем прописана помимо его собственного размена размер всей конфигурации в байтах складывающийся из: размер config_desc + размер interface_desc * количество интерфейсов + размер всех endpoint_desc для всех интерфейсов ). 2) запрос всей конфигурации. Он отличается от первого только тем, что в запросе от хоста передается размер всей конфигерации, а не размер только config_desc. Дескрипторы должны передаваться строго иерархически: config_desc interface_desc_1 endpoint_desc_1_1 ... endpoint_desc_1_N interface_desc_2 endpoint_desc_2_1 ... endpoint_desc_2_N ... Если это нарушить, то ничего работать небудет. На это надо обратить особое внимание при смене компилятора. Проверьте: 1. наличие частоты на 28 ноге. На схеме нет резистора на 1МОм между 26 и 27 ногами, у меня на некоторых кристаллах незапускался генератор. Если нет осциллографа можно прочитать из USBNки RID регистр, если в младших 4х разрядах не 2(3) то генератор не работает. 2. Если тактовая частота меги128 > 12МГц то работать скорее всего не будет, даже если поставить все такты ожидания на шину. У меня на меге стабильно работает при 2 тактах ожидания на частоте 11.0592МГц. Выше 12МГц нельзя !!!(см доку на USBN и мегу128) у USBN очень медленная шина!!! Можно понизить тактовую частоту меги без перепаивания кварца записав в регистр XDIV 0xff и поделив этим частоту кварца на 2. 3. генерит ли USBN прерывания и ловит ли их mega128. 4. Правильность описания и передачи device_desc. 5. Правильность формированиия PIDов 6. Правильность описания и вызачи конфигурации А самое лутшее, если у Вас есть rs232 выведите на терминалку все запросы приходящие от хоста и ваши ответы на них. Сразу будет понятно на каком этапе все затытается. Инициализирую так("лишнее" закоментировал): unsigned char initUSBN9604(void) { unsigned short i; /* give a soft reset, then set ints to push pull, active hi or lo */ putUSBN(_MCNTRL,SRST); /* Wait end of reset */ while(getUSBN(_MCNTRL) & SRST); putUSBN(_MCNTRL, VGE+INT_L_P); i = 0x4000; while(i--); /* checking RID */ if ((getUSBN(_RID) & 0x0f) != 0x02) return 0xff; /* initialize the clock generator set clock freq 24MHz */ putUSBN(_CCONF, clk24); /* set default address, enable EP0 only */ putUSBN(_FAR,AD_EN + 0x00); putUSBN(_EPC0, 0x00); /* set up interrupt masks */ putUSBN(_NAKMSK,NAK_O0); /* NAK evnts */ // putUSBN(_NAKMSK,NAK_O0+NAK_I2); /* NAK evnts */ putUSBN(_TXMSK, TXFIFO0+TXFIFO1+TXFIFO2+TXFIFO3); /*TX events*/ putUSBN(_RXMSK, RXFIFO0+RXFIFO1+RXFIFO2+RXFIFO3); /*RX events*/ putUSBN(_ALTMSK, RESET_A); /*ALT evnts*/ putUSBN(_MAMSK, (INTR_E + RX_EV + NAK + TX_EV + ALT)); /*enable the receiver and go operational ************************/ FLUSHTX0; /* flush TX0 and disable */ putUSBN(_RXC0,RX_EN); /* enable the receiver */ putUSBN(_NFSR,OPR_ST); /* go operational */ putUSBN(_MCNTRL,VGE+INT_L_P+NAT); /* set NODE ATTACH */ getUSBN(_ALTEV); return 0; }
  14. А там под LPC и ATMELовские кристаллы есть startup код?