Кто любит RISC в жизни, заходим, не стесняемся.
Ответить

Новый ARM Atmel Cortex-M0+ ATSAMD20

Пт дек 06, 2013 18:27:10

Народ здарова!

В качестве приобретения опыта по работе с ARM начал курить новый Atmel-овский чип ATSAMD20.
Линк на чип: http://www.atmel.com/ru/ru/products/mic ... m_d20.aspx

Благо нашару досталась демоборда с программатором -
image007.jpg
(57.74 KiB) Скачиваний: 963

Линк на девайсину: http://store.atmel.com/PartDetail.aspx? ... escription

В качестве среды разработки нужна AVR Studio 6.1 SP2, после 4.18/4.19 - куча нововведений и размер увеличился конкркетно, да и для работы машина нужна поновее - особенно ОЗУ любит - при загрузке примера почти пол Гектара кушает.
Пока запускал только примеры с сайта Atmel.
После AVR8 чип курится тяжко.
Последний раз редактировалось Frogfot Пт дек 06, 2013 20:48:32, всего редактировалось 2 раз(а).

Re: Новый ARM Atmel Cortex-M0+ ATSAMD20

Пт дек 06, 2013 18:35:19

О! А я думал что сам сижу и въезжаю в эти чипы. Изучаю регистры, биты и группы битов. Что к чему. Курится тяжело, вот на тактировании застрял, с ASF всё идёт гладко, только с understanding туго, и видно что в либах набыдлокодили нехило. Думаю со временем приведут в порядок либы. Со всеми чипами так.

P.S. народ, кто разобрался с тактированием на уровне понимания. Помогите плз.

Re: Новый ARM Atmel Cortex-M0+ ATSAMD20

Пт дек 06, 2013 18:47:17

2 MIB: у чипов, я не понял - 6 отдельных генераторов на каждый источник клока - generic clock generator (GCLKGEN)?

Re: Новый ARM Atmel Cortex-M0+ ATSAMD20

Пт дек 06, 2013 19:01:19

Ну назвать их генераторами сложно. Скажем так, GCG это модули у которых на входе мукс выбирающий откуда он клок возьмёт, далее делитель который умеет делить как кратно степеням двойки, так и любым значениям вплоть до 65535, и на выходе снова мукс который задаёт куда этот GCG отдаст клок. Модуль GCG может брать клок и у другого такого же GCG, и естественно не может использовать свой же клок. Кроме всего каждый из таких модулей имеет свой пин для подачи такта и пин для выдачи такта наружу. пин активизируется переферическим муксом (определяет какая переферия работает с этим пином или это обычный пин порта ВВ).

А вот самих настоящих генераторов у МК несколько. Три из них на 32 кГц. один ультра-лов-пауэр OSCULP32K - работает всегда, после ресет используется как тактировалка WDT, потом встроенный RC-генератор 32 кГц, его фишка в достаточно высокой точности и стабильности. и наконец внешний кварцевый генератор XOSC32K работает. Медленно запускается (еденицы секунд) генерит точный такт мало жрёт.

Далее идёт высокочастотный RC-генератор 8 МГц (OSC8M), имеет свой предделитель. После старта генерит 1 МГц для ядрышка.

Внешний кварцевый генератор 3... 30 МГц (кажись так, пишу не глядя в ДШ).

И самая жирная штуковина DFLL48M - тот же PLL но цифровой. Его опора такт в 32 кГц, но при этом он может разгонять свой выход до 48 МГц. Джитер вроде как лучше чем у обычного аналогового PLL. Чем DFLL от PLL отличается я не понял.

Эх. Топикстартер видимо сбежал. ДШ по ссылке - http://www.atmel.com/Images/Atmel-42129 ... asheet.pdf

Re: Новый ARM Atmel Cortex-M0+ ATSAMD20

Пт дек 06, 2013 19:19:47

