PDA

Просмотр полной версии : переход с AVR на ARM



Genadi Zawidowski
18.07.2009, 13:56
Некоторое время назад столкнулся с микроконтроллерами на ядре ARM - и понял, что это то, что надо!
Не, конечно отсутствие моделей в DIP корпусах немного пугает, но при наличии переходника вполне "съедобно".
Далее - про процессор, с которым я игрался (Atmel AT91SAM7S64).
Итак - 32-х разрядный процессор, без разделения адресных пространств на код и данные, тактовая частота - под 50 МГц (простые команды выполняются за два такта). Питание - 3.3 вольта. В аналогичных условиях по питанию от ATmega можно только 8 МГц получить.
У упомянутой мною модели 64K ПЗУ и 16K ОЗУ - у других моделей в этом корпусе есть больше, у модели в 48-ногом корпусе (как у AD9951) - 32KB ОЗУ и 8KB ПЗУ.

Объём кода, полученного для ATMega и ARM компиляторами на основе GCC (WinAVR и YAGARTO соответственно) с точностью до 5% одинаковый.

Управляющая программа приемника (транссивера), обсуждаемого вот тут (http://forum.cqham.ru/viewtopic.php?t=1780 3), стала тратить на обсчёт очередного шага где-то в пять раз меньше времени (субъективно). Поскольку в этом применении на ATMega ничего из специфической периферии не использовалось - кроме контроллера прерываний и таймера - перенос "ножкодрыгательной" программы на новый процессор занял около полудня. Этому предшествовали два дня разбирательств с программатором и модфикация start-up кода из примеров. И, естественно, изучение инициализации периферии данной модели процессора. Ядро ARM оно, конечно, одинаковое - но периферию каждая из фирм-производителей делает свою.

Минимальный набор внешних элементов - кварц (без конденсаторов!), блокирующие конденсаторы, разъм программатора и четрые подтягивающих резистора. Программатор я использовал обычный LPT STK200.

Genadi Zawidowski
18.07.2009, 13:59
Решил поделиться опытом и картинкой с настройкам.

Сделав по одной из схем wiggler и получив надежную работу в компании с программой программатора H-JTAG (http://www.hjtag.com/), решил воспользоваться возможностями произвольного конфигурирования назначения выводов LPT порта и прикрутить адаптер STK200 (один из его клонов со слегка расширенной функциональностью - с добавленной линией передачи тактового сигнала на программируемый процессор через вывод 5 десятиконтактного разъёма.

Среди приаттаченных файлов скриншот с p-cad - решил такой вариант разводки делать на платах с AT91SAM7Sxxx для заливки прошивки. В общем-то мне большего от j-tag не надо, возможности отладки не проверял. Вид всех разъемов (10-ти и 20-ти контактных) - со стороны выводов.

Да, работоспособность этого варианта зависит от того, что держит H-JTAG на неупомянутой в конфигурации ножке - у STK200 сигнал D3 (вывод 5 на DB-25) единицей переводит выходы в третье состояние.

Надо бы предложить автору H-JTAG это вариант ввести в свою программу как предопределенный...

Genadi Zawidowski
18.07.2009, 14:02
Для примера - как я включил процессор (http://forum.cqham.ru/viewtopic.php?p=3405 20#340520)

Вид первого макета c процессором AT91SAM7S32 - в аттачменте.

khach
18.07.2009, 15:21
Genadi Zawidowski
У профи переход на АРМ произошел где то года полтора- два назад. GCC немного неудобен, поэтому пользуются или KEIL или IAR компиляторами. Для каждого компилятора есть большая библиотека примеров для каждого семейства АРМ. Кто-то любит AT91, кто то LPC2000 или STM32, некоторые свободно работают со всеми, используя условную компиляцию. JTAG можно использовать Вигглер, но давно скопирован и J-link.
А вот про ногодрыжество лучше забывать- набор переферии у современных АРМов огромен, аппаратные SPI-SSP-I2C-I2S-USART есть во всех сериях, а ногодрыжество сильно тормозит или иногда надо добавлять пустые такты.

Genadi Zawidowski
18.07.2009, 16:24
А вот про ногодрыжество лучше забывать- набор переферии у современных АРМов огромен, аппаратные SPI-SSP-I2C-I2S-USART есть во всех сериях, а ногодрыжество сильно тормозит или иногда надо добавлять пустые такты.
Интересно, как обойтись без "ногодрыжества" в случае упраления HD44780... а на данный момент именно этот стиль позволил бвстро стартовать с новым процессором.

Ничгего неудобного пока у gcc не заметил, дебаггером не пользуюсь.

У профи переход на АРМ произошел где то года полтора- два назад
Года четыре назад при слове ARM всё больше попадались какие-то монстры со внешней памятью - такого, чтобы "всё внутри чипа" не попалось - потому начал с атмегой работать. сейчас прошедбшее время с ней кажется зря потраченным... вернее - понимаю - раньше надо было поближе познакомиться с ними. Но - четыре года назад - у меня и емкостная трехточка работала не всегда...

khach
18.07.2009, 21:10
Интересно, как обойтись без "ногодрыжества" в случае упраления HD44780...

Ну например так как на схеме ниже. Хотя некоторые графические LCD от сотовиков садятся на последовательную шину АРМ напрямую. У мелких АРМов ножек всегда нехватает, поэтому приходиться извращаться. Я только хочу предупредить про специфическию особенность применнения АРМов для радиочастотной аппаратуры- у них внутри несколько синтезаторов тактовой частоты на ФАПЧ, довольно шумных. В результате, если плата неправильно спроектированна, есть много пораженных частот. Необходимо применять меры по фильтрованию питаний, сепараций сигналов управления ВЧ частью, правильной разводке печатки и экранированию. Знаю нескольких разработчиков, которые вначале плевались на АРМы из=за этой шумности, но потом привыкли, выработали работоспособные топологии.

Genadi Zawidowski
18.07.2009, 22:38
Ну например так как на схеме ниже
Готовность индикатора не проверяется... на spi 595-х регистров у меня четыре штуки напаяно и все микросхемы SPI) - рассматривался и такой вариант (в начале хотел применить AT91SAM7S32 - по объёмам озу и пзу вполне влезало - но не хватило ног).
Когда запущу первый вариант нового приемника в работу - буду рассказывать про помехи. как запасной вариант всегда можно отключить умножение с ФАПЧ и оставить только кварц - скорости хварит. Все выводы процессора проходят через 300 ом резисторы, выходы дешфраторов (138-е) подают индивидуально CLK/DATA на каждую микросхему на плате - со своими гасящими резисторами. Для того я схему и выкладывал - если есть комментарии по ней - с удовольствием приму. А обще советы они не очень помогают. Вот, например - что за неудобства у gcc, о которых Вы упомянули?

khach
19.07.2009, 13:51
Для того я схему и выкладывал - если есть комментарии по ней - с удовольствием приму. А обще советы они не очень помогают. Вот, например - что за неудобства у gcc, о которых Вы упомянули?
Схему смотрел, явных косяков невидно. А чтобы сказать конкретно, надо делать полную копию, тыкать ее осциллографом и анализатором спектра.
Основное неудобство GCC- необходимость перелапачивания фирменных библиотек, которые потом почему- то неработают :-). Конечно, пока АРМ занимается только настройкой синтезаторов, оно не сильно и надо. Но как только начинаем использовать USB или Ethernet, запускаем звуковой поток в риалтайме по I2S c DMA, над всем этим появляется RTOS... приходиться активно использовать библиотеки.
Спросите, зачем все эти навороты? Хотим иметь звуковой поток в компьютере для цифровой обработки. Вот сейчас ваяем на базе STM32F103 SDR который видится компьютером как звуковая карта. Но не можем решить проблем с помехами от обединения земель компьютера и приемника через ЮСБ. Прийдется наверно отвязывать АЦП и радиочасть гальванически от процессора. Да и полосы USB нехватает для полного 24 битного потока- приходиться в процессоре понижать разрядность до 16 бит и только их гнать по USB в компьютер.
А на подходе STM32F107 с эзернетом- попробуем на нем сделать нечто похожее на QSSDR server c автономной реализацией без компьютера.

RA9YTJ
22.07.2009, 08:58
Genadi Zawidowski
Интересно, а ARM LPC21xx это как в нынешней обстановке? Просто они есть в Proteus. И есть где-нибудь русскоязычный сайт типа известного авр123 по этим чипам. Ну вобщем с чего стартовать?

Genadi Zawidowski
22.07.2009, 19:01
AT91SAM7x vs. LPC21xx - смотрите на набор внутренней периферии, на различия в USB если оно есть и интересует. На мой взгляд одного класса изделия. На доставаемость смотрите...

начинать (в контексте тему переходить с AVR на ARM) - скачиваете упомянутый мною программатор h-jtag, скачиваете YAGARTO ARM Toolchain (http://www.yagarto.de/), скачиваете мой проект. В каталоге AT91SAM7S запускаете make - проверяете, что всё компилируется и появляется .HEX файл.
Ищите в проекте функцию main. в её начало вставляете свой код, используя имеющиеся в проекте куски инициализации.

Припаиваете к 10-ногому разъёму и процессору шесть проводочков, подсоединяете программатор. Питание.
Блокировочные конденсаторы не забыть.
Начинанте мигать светодиодом.

Русскоязычные сайты с переводом документации мне не помогали, больше всего информации я почерпнул просматривая темы форума electronix, посвященные ARM.

Я за один вечер научился светодиодиком моргать.

khach
23.07.2009, 10:24
LPC21xx программатор ненужен- они прекрасно загружают код через RS232. В принципе как и AT91- но у них бутлоадер грузит код с USB, что менее удобно. Программатор (вернее интерфейс отладчика) желателен при отладке сложных программ, но начинать можно и без него.

AT91SAM7x и LPC21xx обе прекрасно годятся для осовения начинающим. В каждой серии есть свои глюки, но они давно на форумах разжеваны. Только все же рекомендую поискать профессионально радведенные микромодуля под эти процессоры (микроплата с процессором, кварцем и питанием, и все ноги выведены на голдпины). Все таки разводка земли и питания важна (внутренние частоты 72 МГц) а у начинающего может с первого раза неполучится хорошо и из-за ВЧ шума отобьет желание использовать в приемной аппаратуре. За Genadi Zawidowski я неопасаюсь- разводка плат на уровне да и опыт работы с ДДС сразу дает представление о необходимой разводке для АРМа.

RA9YTJ
23.07.2009, 11:08
khach
А поп подробнее... Я так понял что есть платы, где впаян чип LPC21xx и обвеска к нему но не в виде отладочной платы? Где такое взять?

RA9YTJ
23.07.2009, 11:21
Genadi Zawidowski
Пожалуйста, прямую ссылку на ваш проект, а то чет я запутался...

khach
23.07.2009, 17:08
khach
А поп подробнее... Я так понял что есть платы, где впаян чип LPC21xx и обвеска к нему но не в виде отладочной платы? Где такое взять?
Что то типа http://www.pbjtech.com/products/index.html искать по minimodule, dip module, plug module итд.
На Украине вроде вот эти платки LPC2148 доступны http://www.evodbg.com/index.php?option=com _content&task=view&id=19&Itemid=38

Genadi Zawidowski
23.07.2009, 20:41
Genadi Zawidowski
Пожалуйста, прямую ссылку на ваш проект, а то чет я запутался...
http://www.cqham.ru/forum/showthread.php?t=968 8

RA9YTJ, воспользуйтесь точно работающим программатором - который наверняка у вас есть, раз занимаетест ATMEGA - STK200. И не надо будет разбираться с загрузчиками (тем более, что AT91SAM7S32 не грузит ничего по USB, так как нету этого интерфейса у него).

RA9YTJ
24.07.2009, 04:26
У меня программатор СОМ для авр, шью через понипрог, он подходит?
УСБ не важен мне.

Genadi Zawidowski
24.07.2009, 07:26
У меня программатор СОМ для авр, шью через понипрог, он подходит?
УСБ не важен мне.
нет, не подходит. я в первом сообщеии писал о применении lpt программатора. если уж придется делать и есть принтерный порт - начните с wiggler - схема в первом сообщени была.

RA3PKJ
21.05.2010, 16:01
to Genadi Zawidowski
Генадий, здравствуйте. У меня возник вопрос по сопряжению AT91SAM7S64 с DDS-кой (AD99..). В вашем приёмнике Вы задействовали или нет SPI-периферию контроллера? Вероятно, можно съимитировать все нужные сигналы , используя пины контроллера как обычные выходы. Т.е. не включая SPI в контроллере. И какой вариант лучше в данном применении? Ведь SPI забирает под свои нужды слишком много пинов, которые могли бы пригодиться под другие задачи.

Genadi Zawidowski
21.05.2010, 22:57
Я не использовал SPI контроллер. Шевелю выводами программно.
На CS стоит внешний дешифратор на 8 выходов - 7 из них задействовано.

Весь вывод идёт синхрионно для основного цикла программы, в обработчиках прерываний - только накомление импульсов от валкодера, таймер, опрос клавиатуры, CAT, электронный ключ.

Что лучше?- на мой взгляд без существенных переделок архитектуры программы - то как я и сделал.

Аппаратный SPI возможно дал бы увеличение скорости раз в десять - но и увеличил бы уровень наводок - потому я и не форсирую это здесь.

RA3PKJ
21.05.2010, 23:18
Генадий, спасибо за ответ. Я понял.

khach
26.03.2011, 13:21
Приподниму старую тему. Недавно приехали образцы новой серии STM32F2xx. Из "вкусных" новых особенностей- High Speed USB при наличии аппаратного I2S интерфейса позволяет наконец реализовать самодельную аудиокарту 24бит 192ксемпла в домашних условиях. Может быть очень полезно для SDR-строителей. Еще одна особенность- появился параллельный интерфейс видеокамеры -до 14 бит 30 Мгц тактовой. Позволяет сделать неплохой любительский осциллограф на одной микросхеме - например два канала по 7 бит 15 Мгц полосой. При цене микросхемы около 10евро- достаточно интересное решение.

uu5jkb
28.03.2011, 22:40
Добрый вечер всем.
И я решил перейти на ARM
Поставил себе Keil uVision 4.20, открыл первый попавшийся пример, подключил плату STM32VLDiscovery, прошил, дебаггером погулял, порадовался. Далее пытаюсь написать что-то самостоятельно, и, чтобы не гонять контроллер, пытаюсь дебажить программу симулятором. Для тренировки опять открыл проект из примеров, ничего не поганил в нем. Запускаю дебаггер, в окне дизассемблера указатель на адресе 0х00000000 с командой mov r0, r0. Жму F10, указатель остается на месте, в SP появляется какое-то немыслимое число 0xFFFFFFF8 или около того. Ни на main, ни на Reset Handler указатель не перескакивает, до брейк-пойнтов после нажатия на Run не идет. В окне Command пишут "Error 65. access violation at 0x00000000: no 'read' permission". В MAP Memory разрешаю отладчику делать с этим участком памяти все, ситуацию не спасает. Зашел на сайт Keil, там предложили как один из вариантов писать в Debug Command Window $=0x0800000. После этой команды указатель переходит в начало функции main, но дальше все равно по шагам не идет. Настройки памяти в Options не трогал, начальные адреса нормальные. Расскажите, пожалуйста, где и почему я дурак. Пробовал открывать проекты других контроллеров (LPC, Atmel etc) - дебаггер прекрасно работает

Roadman
19.05.2011, 22:21
Я вот так же подумываю о переходе на ARM, простенький контроллер от ST просто кишит перефирией и является 32 битным. Цена контроллера в 60 рублей просто не даёт шансов продолжать буксовать на AVR. Что скажете об STM32F100, цена привлекает а наличие переферии подкупает. Правда я что то не врубился с програмлением оной ST-LINK какойто :) А так на просмотр Atollic TrueSTUDIO поставил, IAR тоже под них есть.

ut1wpr
20.05.2011, 07:26
Добрый вечер всем.
И я решил перейти на ARM
Поставил себе Keil uVision 4.20, открыл первый попавшийся пример, подключил плату STM32VLDiscovery, прошил, дебаггером погулял, порадовался. Далее пытаюсь написать что-то самостоятельно, и, чтобы не гонять контроллер, пытаюсь дебажить программу симулятором. Для тренировки опять открыл проект из примеров, ничего не поганил в нем. Запускаю дебаггер, в окне дизассемблера указатель на адресе 0х00000000 с командой mov r0, r0. Жму F10, указатель остается на месте, в SP появляется какое-то немыслимое число 0xFFFFFFF8 или около того. Ни на main, ни на Reset Handler указатель не перескакивает, до брейк-пойнтов после нажатия на Run не идет. В окне Command пишут "Error 65. access violation at 0x00000000: no 'read' permission". В MAP Memory разрешаю отладчику делать с этим участком памяти все, ситуацию не спасает. Зашел на сайт Keil, там предложили как один из вариантов писать в Debug Command Window $=0x0800000. После этой команды указатель переходит в начало функции main, но дальше все равно по шагам не идет. Настройки памяти в Options не трогал, начальные адреса нормальные. Расскажите, пожалуйста, где и почему я дурак. Пробовал открывать проекты других контроллеров (LPC, Atmel etc) - дебаггер прекрасно работаетАбсолютно не дурак! Категорически! :)
На время забываем про CQHAM и читаем "майскими короткими ночами" всю ветку от начала и до конца, черпая из кладезя мудрости :)
http://kazus.ru/forums/showthread.php?t=283 38

