April 8th, 2013

Подготовка к лабораторным работам с промышленной реализацией архитектуры MIPS на примере pic32

Итак, свой собственный процессор с подмножеством архитектуры MIPS мы уже сделали и проверили, как он работает на ПЛИС. Пришло время сделать последний шаг по мосту над пропастью между физикой и программированием познакомившись с промышленной реализацией  архитектуры MIPS на примере процессора pic32 и немного запрограммировав его.

Финальные лабы уже гораздо проще и значительно короче вериложных - уже знакомый ассемблер MIPS, обычный язык программирования Си + немного базовой микроэлектронной специфики типа внешних пинов ввода-вывода, макетных плат и мигающих лампочек, к которыми за прошедшие лабораторные работы уже сто раз привыкли.

Выбор литературы, оборудования и программного обеспечения

Литература

Programming 32-bit Microcontrollers in C. Exploring the PIC32. Lucio Di Jasio.
Collapse )

Оборудование

Для ознакомления с процессором pic32, внутри которого реализована архитектура MIPS32, нужно выбрать удобную плату разработчика, на которую он приделан. По коду упражнений самих вводных лаб никаких объективных требований сформировать не получится, т.к. это несколько строк кода для мигания лампочками, которые будут работать на любом самом тормозном и ограниченном во всех ресурсах железе. Поэтому технические характеристики стоит подбирать под частные задачи, которыми будет интересно заняться на плате далее самостоятельно - я их здесь подробно рассматривать не буду.

Упомяну лишь, что судя по всему все чипы pic32 работают на частоте 80МГц, т.е. в первом грубом приближении идентичны. А значение играют в первую очередь такие параметры, как Flash (размер прошивки с программой) и SRAM (оперативная память, доступная программе) - доступные количества на всех платах, которые я видел, измеряются в килобайтах и за их пределы довольно легко выскочить даже на некоторых базовых задачах (например при попытке создать статический буфер для загрузки изображения). Плюс для меня значение имеет количество внешних пинов ввода-вывода и наличие всякой полезной переферии (кнопки, лампочки и встроенные дисплеи на мой взгляд только занимают место, а вот слот для sd-карты может оказаться очень кстати).

У нас на лабах используются плата ChipKIT Uno32, поэтому она будет фигурировать в качестве образца далее во всех примерах.



Collapse )

Программное обеспечение

Набор инструментов разработки (тулчейн - toolchain - tool chain - цепь инструментов) включает в себя следующие основные элементы:
- Редактор кода.
- Компилятор (в нашем случае для ассемблера MIPS32 и языка Си), генерирующий двоичный файл прошивки (исполняемый код) для выбранного контроллера (в нашем случае PIC32). Сюда же в качестве необходимых компонент - набор системных библиотек для выбранной архитектуры и система сборки.
- Программатор, записывающий сгенерированный файл прошивки на устройство.
- (Дополнительно) инструмент отладки запущенной программы (установка точек останова, просмотр текущих значений переменных и т.п).

Все эти инструменты могут быть объединены в рамках одной интегрированной среды разработки (IDE) с графическим интерфейсом или же существовать в виде набора раздельных программ от разных производителей с графическим или консольным интерфейсом. Вопрос выбора конкретного набора - дело вкуса разработчика и потребностей проекта. Не суть дела - главное, чтобы каждая из перечисленных функций была каким-то образом закрыта.

Для Прикладной Математики, где студенты привыкли проникать в суть вещей, не боятся консоли, а используют всю ее гибкость и мощь, а также предпочитают работать со свободным программным обеспечением, используем спартанский набор в виде любого текстового редактора, компилятора gcc и набора сопутствующих инструментов, а также программный программатор avrdude, который умеет заливать прошивку на плату напрямую через интерфейс USB.

Замечание: Кроме того стоит отметить, что в рамках курса использование отдельных инструментов с открытым исходным кодом вне состава IDE будет более правильно, т.к. дает лучшее представление о том, с какими дополнительными задачами придется столкнуться разработчику собственной аппаратной архитектуры - как минимум создать собственный транслятор собственного ассемблера в собственный машинный код.

Для проверки работоспособности всей цепочки инструментов скомпилируем и зальем на плату такую максимально простую программу, которая не делает вообще ничего - даже не печатает никуда "Hello world" и тем более не мигает лампочкой (хотя в случае с программированием микроконтроллерных плат правильнее будет даже не мигает лампочкой и тем более не печатает никуда "Hello world").

task0-check-toolchain/main.c

/**
 * Пустая программа - проверить компилятор и загрузку прошивки на плату.
 */
void main() {  
    while(1) {
    }
}


Если коротко:
1. Создаем файл main.c в каталоге task0-check-toolachain с кодом программы.
2. Качаем архив с модифицированной для PIC32 ChipKIT mpide и распаковываем в /opt.
3. Качаем Makefile и копируем в каталог task0-check-toolachain рядом с main.c.
4. Внутри каталога task0-check-toolachain с main.c и Makefile'ом в командной строке набираем команду make и получаем файл с прошивкой task0-check-toolachain/bin/.
5. Подключаем плату через провод USB, прошиваем плату из командной строки не выходя из каталога task0-check-toolachain командой "make upload".
6. Убеждаемся, что все прошло без ошибок.

Collapse )

Дополнительно

Инструменты для самостоятельного изучения в дополнение к перечисленному набору или на замену одного или нескольких его элементов.

Collapse )

Код лаб на github, подсветка синтаксиса.