2 MIB: а как насчёт поделиться рабочим примером инита клока, пока по ни по даташиту не могу вкурить, ни разобраться в примерах с сайта Атмела через кучу *.h файлов.

Re: Новый ARM Atmel Cortex-M0+ ATSAMD20

Пт дек 06, 2013 19:33:16

Не вАпрос.

Просто решил не выкладывать на форум ничего пока не появятся те кто уже разобрался или проявляет интерес. (Незачем лишний раз загаживать ветку).
own_defs.c - мои личные дефайны в моём же стиле. Чувствую сейчас полетят в меня какахи, мол, зачем тратить время если можно воспользоваться уже готовыми либами. Пишу этот файлик из-за того что-бы по максимуму почитать и разобраться.

Код:
//XOSC32K init инициализирую кварцевый генератор на 32 кГц
SYSCTRL->XOSC32K.reg = (7 << XOSC32K_STARTUP_pos | XOSC32K_XTALEN_bm);
SYSCTRL->XOSC32K.reg |= XOSC32K_ENABLE_bm;
while((SYSCTRL->PCLKSR.reg & PCLKSR_XOSC32KRDY_bm) == 0){};


//Generic Clock Generator-1 init инициализирую GCG-1 (GCG-0 по умолчанию уже занят после ресета)
GCLK->GENDIV.reg = GENDIV_GCG_GEN1_bg;                     //DIV = 1; ID = GCG1
wait_status_syncbusy_is_busy();                           //wait if SYNCBUSY == 1 needed
GCLK->GENDIV.reg |= (1 << GENDIV_DIV_pos);                  //DIV = 1;
wait_status_syncbusy_is_busy();                           //wait if SYNCBUSY == 1 needed
GCLK->GENCTRL.reg = GENCTRL_GEN1_bg; //..
wait_status_syncbusy_is_busy();                           //wait if SYNCBUSY == 1 needed
GCLK->GENCTRL.reg |= (GENCTRL_SRC_XOSC32K_bg | /*GENCTRL_OE_bm |*/   //ID = GCG1; Src = OSC8MHz; OutEn.bit = 1; RUNSTDBY.bit = 1; DIVSEL.bit = 1; OOV.bit = 1; (WTF?)
      GENCTRL_RUNSTDBY_bm | GENCTRL_OOV_bm /*GENCTRL_IDC_bm |*/            //..
      /*GENCTRL_DIVSEL_bm |*/);                        //..
wait_status_syncbusy_is_busy();                           //wait if SYNCBUSY == 1 needed
GCLK->GENCTRL.reg |= GENCTRL_GENEN_bm;                     //GENEN.bit = 1
wait_status_syncbusy_is_busy();                           //wait if SYNCBUSY == 1 needed ТУТ ВИСНЕТ только при выборе в качестве
                                                //источника такта GENCTRL_SRC_XOSC32K_bg
GCLK->CLKCTRL.reg = CLKCTRL_GEN1_bg;                     //ID = GCG1
GCLK->CLKCTRL.reg |= CLKCTRL_DFLL48M_ref_bg;               //DFLL48M - clock receiver;
GCLK->CLKCTRL.reg |= CLKCTRL_CLKEN_bm;                     //CLKEN.bit = 1;


Подпрограмма ожидания синхронизации регистров выглядит так:
Код:
void wait_status_syncbusy_is_busy (void)
{
   while(((volatile unsigned char)GCLK->STATUS.reg & STATUS_SYNCBUSY_bm) != 0){};
};


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

Виснет в одном из мест где вызывается wait_status_syncbusy_is_busy(); причём если выбрать любой из уже работающих внутренних RC-генераторов, то не виснет (пример GENCTRL_SRC_OSC8M_bg, где виснет смотрите в камментах к коду, выше). А если выбрать GENCTRL_SRC_XOSC32K_bg то для GCG-1 происходит вешалка. самое интересное что XOSC32K запускается. это видно когда его отпускает while((SYSCTRL->PCLKSR.reg & PCLKSR_XOSC32KRDY_bm) == 0){}; (XOSC32KRDY бит готовности находится в PCLKSR регистре). И самое главное что на ножках 32-х кГц кварца вижу чёткое подобие синуса.
Вложения
own_defs.c
(14.06 KiB) Скачиваний: 743