uu5jkb
26.05.2011, 09:50
Абсолютно не дурак! Категорически!
На время забываем про CQHAM и читаем "майскими короткими ночами" всю ветку от начала и до конца, черпая из кладезя мудрости
http://kazus.ru/forums/showthread.php?t=283 38
За ссылку спасибо, как-нибудь почитаю. С момента моего вопроса прошло уже немало времени, поэтому кое-что сделал. Симулятор в Keil для stm32f100 работает только для самого ядра, как мне подсказали на electronix.ru. Поэтому в опциях симулятора надо выбирать, например, 32f103. Для платки stm32vldiscovery сделал еще одну платку, куда налепил периферию - индикатор, SD карту, усилители, EEPROM, кнопки и еще что-то. Последнее, до чего дошел - WAV плеер, читающий данные с SD карты с FAT16 системой. Сейчас готовим новый проект, сегодня начну рисовать плату, для контроллера спектрометра. Взяли stm32f103 - для связи с внешним миром нужен USB, буду тренироваться. Если кого интересует, могу поделиться любой информацией.


Я вот так же подумываю о переходе на ARM
Если еще ничего не выбрали, купите сразу отладочную плату. Цены небольшие, зато сразу можно садиться и писать. stm32vldiscovery стоит на Украине 20 $, зато сразу имеет программатор-отладчик ST-LINK, который в дальнейшем можно использовать со своими платами. Серия F100 не имеет USB, серия F103 совсем чуть-чуть дороже, но не имеет ЦАПа. Среда разработки Keil - бесплатная с ограничением 32 кБ - больше, чем достаточно на первое время, и ST-LINK в ней работает