Vitaliy_ARM
-
Постов
508 -
Зарегистрирован
-
Посещение
Сообщения, опубликованные Vitaliy_ARM
-
-
А вам необходимы все коэффициенты одновременно (т.е. будете 4 канала обрабатывать), или они будут переключаться во время работы? Если второй вариант - нет смысла разбивать CIC на части.
Второй вариант. Т.е. если я рассчитаю для CIC с R = 512 коэффициенты компенсирующего FIR фильтра, то и на всех остальных R это будет тот же фильтр?
-
Доброе время суток.
Возникла необходимость сделать прореживающий фильтр с коэффициентами прореживания R = 512, 1024, 2048, 4096 на базе CIC + компенсирующий FIR. У альтеры в апноуте (AN 455) описан алгоритм расчета коэффициентов FIR-а для компенсации "односкоростного" CIC. Вопрос, как это применить для многоскоростного фильтра? Правильно ли будет разбить CIC на две части, первая допустим с коэффициентами прореживания 4,8,16,32, вторая с прореживанием на 128, и рассчитать компенсирующий FIR для второго CIC?
-
Совсем не понятно что вы хотите получить!
Вам надо куда-то в сеть звук передавать? Таких мостов не встречал. А вы думаете без MCU сможете подключиться к гарнитуре? Я бы поставил блютуз модуль из него звук в контроллер через I2S и UART от модуля тоже в контроллер. А от контроллера данные в WiFi. Не знаю какой там интерфейс не приходилось сталкиваться.
Хочу получить аналог компьютерной гарнитуры с микрофоном, только беспроводной и на базе блютузной гарнитуры. Звук надо как передавать так и принимать на блютузную гарнитуру.
-
Стоит задача подключения блютузной гарнитуры в полном дуплексе с устройством.
Такой вопрос, есть ли микросхемы, позволяющие сходу реализовать такой канал, возможно I2s-WiFi мост или что-то наподобное?
Гугление в интернете результатов особо не дало
-
Каким образом он подойдет, если длина передачи не равна 4-м?
Правильный ответ уже озвучили - BSY, и я очень сильно сомневаюсь в его неадекватном поведении. Хотя утверждать не могу, конечно.
BSY действительно у меня такое было поведение. На всякий случай сегодня/завтра еще раз проверю. Про RXRIS неправильно понял. Не подходит он.
-
По прерываниям RXIM/RTIM или поллингом.
Мне нужен поллинг. Судя по даташиту, подойдет бит RXRIS в регистре статуса прерываний.
В кортексе какой-то особый SSP? SSPxSR::BSY. У меня SSP работает на CCLK/2, быстрее поллить регистр, чем использовать IRQ+OS.У меня после поллинга этого бита поднимался CS. Тактовая Clk/4 = 24МГц. Так вот CS поднимался где-то в середине 16-битного пакета при передаче. OS-ов нет.
-
Еще не заметил в кортексе такой штуки. Как узнать, что только что закончилась транзакция по SSP (передача)?
(нужно для программной эмуляции сигнала выбора кристалла).
-
Интересно сравнение Mico32 с CORTEX-M3. Может кто-то уже проводил?
-
Вчера заиспользовал этот камень вместо LPC2364. Впервые впечатления - отличные.
Переходить на его оказалось не так уж сложно :) , а точнее просто. Порадовало,
что изернет MAC практически такой же. Надо будет потестировать на производительность.
Удивило потребление, с LPC2364 (+ остальные микросхемы) 72МГц плата потребляла 470мА.
C LPC1766 на 100МГц на 70мА меньше :05: , если китайский блок питания не врет.
-
Для avr-gcc так:
uint8_t foo __attribute__((section(".noinit")));
Похоже , что эта конструкция в ARM GCC задается так:
int i __attribute__ ((section("nocommon")));
Так не инициализируются обычные переменные.
Но у меня структура уже сидит в своей секции и инициализируется нулями. :01:
-
Очень интересные цифры, на вход I2SRX_CLK можно подавать клок до 50 МГц - это получается как у 400МГц Шарка .
Интересные. А работает ли с ним ДМА тоже интересно? А то если нет, то толку от этого маловато будет.
Почему то так и не смог ДМА запустить с этим интерфейсом на LPC2364.
-
Для avr-gcc так:
uint8_t foo __attribute__((section(".noinit")));
Ближе, но не то.
В общем структура уже сидит в секции батареечной памяти. В другую пихать нельзя.
Понятно. Тогда вам требуется изучить скрипты линкера. Воспользуйтесь поиском по форуму. Неоднократно обсуждалось.Наверное, вопрос нужно задать так, потому что, нужный мне ответ утонул, найти не могу:
Как в скрипте линкера указать, что именно эта секция не должна инициализироваться?
-
xp2-17 (grade -5)
66 (33x2)
по синтезу (STA) до 90, на 99 не лезло - не стал упорствовать
Присматриваюсь именно на это семейство (очень хорошо, что есть защита прошивки), чтобы собрать софтовый процессор с гигабитным изернетом для
прокачки данных по UDP со скоростями до 50Мбит. С такими частотами, боюсь, этого не получить.
-
int i;
?
Для каких целей? Сами её хотите инициализировать?
typedef struct Abcd
{
int a;
int b;
int c;
}XYZ;
в коде:
XYZ str; <- инициализируется нулями.
Цель простая, в батаеечной памяти лежат данные, которые нельзя затрать прошивкой при отладке.
-
Итог такой: про 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_)?
-
для платки на Латтисе (не поддерживается в готовых платформах) собрал и запустил
все предельно просто и вообще собирается на "ура" (для Lattice), но генератор выдает HDL код, то есть можно прикрутить к АЗИКу или какой-то ПЛИС (я правда такой не знаю), где своего софт-коре нету
Какая ПЛИС? Какая реально частота ядра процессора получилась?
-
Какая-то ерудна с линкером. Вот не прошло и пол года: 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, который был сделан мной для сравнения).
Попытался подключить вторую версию либ, код примерно такой же.
Вопрос, можно ли где-то прописать, чтобы компилятор вкомпиливал либы, только те, которые используются проектом?
-
Наверное неправильно написан стартап-код, который и занимается инициализацией (как кариант, инициализация просто забыта, и эта секция просто остается неинициализированной).
Эти константы находятся во флешь.
У меня проблема несколько в другом. Мой код отлично работает у службы поддержки Code-Red. А у меня тупо не зашиваются эти константы в процессор.
Уже несколько дней разбираемся в чем может быть дело. :unsure:
-
Джитер так же от части подфильтровывается самой петлей ФАПЧ KSZ-та.
По поводу ppm. Генератор на 50ppm точно работает нормально. Проверял в долговременной эксплуатации :)
Однако в серии стоят все равно 25ppm, так как по цене примерно одинаковые.
А кто-нибудь испытывал проблемы отказа работы изернета при плохом джитере опорного генератора, проводил эксперименты?
По моему стабильности и величины джитера ФАПЧ процессора должно хватить для нормальной работы. Если есть макетка, проще попробовать выпаять генератор и сунуть туда тактовую c I2s. Поэкспериментировать, если уж устройство должно быть очень дешевое. Это стоит того, чтобы в проекте выбросить кварцевый генератор и съэкономить 1.5 - 2$
-
После разговора со службой поддержики. И после того как я выслал свой проект к ним.
Получил информацию, что мой проект у них компилируется и зашивается нормально.
После разбора в чем может быть дело, оказалось что просто не зашиваются нужные регионы с константами в процессор.
Разбираемся дальше, почему.
-
И проверяем, что имеем +-50 ppm...
Удачи.
Даже нормальный кварц не спасет?
-
Выпустили малобюджетку для Nuvoton (они переименовали процессор W90P950 в NUC950A) ...
Какие демо-проекты к ней прилагаются, есть ли драйвера под изернет и лсд для линукса?
-
Вы конечно извините, но то, что вы показали и исходный ваш вопрос "Можно ли как-нибудь создать один регион памяти из двух кусков" имеют мало общего. Ибо вопрос подразумевает, что задаются два региона и одно описание выходной секции, а линкер впихивает сколько влезет в первый регион и остаток во второй. Вам же нужно было разместить секцию по конкретному адресу, а это совсем другой вопрос.
По поводу мусора - надо смотреть листинг и .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
Как можно листинг посмотреть?
-
Самое дешевое решение:
LPC2364 + KSZ8041 :rolleyes:
Делаем тактовую процессору = 50МГц.
Запускаем I2s, чтобы клок выдавал 50МГц. И заводим этот клок на KSZ8041.
Интерфейс RMII.
Удачи.
Multirate decimation filter
в Алгоритмы ЦОС (DSP)
Опубликовано · Пожаловаться
Меня интересует максимальная полоса на выходе, т.е. близкая к Fs/2. Т.е. может имеет смысл разбить цик на две части? Чтобы влияние первого ачх было как можно меньше
Я не силен пока в цифровой обработке сигналов, может подскажите ссылку на статью или информацию, что с чем связано и как это делать в матлабе?
Почему? Фирмы типа альтеры рекомендуют в дециматорах ставить после, в интерполяторах до. Вы имеете ввиду потерю динамического диапазона на краях АЧХ Цика?