Re: Новый ARM Atmel Cortex-M0+ ATSAMD20

Пт дек 06, 2013 19:39:43

MIB писал(а):Чувствую сейчас полетят в меня какахи, мол, зачем тратить время если можно воспользоваться уже готовыми либами.

Да готовыми либами любой дурак может воспользоваться, а чтобы самому шота вкурить и написАть - не любой :)

Re: Новый ARM Atmel Cortex-M0+ ATSAMD20

Пт дек 06, 2013 19:59:41

Ладно, пора домой топать. Frogfot, спасибо за поддержку. Мож кто отпишется к понедельнику. Поковыряю ещё чуток этот чип, но мыслей "что же не так" уже нет.

Re: Новый ARM Atmel Cortex-M0+ ATSAMD20

Вс дек 08, 2013 18:07:37

MIB писал(а):Внешний кварцевый генератор 3... 30 МГц (кажись так, пишу не глядя в ДШ).

Я таки начал смотреть в даташит - от 11/2013 стр. 127 - правильней будет 0,4-32 МГц.

На этот раз Atmel намутили чиста конкретна - раскидали тактирование и регистры генераторов по 4-м разделами 13-16 (а я мозги парю, пытаюсь вкурить по первым 2-м разделам 13-14).

Не скажу что сделали плохо - просто непривычно после AVR8 туева хуча регистров.

Re: Новый ARM Atmel Cortex-M0+ ATSAMD20

Вс дек 08, 2013 22:53:45

Здесь нужно просто привыкнуть. Простой сёрфинг по AVR-ким даташитам это тоже выработанная привычка. Так же и с ARM.

С туевой хучей регистров ага, это сперва оно кажется избыточным. К примеру порты ВВ. Тут некислая жменька регистров. Сперва задаёшся вопросом - а нафига? Позже когда вникаешь начинаешь понимать. Ога, есть привычные регистры в который какую битовую комбинацию сунул, такая и высыпалась на выводах. Потом смотришь на регистры по соседству с этим регистром, и видишь что есть этот же регистр, но который умеет только устанавливать линии порта в лог. 1 и есть регистр который умеет только сбрасывать линии порта ВВ в лог. 0 состояние. Начинаешь въезжать что это нужно для того что-бы не делать процедуру чтение-модификация-запись. Это избавляет от необходимости использования масок для групп линий (когда из скажем 32-х линий порта нужно управлять только 8-ю, к примеру). Что имеем в результате? - меньше кода, быстрее работа с линиями портов ВВ.

Кстати с портами с самого начала сразу же и разобрался. Оч. понравилось что что-бы начать работать с портом достаточно настроить его направление (на выход) и тут же уже можно что-то выписывать в порт без обращения к дополнительным регистрам которые конфигурят массу прикольных функций порта. Иначе говоря дополнительный регистр PIN CONFIG уже настроен по умолчанию так что его не нужно трогать. Ну а если уж захочется настроить подтяжку вверх, подтяжку вниз, открытый коллектор, открытый эмиттер, режим slew rate (36 Ом резистор подключенный последовательно с линией порта для устранения ВЧ звона на длинных трассах) или же просто отрубить функцию порта и задействовать одну из групп периферий находящихся на этом пине, тогда нужно обратиться к регистрам PIN CNFG и периферическим MUX регистрам.

