Jump to content

    

AlexeyT

Участник
  • Content Count

    45
  • Joined

  • Last visited

Community Reputation

0 Обычный

About AlexeyT

  • Rank
    Участник
  1. Ну у Уоррена есть примеры сверхбыстрого вычисления sqrt для float. А на сколько быстрее? Сам пока оценить не могу, нет ни компилятора, чтобы ассемблерный листинг посмотреть, ни само собой отладочной платы. Может кто-нибудь дать оценку?
  2. Всем доброго дня! Есть вопрос: какие операции с плавающей точкой выполняются быстрее - умножение или деление? То есть, как эффективней считать нормировку на ядре Arm: double a; double b, c, d;//значения присваиваются в ходе выполнения программы a = sqrt(b*b + c*c + d*d); b /= a; c /= a; d /= a; Или: double a; double b, c, d;//значения присваиваются в ходе выполнения программы a = 1./sqrt(b*b + c*c + d*d); b *= a; c *= a; d *= a; Ядрa: Cortex-M1 и Cortex-M4F (что не особо важно, т.к. расчеты должны быть в формате double и плавающая запятая в Cortex-M4F не поможет) Спасибо
  3. Вот страница 301 (описание с сайта Миландра) и тут четко сказано, чему равна предельная частота UART. Можно ткнуть меня носом в место, где написано про "UART до 9 Мбит/сек"?
  4. Мы используем Миландровский 1986ВЕ1Т с тактовой 144 МГц. На такой частоте по Вашей оценке можно реализовать программный контроллер RS-485 со скоростью 2 Мбит/с?
  5. Спасибо за ответы, только у Миландра - это приемопередатчики, а нужен бы специализированный контроллер. Почему не можем использовать UART - потому что скорости не хватает - 921600 бод, а нам надо около 2 Мбит (RS-485 с такими скоростями позволяет работать)
  6. Всем привет! Нет ли у кого-нибудь информации по отечественным ARM-процесорам с встроенным контроллером RS-485? Может быть, кто о разработках таких знает? Может отдельная отечественная микросхема существует? Сразу отвечаю, что Гугл не помог
  7. Никакого секрета. Используем свой камень 1914ВА018 (http://mvc-nn.ru/продукция/микропроцессоры-и-микроконтроллеры/), очень стойкий ко всякой гадости (проверено испытаниями). Еще раз спасибо всем за ответы
  8. Есть 4 кБ ПЗУ с загрузчиком, зашитым на заводе (намертво, не Flash). Пользователю оно доступно только на чтение. Процессор стартует из него. Для пользователя есть 128 кБ ОЗУ под инструкции и 64 кБ ОЗУ под данные. Пользовательская программа может появиться в ОЗУ двумя способами: через JTAG или в результате работы заводского загрузчика. После чего управление передается на нее способом, описанным в первом посте, т.е. без сброса. Именно потому, что раньше проблем не было, ожидал - это способ, используемый заводским загрузчиком. "Магические процедуры" - типа __main, которая вызывается в векторе RESET. Собственно, и вопрос - в чем отличие? NVIC_SystemReset() - это таки "сброс" или "Передача управления в начало программы"? Периферия - блоки на шинах AHB/APB? Или все-таки регистры SCB? Мысль с WDT проработаю, спасибо.
  9. Уважаемые коллеги, помогите разобраться: Есть процессор на базе Cortex-M4, с FPU. У него есть встроенный загрузчик, но нет ПЗУ - только ОЗУ. Есть подключенные к нему внешняя флэш-память и программатор JTAG. Есть тестовая прошивка - настройка тактовой частоты, СОМ-порта и пока всё, дальше бесконечный цикл while(1) {}. Раньше было больше, но при уменьшении до нынешнего варианта косяк не исчез. Принципиальный момент - NVIC в тестовой прошивке не настраивается, обработчики исключений не переопределены. Последовательность работы: При подаче питания процессор начинает исполнять код заводского загрузчика, анализирует линии задания режима загрузки и переходит в режим исполнения программы из внешней флэш-памяти. Она успешно исполняется, используя прерывания - одно от периферийного блока СнК (контроллер МКИО) и одно внешнее. После чего в какой-то момент надо передать управление другой программе. Имитирую передачу управления. Для этого я выполняю останов (команда "h") процессора через J-Link Commander. А вот дальше есть два варианта развития событий: 1) не_выполняя_сброса, заливаю в ОЗУ инструкций образ тестовой прошивки, пишу во VTOR новый адрес таблицы, указываю новую вершину стека (первое слово прошивки), пишу в PC адрес вектора сброса (второе слово прошивки) и запускаю (команда "g"). После чего снова останавливаю ядро и вижу, что упал в исключение NMI. 2) выполняю сброс (команда "R"), и выполняю те же действия, что и ранее, над той же тестовой прошивкой. После чего останавливаю ядро и вижу, что что ядро спокойно остановлено (NoException). В чем может быть принципиальное отличие этих режимов? Какие регистры SCB нужно сбросить в начале п.1, чтобы состояние стало близким к идеальному, т.е. после Reset? Чем сброс через JTAG отличается от сброса через NVIC_SystemReset() с точки зрения системных процедур, выполняемых перед main?
  10. Всем спасибо! Пойдем чуть дальше - действительно есть возможность доработать аналоговую часть, перенеся сигнал с полосой в 20 МГц на несущую в 15 МГц, например. Дальше - 14-битный АЦП с тактовой 50-60 МГц. При таком раскладе можно быть уверенным, что TigerSharck с тактовой 450 сдюжит?
  11. Есть ламерский вопрос: Может ли сигнальный процессор TigerSharck справиться с такой задачей: У нас с 14-битного АЦП с частотой 200 МГц поступают оцифрованные отсчеты сигнала (несущая 70 МГц, полоса - 20 МГц). Задача - сбросить спектр сигнала в квадратуру, т.е. разделить его на две ветки, умножить на sin(2*pi*70e+6*t) и cos(2*pi*70e+6*t) соответственно, пропустить результаты умножения через цифровые ФНЧ полосой 10 МГц, получить I/Q компоненты, снизить частоту дискретизации. Дальше с полученными I/Q компонентами делается стандартная обработка. Сейчас мы эту обработку делаем на Virtex5, есть вопрос, может ли с этим справиться TigerSharck с тактовой 450 МГц (конкретно 1967ВЦ2Ф http://milandr.ru/index.php?mact=Products,...t01returnid=68) Понимаю, что вопрос ламерский и заранее благодарю всех желающих посоветовать пользоваться поиском форума, гуглом, чтением книг))) С подобными процессорами дела никогда не имели, а принципиальный ответ заказчику надо дать быстро. Спасибо
  12. Есть ламерский вопрос: Может ли сигнальный процессор TigerSharck справиться с такой задачей: У нас с 14-битного АЦП с частотой 200 МГц поступают оцифрованные отсчеты сигнала (несущая 70 МГц, полоса - 20 МГц). Задача - сбросить спектр сигнала в квадратуру, т.е. разделить его на две ветки, умножить на sin(2*pi*70e+6*t) и cos(2*pi*70e+6*t) соответственно, пропустить результаты умножения через цифровые ФНЧ полосой 10 МГц, получить I/Q компоненты, снизить частоту дискретизации. Дальше с полученными I/Q компонентами делается стандартная обработка. Сейчас мы эту обработку делаем на Virtex5, есть вопрос, может ли с этим справиться TigerSharck с тактовой 450 МГц (конкретно 1967ВЦ2Ф http://milandr.ru/index.php?mact=Products,...t01returnid=68) Понимаю, что вопрос ламерский и заранее благодарю всех желающих посоветовать пользоваться поиском форума, гуглом, чтением книг))) С подобными процессорами дела никогда не имели, а принципиальный ответ заказчику надо дать быстро. Спасибо Update: перенес тему в раздел "Вопросы новичка"
  13. Само собой, указателю tst присваивается адрес массива test_buff[2]. При этом значение int-переменной я получаю, обратившись к *tst. В каком именно месте происходит зависание, сказать не могу, процессор - 1986ВЕ1Т, там с дебагом туго. Вот полный исходник тестового кода, на котором все виснет: unsigned char test_buff[20] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20}; unsigned char *tst_point = &test_buff[0]; unsigned int *tst; unsigned int temp; tst = (unsigned int *)(tst_point + 2*sizeof(unsigned char)); //должны получить 0x06050403 = 100992003 temp = *tst; printf("%d", temp);
  14. ???? 1) Мне нужна int-переменная, состоящая из test_buff[2]...test_buff[5]. 2) test_buff[0]<<24 даст все нули, т.к. имеет 8 бит. 3) При чем тут арифметическое сложение, вообще непонятно.
  15. Задача такая - есть массив test_buff, из подряд идущих 4-х элементов которого нужно сформировать переменную unsigned int. unsigned char test_buff[20] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20}; unsigned char *tst_point = &test_buff[0]; unsigned int *tst; tst = (unsigned int *)(tst_point + 2*sizeof(unsigned char)); //должны получить 0x06050403 = 100992003 Т.е. в *tst пытаюсь записать unsigned int, состоящий из байтов массива с 3-го по 6-й. При исполнении этого кода на ARM-процессоре (ядро Cortex-M1) происходит зависание ядра (когда обращаюсь к адресу, некратному 4 байтам). При исполнении этого же кода на ПК - все ок, *tst = 100992003, как и должно быть. Компилятор Keil. Есть идеи, как решить задачу?