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

Vitaliy_ARM

Свой
  • Постов

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

  • Посещение

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


  1. нет, там фильтр будет другой, но в интересующей вас полосе разность частотных характеристик будет ~0.005Дб если вас это устроит то этим можно пренебречь %)

    Меня интересует максимальная полоса на выходе, т.е. близкая к Fs/2. Т.е. может имеет смысл разбить цик на две части? Чтобы влияние первого ачх было как можно меньше

     

    ЗЫ. Кстати считается такой фильтр элементарно в любом каде (Matlab/Matcad/Mapple) зная АЧХ цика %)

    Я не силен пока в цифровой обработке сигналов, может подскажите ссылку на статью или информацию, что с чем связано и как это делать в матлабе?

    ЗЗЫ. Думаю очевидно что фильтр должен будет стоять ДО цика.

    Почему? Фирмы типа альтеры рекомендуют в дециматорах ставить после, в интерполяторах до. Вы имеете ввиду потерю динамического диапазона на краях АЧХ Цика?

  2. А вам необходимы все коэффициенты одновременно (т.е. будете 4 канала обрабатывать), или они будут переключаться во время работы? Если второй вариант - нет смысла разбивать CIC на части.

     

    Второй вариант. Т.е. если я рассчитаю для CIC с R = 512 коэффициенты компенсирующего FIR фильтра, то и на всех остальных R это будет тот же фильтр?

  3. Доброе время суток.

     

    Возникла необходимость сделать прореживающий фильтр с коэффициентами прореживания R = 512, 1024, 2048, 4096 на базе CIC + компенсирующий FIR. У альтеры в апноуте (AN 455) описан алгоритм расчета коэффициентов FIR-а для компенсации "односкоростного" CIC. Вопрос, как это применить для многоскоростного фильтра? Правильно ли будет разбить CIC на две части, первая допустим с коэффициентами прореживания 4,8,16,32, вторая с прореживанием на 128, и рассчитать компенсирующий FIR для второго CIC?

  4. Совсем не понятно что вы хотите получить!

    Вам надо куда-то в сеть звук передавать? Таких мостов не встречал. А вы думаете без MCU сможете подключиться к гарнитуре? Я бы поставил блютуз модуль из него звук в контроллер через I2S и UART от модуля тоже в контроллер. А от контроллера данные в WiFi. Не знаю какой там интерфейс не приходилось сталкиваться.

     

    Хочу получить аналог компьютерной гарнитуры с микрофоном, только беспроводной и на базе блютузной гарнитуры. Звук надо как передавать так и принимать на блютузную гарнитуру.

  5. Стоит задача подключения блютузной гарнитуры в полном дуплексе с устройством.

    Такой вопрос, есть ли микросхемы, позволяющие сходу реализовать такой канал, возможно I2s-WiFi мост или что-то наподобное?

    Гугление в интернете результатов особо не дало

  6. Каким образом он подойдет, если длина передачи не равна 4-м?

    Правильный ответ уже озвучили - BSY, и я очень сильно сомневаюсь в его неадекватном поведении. Хотя утверждать не могу, конечно.

     

    BSY действительно у меня такое было поведение. На всякий случай сегодня/завтра еще раз проверю. Про RXRIS неправильно понял. Не подходит он.

  7. По прерываниям RXIM/RTIM или поллингом.

     

    Мне нужен поллинг. Судя по даташиту, подойдет бит RXRIS в регистре статуса прерываний.

     

    В кортексе какой-то особый SSP? SSPxSR::BSY. У меня SSP работает на CCLK/2, быстрее поллить регистр, чем использовать IRQ+OS.

     

    У меня после поллинга этого бита поднимался CS. Тактовая Clk/4 = 24МГц. Так вот CS поднимался где-то в середине 16-битного пакета при передаче. OS-ов нет.

    post-29246-1255433558_thumb.jpg

  8. Вчера заиспользовал этот камень вместо LPC2364. Впервые впечатления - отличные.

    Переходить на его оказалось не так уж сложно :) , а точнее просто. Порадовало,

    что изернет MAC практически такой же. Надо будет потестировать на производительность.

    Удивило потребление, с LPC2364 (+ остальные микросхемы) 72МГц плата потребляла 470мА.

    C LPC1766 на 100МГц на 70мА меньше :05: , если китайский блок питания не врет.

  9. Для avr-gcc так:

    uint8_t foo __attribute__((section(".noinit")));

     

    Похоже , что эта конструкция в ARM GCC задается так:

    int i  __attribute__ ((section("nocommon")));

    Так не инициализируются обычные переменные.

     

    Но у меня структура уже сидит в своей секции и инициализируется нулями. :01:

  10. Очень интересные цифры, на вход I2SRX_CLK можно подавать клок до 50 МГц - это получается как у 400МГц Шарка :biggrin: .

     

    Интересные. А работает ли с ним ДМА тоже интересно? А то если нет, то толку от этого маловато будет.

    Почему то так и не смог ДМА запустить с этим интерфейсом на LPC2364.

  11. Для avr-gcc так:

    uint8_t foo __attribute__((section(".noinit")));

    Ближе, но не то.

    В общем структура уже сидит в секции батареечной памяти. В другую пихать нельзя.

     

    Понятно. Тогда вам требуется изучить скрипты линкера. Воспользуйтесь поиском по форуму. Неоднократно обсуждалось.

     

    Наверное, вопрос нужно задать так, потому что, нужный мне ответ утонул, найти не могу:

     

    Как в скрипте линкера указать, что именно эта секция не должна инициализироваться?

  12. xp2-17 (grade -5)

    66 (33x2)

    по синтезу (STA) до 90, на 99 не лезло - не стал упорствовать

     

    Присматриваюсь именно на это семейство (очень хорошо, что есть защита прошивки), чтобы собрать софтовый процессор с гигабитным изернетом для

    прокачки данных по UDP со скоростями до 50Мбит. С такими частотами, боюсь, этого не получить.

  13. int i;

    ?

    Для каких целей? Сами её хотите инициализировать?

     

    typedef struct Abcd

    {

    int a;

    int b;

    int c;

    }XYZ;

     

    в коде:

     

    XYZ str; <- инициализируется нулями.

     

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

  14. Итог такой: про C и Cpp

     

    Newlib is a complete C/C++ library, including *every* function from the

    standard.

     

    For C applications, we have developed Redlib, which is a smaller library

    designed for embedded applications, an is significantly smaller than

    Newlib. Unfortunately, we have developed it for C and not C++ - very,

    very few customers use C++ in an embedded environment.

     

    C++ сразу съедает 20кБ кода, размещая туда свои либы.

    В общем среда чуть сложнее, чем яр. И гораздо проще, нежели самопальное

    подключение связки GCC+Eclipse+GDB с джитагами на FTDI2232.

    Пользоваться можно. Еще удивило отсутствие мейк файлов. Среда

    сама включает все файлы, которые она видит в дереве проекта при компиляции. :)

     

    Появился жизненно важный вопрос по компилятору GCC.

    Как задать неинициализируемую переменную (не могу найти подходящего _attribute_)?

  15. для платки на Латтисе (не поддерживается в готовых платформах) собрал и запустил

    все предельно просто и вообще собирается на "ура" (для Lattice), но генератор выдает HDL код, то есть можно прикрутить к АЗИКу или какой-то ПЛИС (я правда такой не знаю), где своего софт-коре нету

     

    Какая ПЛИС? Какая реально частота ядра процессора получилась?

  16. Какая-то ерудна с линкером. Вот не прошло и пол года: http://electronix.ru/forum/lofiversion/index.php/t58320.html

    а вектора стали называться по другому :07:

    В общем линкер как линкер. Все нормально. Геммор был со средой разработки.

    Мне на диске прислали версию среды 2.0.10. Я ее проабдейтил через нет до 2.0.16.

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

    они мне прислали ссылку на последнюю версию, не требующую абдейтов: ftp://code-red-tech.com/RedSuite2/red_suite_2.exe

    Итог такой, что среда, видимо, впоймала глюка при абдейте.

    Скачал и все стало сразу шеколадно на 90% :08: . Нерабочий проект стал сразу рабочим.

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

    В коде так:

    const BYTE OurIpAddr[4] __attribute__ ((section(".ipaddr"))) = {192,168,1,4};

    В скрипте линкера так:

    .ipaddr :
    {
    . = ALIGN(4);
    KEEP(*(.ipaddr))    
    } > IP_MEM

     

    Однако, как оказалось, еще рано радоваться. У меня все проекты написаны на C++.

    Создаю шаблон проекта на C++ (в среде заложена такая возможность). И классы там не компилятся!!!

    Пишу в службу поддержки, а они и говорят:

    Hi,
    
    You need to link with a different library - use Newlib (nohost)or Newlib 
    (semihost). See:
    http://support.code-red-tech.com/CodeRedWiki/CLibrary
    
    Also, there is a mistake in the startup code for C++. Please remove the 
    lines:
             LDR   r3, .def__libc_init_array
             CMP   r3, #0
             BEQ   .setup_main
    in .cppinit in cr_startup.s

     

    Действительно, поменял строчки, где эти библиотеки подключаются на GROUP(libgcc.a libc.a libcr_newlib_nohost.a) , в все сразу стало хорошо.

    Проект скомпилировался и на C++! Однако компилятор написал, что кода получилось 28кБ вместо примерно 10кБ :salmari: (столько занимает аналог проекта на языке C, который был сделан мной для сравнения).

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

    Вопрос, можно ли где-то прописать, чтобы компилятор вкомпиливал либы, только те, которые используются проектом?

  17. Наверное неправильно написан стартап-код, который и занимается инициализацией (как кариант, инициализация просто забыта, и эта секция просто остается неинициализированной).

    Эти константы находятся во флешь.

    У меня проблема несколько в другом. Мой код отлично работает у службы поддержки Code-Red. А у меня тупо не зашиваются эти константы в процессор.

    Уже несколько дней разбираемся в чем может быть дело. :unsure:

  18. Джитер так же от части подфильтровывается самой петлей ФАПЧ KSZ-та.

    По поводу ppm. Генератор на 50ppm точно работает нормально. Проверял в долговременной эксплуатации :)

    Однако в серии стоят все равно 25ppm, так как по цене примерно одинаковые.

    А кто-нибудь испытывал проблемы отказа работы изернета при плохом джитере опорного генератора, проводил эксперименты?

    По моему стабильности и величины джитера ФАПЧ процессора должно хватить для нормальной работы. Если есть макетка, проще попробовать выпаять генератор и сунуть туда тактовую c I2s. Поэкспериментировать, если уж устройство должно быть очень дешевое. Это стоит того, чтобы в проекте выбросить кварцевый генератор и съэкономить 1.5 - 2$

  19. После разговора со службой поддержики. И после того как я выслал свой проект к ним.

    Получил информацию, что мой проект у них компилируется и зашивается нормально.

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

    Разбираемся дальше, почему.

  20. Вы конечно извините, но то, что вы показали и исходный ваш вопрос "Можно ли как-нибудь создать один регион памяти из двух кусков" имеют мало общего. Ибо вопрос подразумевает, что задаются два региона и одно описание выходной секции, а линкер впихивает сколько влезет в первый регион и остаток во второй. Вам же нужно было разместить секцию по конкретному адресу, а это совсем другой вопрос.

    По поводу мусора - надо смотреть листинг и .map

     

    Как я понял, вектора прерываний и код должны сидеть в одной секции. У меня в проекте Iar, секции располагались следующим образом:

    - Вектора прерываний

    - CRP ключ

    - Основной код

    - MAC адрес

    - IP адрес

    В IAR каждая секция у меня сидела в своем регионе памяти. Между векторами и основным кодом сидела секция CRP. Но в GNU Linker вроде бы как нельзя разделять их по разным регионам. Поэтому я решил что можно выйти из этой ситуации, создав секцию .text из двух кусков (поэтому так и задал этот вопрос. :laughing:, про операцию = ADDR. не догадывался ). Один кусок расположить в свободной области между векторами и CRP, а второй после CRP. Однако так тут так тоже нельзя делать.

    А надо было выделить один регион памяти и напихать туда по очереди все секции, а адреса смещать при помощи операции .= ADDR.

    Собственно как тут и сделано:

        .text :
        {
        KEEP(*(.isr_vector));
        . = 0x000001FC;
            KEEP(*(.crp_key));
            *(.text*)
            *(.rodata*)
        } > CODE_MEM

     

    По поводу мусора - надо смотреть листинг и .map

    Про map смотреть сюда?:

    .MacIpMem       0x00003000     0x1004
    *(.macaddr)
    .macaddr       0x00003000        0x6 ./src/Emac.o
                    0x00003000                OurMacAddr

    Как можно листинг посмотреть?

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