И да, в Cortex-M0+ доступ к портам ВВ однотактный. Фактически ядро работающее на 48 МГц сможет выдать на линии порта ВВ меандр частотой 24 МГц. Я компилил код, смотрел дизасм, никаких sbi или cbi инструкций как у AVR нет, но при этом видна всего одна строчка с одной асмовой инструкцией. Скажем, для старших кортексов типа М3 и М4 это слабое место, у них на "поднять линию" или "сбросить линию" уходит минимум 6 строчек, ну и естесно не менее 6-ти тактов (не знаю, все ли там инструкции однотактные).

Re: Новый ARM Atmel Cortex-M0+ ATSAMD20

Пн дек 09, 2013 09:46:38

Просмотрел камень .
Atmel в своем репертуаре - аляповатый даташит .
Камень жалкое подобие STM32F0xxx .
Нет DMA , таймеры урезанные по самое не могу .
RTC нет Backup домена и даже батарейку присобачить не куда .
И все это на фоне неимоверных цен...

Re: Новый ARM Atmel Cortex-M0+ ATSAMD20

Пн дек 09, 2013 14:00:16

2 dosikus: да ладна, какой производитель может похвастаться правильными даташитами почти сразу после выхода чипов?

Просто мне нашару досталась демоборда с камнем - http://store.atmel.com/PartDetail.aspx? ... escription

+ 2 шилда расширения - тоже нашару:

- Atmel I/O1 Xplained Pro (ATIO1-XPRO) http://store.atmel.com/PartDetail.aspx? ... escription

image011.jpg
(99.26 KiB) Скачиваний: 927

- Atmel OLED1 Xplained Pro (ATOLED1-XPRO) http://store.atmel.com/PartDetail.aspx? ... escription

image009.jpg
(93.32 KiB) Скачиваний: 919

Ну просто грех будет добру пропадать :)

Re: Новый ARM Atmel Cortex-M0+ ATSAMD20

Пн дек 09, 2013 14:16:32

Всем добрый день.
Мне тоже досталась плата Atmel® SAM D20 Xplained Pro.
Народ помогите написать простенькую программу по управлению парой выводов МК.
Необходимо для тестирования этой платы. Уже второй день мучаюсь, не могу разобраться с PORT PA10-PA19 EXT2 любые 2 вывода.
Заранее благодарен.

Мяукать пока только учусь. :lol:

Re: Новый ARM Atmel Cortex-M0+ ATSAMD20

Пн дек 09, 2013 14:21:19

Frogfot , Та ды да.
Нахаляву и я бы не отказался . :)))

Re: Новый ARM Atmel Cortex-M0+ ATSAMD20

Пн дек 09, 2013 14:27:34

предполагаю платки получены нахаляву (как и в моем случае) на прошедших семинарах атмел?)

Re: Новый ARM Atmel Cortex-M0+ ATSAMD20

Пн дек 09, 2013 14:29:14

Ну что тут скажешь, ATMEL это дерево с поздними плодами, пусть хоть и сочными. Знакомый который регулярно тусит и официального дистра ATMEL грит что будет следующее развитие SAM D20 в SAM D21. Там вроде как USB добавят и DMA каналы. Ну а так, полистал даташитинку на STM32F0, ффкусные чипики с жирными плюсами, но у ATMEL вроде как тоже есть преимущества:

1) SAM D20 жрёт 150 мкА/МГц, STM32F0 250 мкА/МГц.

Здесь думаю дело в технологии чипа. ST используют самую дешевую технологию 180 нм, ATMEL 90 нм, эта технология вдвое дороже 180-ти нм. (Это и отражается на стоимости чипа). Это же и отражается на токи утечек через кристалл в спящем режиме - меньше нормы - меньше токи.

2) ATMELовцы сделали универсальный модуль SERCOM который легко трансформируется в SPI, I2C или USART, таких модулей до 6-ти на кристалле (самый многоногий чип - 64 вывода). Это упрощает трассировку ПП, нет необходимости тянуть выводы в неудобно расположенным выводам SPI, I2C или USART. Как это в чипах с фиксированными модулями. Все модули SERCOM настраиваются одиннаково, это упрощает моменты "въехать как оно работает".

