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

Vitaliy_ARM

Свой
  • Постов

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

  • Посещение

Сообщения, опубликованные Vitaliy_ARM


  1. Конечно, народ и решает и стандартизирует, только сложность решения ни в какое сравнение с пукалкой на LPC1766 не идет. Да и для выхода на рабочий режим с "пропуски пакетов категорически запрещены" будет требоваться время, да то категорично так не выйдет - как часто slip допустимы? Минута, это одно, час другое, месяц - третье, никогда - это фантастика.

    http://www.lastmile.su/issue/2009/4/4

    Если Ethernet это чистая физика точка-точка, то тогда можно пробовать делать какую-нибудь синхронизацию прямо из Ethernet потока.

     

    Т.к. частота дискретизации устройства 100 кГц и 10 бит разрядность, т.е. получается 16 бит * 100 кГц = 1,6 Mbps, при Fast ethernet (100Mbps) эта задача теоретически реализуема. При уточнении тз, оказывается допустимым задержка на 2..3 буфера по 1024 байта. (p.s. не совсем понял что имелось в виду под словом slip).

     

    1. В предложенной вами ссылке рассматриваются протоколы синхронизации часов. Я так понимаю этим можно воспользоваться для синхронизации тактовых сигналов ацп и цап (реализовывать протокол в полном виде в этой задаче будет бессмысленно), т.е., скажем, делаем счетчик отсчетов на обеих сторонах, и если, допустим, на цапе счетчик отличается, то мы пересчитываем предделитель тактовой частоты, чтобы скомпенсировать уход. Устройство, с которого предлагается цифровать сигнал - спец. микрофон, на другой стороне - громкоговоритель + возможно, осциллограф.

     

    2. Есть предложение способа синхронизации потока из изернета: на стороне цапа есть большой кольцевой буфер, скажем на 100 буферов, и две возможные частоты дискретизации цапа, одна больше чем у ацп, а другая меньше. Синхронизация происходит следующим образом. Буфер накаплвивает, скажем, половину пакетов и запускается таймер, по прерыванию которого подсчитывается количество буферов и на основе этого делается установка первой или второй частоты дискретизации цапа. Если буфер начинает переполняться, т.е. пакетов становится больше чем половина буфера, значит цапу устанавливается бОльшая частота дискретизации, если буферу не хватает пакетов, то цапу ставим меньшую чд. Таким образом частота дискретизации цапа качается постоянно туда/сюда (искажения и прочее конечно будут). Минус этой системы: чем больше буферов - тем лучше, можно поставить чд1 и чд2 близкие к ацп. Но ресурсы памяти у MCU ограничены.

     

    Собственно вот пока пришли в голову две идеи. Если что понял не так или есть что лучше - поправьте.

  2. Необходимо сделать такое устроство. На одной стороне стоит контроллер LPC1766, ADC которого цифрует 10 бит данных при 100 кГц тактовой частоте, дальше этот процессор должен отфильтровать данные FIR-ом и послать буфер 1024 байта в Ethernet, второй процессор принимает эти данные и пропускает через ЦАП. Проблема этой задачи такова:

     

    Как правильно сделать синхронизацию АЦП и ЦАПа в такой связке? Пропуски пакетов категорически запрещены. Задержка должна быть размером в один буфер. Может кто-то решал подобную задачу?

  3. У меня тоже работает в режиме Test Mode. Подписывать драйвера той утилитой еще не пробовал. Видимо майкрософт решили содрать еще немного денег с производителей. Сколько стоит получить подпись у майкрософт для своего устройства?

     

    P.S.

    Может тогда уже лучше использовать FT2232H?: http://www.ftdichip.com/Drivers/D2XX.htm

  4. Проблема с установкой драйверов под Windows7.

     

    Скачал новый пакет разработчика с новыми драйверами: http://www.cypress.com/?rID=34870

    Подправил, как описано в мануале, VID и PID.

    Собственно проблема в том, что нет цифровой подписи у драйвера. От сюда не могу поставить драйвер для CY7C68013A. Система сначала говорит, что устанавливаемый драйвер не имеет сертификата, все равно продолжить? Жму да. После установки выдает сообщение, прикрепленное к посту.

     

    Пробовал делать и такой маневр:

    Для отключения проверки цифровой подписи при установке драйверов я использую:
    gpedit.msc=>Конфигурация_пользователя=>Администрат ивные_шаблоны=>Система=>Установка_драйвера=>Цифров ая_подпись_драйверов_устройств=>Включен=>> Пропустить .

    Результат тот же.

     

    Так же отключал UAC при помощи утилиты UAC off.

     

    Что еще можно сделать? Возможно ли сделать цифровую подпись своими силами?

    post-29246-1268768218_thumb.jpg

  5. Без проблем. Описывается даже в родных AN, да и на форуме неоднократно спрашивали.

     

    В родном даташите есть подключение через MII интерфейс. Этого нет.

    Будем искать.

     

    Moderator:

    Тема перенесена, как не имеющая отношения к ARM-ам.

    Понял

  6. Есть устройство с Ethernet (LPC2378 + KSZ8001), есть некоторый модуль на борту которого стоит KSZ8001 и выводы для подключения трансформатора.

     

    Вопрос:

    Каким образом можно их подключить без трансформатора (имеется ввиду по линиям Tx(+/-) и Rx(+/-)), есть ли схема и можно ли это делать?

  7. Считывается слово из адреса Reset Handler (0x04), и загружается в PC.

     

    Так и сделал:

    // загружаем в указатель значение, находящееся по адресу FIRST_PAGE_ADDR + 0x04
    void (*App)() =  (void(*)())(*((DWORD*)(FIRST_PAGE_ADDR + 0x04)));
    // запускаем приложение
    App();

     

    Все работает, спасибо!

  8. Что по какому адресу? После сброса Reset Handler находится по адресу 0x04.

    Забиваю адрес 0x04 в PC при отладке, указатель начинает бежать по векторам подряд и через некоторое время вылетает в аппаратный хендел. Если забить в него адрес __iar_program_start, то программа начинает работать. Может так нельзя делать? Или проблема собственно что резет находится в этот момент не по 0х04 адресу?

  9. Запись в даташите:

     

    Following a hardware reset, the Boot ROM is temporarily mapped to address 0. This is

    normally transparent to the user. However, if execution is halted immediately after reset by

    a debugger, it should correct the mapping for the user. See Section 33–6.

     

    В секции 33:

     

    Following chip reset, a portion of the Boot ROM is mapped to address 0 so that it will be
    automatically executed. The Boot ROM switches the map to point to Flash memory prior
    to user code being executed. In this way a user normally does not need to know that this
    re-mapping occurs.
    
    However, when a debugger halts CPU execution immediately following reset, the Boot
    ROM is still mapped to address 0 and can cause confusion. Ideally, the debugger should
    correct the mapping automatically in this case, so that a user does not need to deal with it.

  10. Для STM32 применяю так:

    Загрузчик находится 0х0800 0000

    Программа

    #define KERNEL_START_APP 0x08004000

    Обратите внимание что у кортекса в начале вектора прерывания находится указатель на стек

    а +4 начало программы

     

    Спасибо за код. Но для начала хочу понять весь механизм. Все знают что в иар по резету происходит переход в __iar_program_start .

    Я в прикладной программе нашел адрес этой подпрограммы. И в загрузчике сделал вызов именно по этому адресу, забив адрес в регистр PC. Прошивка заработала!

    Однако когда я забиваю в PC в прикладной программе начало таблицы векторов 0x10000 со смещением: 0x00000, 0x00002, 0x00004 и т.д. процессор улетает в хардваре еррор дефаулт хэндл. Т.е. ошибка состоит в том, что в вызове прикладной программы происходит переход "НЕ ТУДА".

     

    Вот кусок яровского стартапа:

            EXTERN  __iar_program_start
            PUBLIC  __vector_table
            PUBLIC  __vector_table_0x1c
    
            DATA
    __vector_table
            DCD     sfe(CSTACK)            ; Top of Stack
            DCD     __iar_program_start    ; Reset Handler
            DCD     NMI_Handler            ; NMI Handler
            DCD     HardFault_Handler         ; Hard Fault Handler
            DCD     MemManage_Handler         ; MPU Fault Handler
            DCD     BusFault_Handler          ; Bus Fault Handler
            DCD     UsageFault_Handler        ; Usage Fault Handler
    __vector_table_0x1c
            DCD     0                         ; Reserved
            DCD     0                         ; Reserved
            DCD     0                         ; Reserved
            DCD     0                         ; Reserved
            DCD     SVC_Handler            ; SVCall Handler
            DCD     DebugMon_Handler          ; Debug Monitor Handler
            DCD     0                         ; Reserved
            DCD     PendSV_Handler            ; PendSV Handler
            DCD     SysTick_Handler        ; SysTick Handler
            DCD     WDT_IRQHandler            ; Watchdog Handler
            DCD     TMR0_IRQHandler        ; TIMER0 Handler
            DCD     TMR1_IRQHandler        ; TIMER1 Handler
            DCD     TMR2_IRQHandler        ; TIMER2 Handler
            DCD     TMR3_IRQHandler        ; TIMER3 Handler
            DCD     UART0_IRQHandler          ; UART0 Handler
            DCD     UART1_IRQHandler          ; UART1 Handler
            DCD     UART2_IRQHandler          ; UART2 Handler
            DCD     UART3_IRQHandler          ; UART3 Handler
            DCD     PWM1_IRQHandler        ; PWM1 Handler
            DCD     I2C0_IRQHandler        ; I2C0 Handler
            DCD     I2C1_IRQHandler        ; I2C1 Handler
            DCD     I2C2_IRQHandler        ; I2C2 Handler
            DCD     SPI_IRQHandler            ; SPI Handler
            DCD     SSP0_IRQHandler        ; SSP0 Handler
            DCD     SSP1_IRQHandler        ; SSP1 Handler
            DCD     PLL0_IRQHandler        ; PLL0 Handler
            DCD     RTC_IRQHandler            ; RTC Handler
            DCD     EINT0_IRQHandler          ; EXT Interupt 0 Handler
            DCD     EINT1_IRQHandler          ; EXT Interupt 1 Handler
            DCD     EINT2_IRQHandler          ; EXT Interupt 2 Handler
            DCD     EINT3_IRQHandler          ; EXT Interupt 3 Handler
            DCD     ADC_IRQHandler            ; ADC Handler
            DCD     BOD_IRQHandler            ; BOD Handler
            DCD     USB_IRQHandler            ; USB Handler
            DCD     CAN_IRQHandler            ; CAN Handler
            DCD     GPDMA_IRQHandler          ; General Purpose DMA Handler
            DCD     I2S_IRQHandler            ; I2S Handler
            DCD     Ethernet_IRQHandler    ; Ethernet Handler
            DCD     RIT_IRQHandler            ; Repetitive Interrupt Timer Handler
            DCD     MotorControlPWM_IRQHandler; Motor Control PWM Handler
            DCD     QE_IRQHandler             ; Quadrature Encoder Handler
            DCD     PLL1_IRQHandler        ; PLL1 Handler

     

    Вопрос, на какой адрес прыгает процессор LPC1766 (и т.п.) после сброса?

  11. Правильные скриншоты:

    1 - дамп памяти в яре при отладке прикладной программы без загрузчика

    2 - бинарь, который генерит яр при компиляции прикладной программы

    3 - дамп памяти этой же прошивки, после загрузки ее загрузчиком

     

    Проблема осталась таже.

    post-29246-1264762790_thumb.jpg

    post-29246-1264762877_thumb.jpg

    post-29246-1264762995_thumb.jpg

  12. Младший бит адреса BLX выбирает режим работы процессора. В данном случае он должен быть равен "1", т.к. процессор может работать только в Thumb.

    Теперь понятно.

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

    Да, действительно. :smile3046:

    Спасибо.

     

    Рано обрадовался. Были неправильные скриншоты. После скринов будлодера я несколько изменил прошивку.

    Теперь сделал все заново. Прошики совпадают.

  13. А почему, собственно, 0x10000 + 0x01 должно быть равно 0x10002?

    :cranky: наверное никак.

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

     

    void execute_user_code(void)
    {
        void (*user_code_entry)(void);
        
        /* Change the Vector Table to the USER_FLASH_START 
        in case the user application uses interrupts */
        NVIC_SetVectorTable(NVIC_VectTab_FLASH, USER_FLASH_START);
    
          user_code_entry = (void (*)(void))((USER_FLASH_START)+1);
        user_code_entry();
    
    }

     

    А что может находиться по адресу 0x10000 + 0x01? На сколько мне известно при 16 битных инструкциях прыгать нужно на адреса, выровненные под 16 битное пространство (т.е. в последнем бите должен быть 0).

    LPC1700_USB_Bootloader.zip

  14. Был у меня загрузчик для LPC2378 и прочих.

    Теперь стала задача переписать его под LPC1766.

     

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

     

    Прикладная программа заливается вместе с векторами начиная с адреса 0x1 0000 (16-я страница). Т.е. в ней находятся сначала вектора, а потом все остальное.

     

    Код вызова программы:

     

    #define FIRST_PAGE_ADDR 0x10000
    #define NVIC_VectTab_FLASH           (0x00000000)
    
    // код вызова приложения
    
    volatile unsigned long    *p = (volatile unsigned long*)NVIC_VECT_TABLE;
    *p = NVIC_VectTab_FLASH | (USER_FLASH_START & 0x1FFFFF80);
    
    void (*App)() =  (void(*)())(FIRST_PAGE_ADDR + 1);
    App();            // уходим в прикладную программу

     

    Код вызова брал по аналогии из LPC1700 USB Bootloader.

     

    Сделал прикладную программу, которая настраивает порт светодиода на плате и зажигает его.

    Прикладная программа вызывается неправильно. В ассемблерном коде используется BLX на адрес, 10001, хотя должен был быть 10002. И яр отображает код совсем подругому.

    В приложенных файлах 001 и 002 показаны скриншоты яра при работе загрузчика и уходе в прикладную программу. На 003 - прикладная программа в отладочном режиме без загрузчика.

     

    Как правильно вызывать?

    post-29246-1264692754_thumb.jpg

    post-29246-1264692762_thumb.jpg

    post-29246-1264692769_thumb.jpg

  15. Постановка задачи кардинально отличается от первоначальной формулировки. Скорее всего потребуется переносить частоту 1-30 МГц в область низких частот и там уже заниматься фильтрацией.

     

    Не хватает ещё требований к полосовому фильтру: диапазон пропускаемых частот, неравномерность АЧХ в нём, диапазон задерживаемых частот, коэффициент подавления в нём.

    Да, надо сделать квадратурный приемник пачки радиоимпульсов (АМ) (в дальнейшем предполагается менять демодуляторы). Перенос на ПЧ. Остальное будет в DSP процессоре. На входе стоит NCO+аппаратные умножители, после них надо сделать прореживающий фильтр с перечислинными выше полосами, неравномерность ачх в полосе 0-450кГц не должна превышать 0,1%, подавление на частоте 500кГц и далее должно быть не хуже 80дБ. Под все остальные фильтры требования изменяются пропорционально полосе пропускания. На сколько мне известно, обычный фир с полосами пропускания меньшими 50..100 относительно частоты найквиста, потребляют больше ресурсов, чем CIC+FIR. Задача проредить полосу в 80/2 = 40МГц в полосу 0,5МГц. Нелинейность АЧХ не критична. Желательно залезть в 500..1000 Альтеровских ячеек с двумя фильтрами.

     

    Кстати а основная селекция у вас где будет делаться? просто есть красивый вариант поставить сначала переменный CIC, а потом уже фиксированный FIR на 128. В этом случае CIC можно вообще не корректировать. Подставил ваши параметры в выложенный маткадовский файл, на частоте найквиста после децимации такой цик будет вам заваливать полосу, в худшем случае на дикие 0.00065дБ для 3-х каскадов и 0.00102 дБ для 5ти каскадов %)

     

    Полученные IQ каналы будут подаваться на DSP процессор (причем это может подаваться как по проводному интерфейсу так и беспроводному, в общем имею то что имею, тз поставлено такое :unsure: ), в котором так же будет стоять квадратурный смеситель и FIR с переменной полосой пропускания (основная селекция на нем), после этого демодулятор сигналов.

     

    Забыл упомянуть. Фаза должна быть линейна.

  16. подцепить свое IP написаное на SV и синтезируемое в Synplify к микропроцессорной системе собраной в Альтиуме

    отлаживать (debuger, JTAG) софт (С++) на этой платформе, отлаживается некое хардварь-индепендент ядро, но внутрисхемная отладка очень приветствуется

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

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

    А так, конечно, кроссплатформенность это классная штука в наши дни.

  17. Сейчас окончательно определился с т.з.

    У меня 80Мгц ацп, надо принимать сигналы с полосой 500кГц в диапазоне частот 1-30МГц.

    При этом полоса должна переключаться: 500кГц, 250кГц, 125кГц, 62,5кГц, чтобы уменьшить трафик.

    Скажите чего еще не хватает?

    что сложного то ? логика здравого смысла + сделайте 4 разных цик фильтра и сравните. Перестройка частоты вообще делается элементарно, этот блок на виду у всех. Остается только сделать перестройку усиления фильтра, т.к. у циков он сильно зависит от коэфф. децимации.

    Т.е. вы предлагаете сделать несколько циков и включать только нужное количество для децимации. При этом надо ставить еще умножители для коррекции усиления?

     

    У меня родилась еще одна мысль, что если сделать один переменный цик + постоянный FIR. Только второму коэффициенты подгружать из вне. Получатеся, что не надо никаких умножителей дополнительных. Скорость переключаться будет один раз за сессию - очень редко. В этом случае нужно рассчитать 4 компенсирующих FIR. Что скажете?

  18. В догонку, загляните еще в эту тему. Там решается похожая задача с примером в матлабе.

    Успехов.

     

    К сожалению пока нет матлаба. Обязательно гляну при возможности.

     

    подумал на досуге о вашей проблеме.

     

    Варианта с нормальной производительностью/ресурсом вижу два

    1. 5 каскадов циков с 30/34 бита арифметикой, правда придеться "поесть" памяти.

    2. Каскадная децимация, сначала на 128 + FIR, потом уже хогенауэр. Арифметика будет "всего" 43 битная.

     

    Что из этого будет в итоге "весить" меньше решать вам %)

     

    ЗЫ. еще немаловажный вопрос время выхода фильтра на режим при перестройке полосы, помните что интегральные части циков надо сбрасывать.

    Тогда вопрос, каким способом делать переменное прореживание?

    Делаем прореживание в CICе и при этом используем один FIR, пренебрегая изменением АЧХ CICа?

     

    Почему нельзя пользоваться усечением разрядности CIC?

    p.s. приношу извинения за ламерские вопросы, не могу найти именно ответ на вопрос - как правильно сделать переменное прореживание в фильтре Хогенауэра.

  19. Сказать, что нужна полоса после прореживания, близкая к Fs/2, это значит - ничего не сказать. Надо знать, насколько именно близко? На 1% от Fs/2 или на 0.01%? От этого порядок требуемого фильтра будет меняться в сотни раз, если есть требование подавления "зеркальных" частот при децимации.

    В качестве аналогии могу привести такой пример: насколько сильно будут разгоняться протоны в Большом адронном коллайдере? Ответ - близко к скорости света. Так ведь это и ежу понятно, что близко, вопрос в том - насколько близко? На 1% от c или на 0.01%? Или ещё ближе? :) Энергия протонов при этом тоже будет меняться на порядки.

     

    Уточню. На частоте Найквиста должно быть подавление не хуже 70дБ. Порядок FIR = 110.

  20. Но полоса то вам нужна после децимации верно ? Теперь оцените на сколько вы делаете децимацию и какую часть вашей полосы портит CIC. Сложно делать заявления без опоры на цифры(считать лень), но по опыту начиная с коэфф. децимации 8 АЧХ различаются не более чем на 0.1Дб для 6ти каскадов CIC. Незнаю ваших требований к CIC фильтру, но если входная разрядность ~16, число каскадов больше 3-х, и делаете вы это на фпга то лучше вам НЕ делать фильтр хогенауэра. Для проца смотреть надо %)

    Разрядность 18бит, исполнение в FPGA. Полоса нужна после децимации, близкая к Fs/2, где Fs - частота дискретизации после прореживания. Неравномерность АЧХ должна быть как можно меньше, 0.05% устроит. Число каскадов цика можно выбирать от 3 до 8, чем меньше - тем лучше. Фильтр Хогенауэра лучший вариант при таких коэффициентах прореживания, важно, что занимает мало места.

    Вопрос тот же. Как правильно построить фильтр Хогенауэра с переменным коэффициентом прореживания?

    В атаче расчет RC фильтра с коррекцией АЧХ CIC фильтра, 13 маткад. Все комментарии на русском. Ничего сложного %)

    Спасибо за информацию.

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