Восьмиядерная сороконожка
Два-три года назад по специализированным форумам и информационным лентам прокатилась новость о необычном микроконтроллере «Пропеллер», имеющим восемь ядер на борту. С тех пор страсти утихли, но микроконтроллер от этого не потерял своей необычности, поэтому я решил посвятить ему эту статью.Компания Parallax не обладает такой известностью, как Atmel, Microchip, ARM, Intel и другие, однако под ее началом производится микроконтроллер P8X32A, который сумел завоевать симпатии многих любителей электроники.
Микроконтроллер обладает следующими характеристиками:
- Максимальная частота: 80MHz
- Разрядность операндов: до 32 бит
- Количество ядер: 8
- Максимальная производительность: 160 MIPS (по 20 MIPS на ядро)
- Количество приватной памяти на ядро: 2 кб (512 слов, реально меньше)
- Количество разделяемой памяти: 32 кб RAM и 32 кб ROM.
- Количество GPIO-выводов: 32
- Напряжение питания: 3,3В
- Упаковка: DIP-40, 44-pin LQFP или 44-pin QFN
- Стоимость: $8 (США), 800 руб. (Россия)

Восемь ядер — впечатляет! Однако впечатляет не всех… Периодически, можно встретить
критические замечания по микроконтроллеру:
1. Производительность всего 20 MIPS на ядро.
2. Нет встроенной Flash-памяти.
3. Практически отсутсвует периферия в виде PWM, DAC, ADC, таймеров, отсутсвуют прерывания.
Несмотря на это, микроконтроллер образовал свое сообщество, которое вполне активно его использует.
Разгадка любви к этому устройству не видна на первый взгляд, но отркрывется при знакомстве с ним: задумка и смысл, краеугольный камень микроконтроллера — это простота!
Простота и уникальная особенность в виде наличия нескольких ядер, отсуствие прерываний, отсуствие стека требует применять другой подход к программированию микроконтроллера. Он не хуже, он просто другой!
Например, что дается вместо классического подхода с использованием прерываний? У нас есть много ядер. Можно любое из них задействовать, как реакцию на внешнее событие. Специальная команда приостановит исполнение ядра, пока входы не примут заданную конфигурацию.
Что делать при отсутствии таймеров? В замен дается глобальный 32-битный счетчик тактов, а так же по два дополнительных счетчика на каждое ядро с множеством режимов работы. С помощью дополнительных счетчиков можно реализовать и ШИМ, и ЦАП, и АЦП, и измерение частоты, и другие полезные вещи. После этого микроконтроллер уже не кажется голой игрушкой. Тем более, после ознакомления с поддержкой вывода видеосигнала.
Система команд состоит всего из 60 инструкций, а их бинарный формат сразу напоминает о мощных RISC-процессорах. Каждая инструкция имеет фиксированный размер 32 бита и единую форму. В определенных позициях заданы флаги условного исполнения инструкции, в зависимости от состояния двух процессорных флагов: Z (ноль) и C (перенос). Каждая инструкция имеет флаги сохранения результата. А так же указание на источник и приемник.

Первое быстрое знакомство с микроконтроллером вызвает, скорее, недоумение. Глубокое знакомство с микроконтроллером, скорее, поражает сочетанием простоты и заложенного потенциала.
Не это ли является золотой срединой между простотой и свободой творчества?

Ссылки по теме
1. Даташит на микроконтроллер, PropellerDatasheet-v1.2.pdf (англ.)
2. Переведенная на русский язык документация на микроконтроллер.
3. Руководство пользователя, WebPM-v1.1.pdf (англ.)
4. Наличие и цены готовых средств разработки, цены на чипы (Terraelectronica, Москва), используйте поиск по «P8X32A» и «Propeller».
5. Форум, посвященный микроконтроллеру (англ.)



комментарии (43)