3) Питание SAM D20 1,63... 3,62 В против STM32F0 у которого 2... 3,6В.

4) Аппаратный QTouch (в SAM D20 почему-то называется PTC - Peripheral Touch Controller, (можно подумать что это термистор Positive Temperature Coefficient :))) )). позволяет организовать матрицу сенсоров до 256-ти шт!!! (Для 64-х выводных корпусов).

5) Больший диапазон Flash-памяти для SAM D20 - 16... 256 кБ. У ST для M0 16... 64 кБ

6) Более новое ядро Cortex-M0+ против Cortex-M0 что добавляет такие плюшки как аппаратное умножение за 1 такт с 64-х битным результатом и 1-но тактный доступ к линиям портов ВВ.

7) Самый мелкий из лекгопаяемых корпусов TQFP-32 c шагом выводов 0,8 мм, как по мне это поудобнее будет чем TSSOP-20 с шагом 0,65 мм. В частности более эффективно использует площадь ПП, при этом такой чипок можно ставить на доски с толстым слоем фольги у которых идут ощутимые ограничения по минимальной ширине трассировок и зазоров между оными.
Последний раз редактировалось MIB Пн дек 09, 2013 16:07:35, всего редактировалось 3 раз(а).

Re: Новый ARM Atmel Cortex-M0+ ATSAMD20

Пн дек 09, 2013 14:29:16

2 k000858: да спасибо будет Атмелу за наше просвещение :)

Re: Новый ARM Atmel Cortex-M0+ ATSAMD20

Пн дек 09, 2013 14:31:15

k000858 писал(а):предполагаю платки получены нахаляву (как и в моем случае) на прошедших семинарах атмел?)


Ога, насеминарил :)

Re: Новый ARM Atmel Cortex-M0+ ATSAMD20

Пн дек 09, 2013 14:48:32

MIB писал(а):Ну что тут скажешь, ATMEL это дерево с поздними плодами, пусть хоть и сочными. Знакомый который регулярно тусит и официального дистра ATMEL грит что будет следующее развитие SAM D20 в SAM D21. Там вроде как USB добавят и DMA каналы. Ну а так, полистал даташитинку на STM32F0, ффкусные чипики с жирными плюсами, но у ATMEL вроде как тоже есть преимущества:


Когда ATMEL разродится чем то отдаленно похожим STM32F0xx , STM снова уйдет вперед.
И снова это будет лучше и дешевле.
На данный момент для себя не вижу никаких стимулов, кроме как поиграться, юзать SAM D20.
STMF0xx прекрасно заменили все 8ми битки в моих реализациях., даже девайсы c LED получили аппаратную поддержку ...

MIB писал(а): 1-но тактный доступ к линиям портов ВВ.


Ну да ну да, только софтового ногодрыга в ARM и недоставало.
Как то и без ручного дрочительства обходимси - аппаратно. :)))
Последний раз редактировалось dosikus Пн дек 09, 2013 14:52:20, всего редактировалось 1 раз.

Re: Новый ARM Atmel Cortex-M0+ ATSAMD20

Пн дек 09, 2013 14:50:04

AVKrobotics писал(а):Всем добрый день.
Мне тоже досталась плата Atmel® SAM D20 Xplained Pro.
Народ помогите написать простенькую программу по управлению парой выводов МК.
Необходимо для тестирования этой платы. Уже второй день мучаюсь, не могу разобраться с PORT PA10-PA19 EXT2 любые 2 вывода.
Заранее благодарен.

Мяукать пока только учусь. :lol:


Создайте новый проект, только с путями без кириллицы и пробелов. Файлами из архива замените main.c в том каталоге где он находится. Должно мигать. Извините, я на работе. проверить не могу на своём бордике. Мигать должно оранжевым диодом, он по умолчанию висит на PA14.
Вложения
src_blink.rar
(2.55 KiB) Скачиваний: 463
Ответить