суббота, 27 июня 2015 г.

AT91RM9200 sources - arm my learn

Решил почистить домашний каталог от всякого мусора и нашёл интересную коллекцию своих исходных кодов для AT91RM9200, примеры которые писал под плату Rainbow v1.1.
Для тех кому это интересно расписано где всё это можно взять и что там конкретного лежит.
Заранее извиняюсь за компоновку и некоторые названия функций - это всё было порядка шести лет назад - на тот момент я достаточно плохо знал английский.



Итак начнём обзор.
Все исходные коды располагаются по адресу - https://github.com/no111u3/arm_my_learn в моём аккаунте гитхаба и свободно доступны для скачивания.
Помимо бесполезных для всех текстовых файлов(в них я размечал план курса и некоторые заметки) есть файл описания установки утилит необходимых для сборки - https://github.com/no111u3/arm_my_learn/blob/master/install%20commands.list.
Так как я не уверен что современный GCC соберёт то что там есть (по разным причинам, в том числе и потому что там в некоторых местах не совсем корректно написано), то помимо исходного кода и Makefile для сборки я выкладываю вопреки условностям хранения кода в гитхаб ещё бинарные файлы включая прошивку, которую можно просто заливать через последовательный порт используя стандартный загрузчик AT91RM9200.
Весь исходный код независим от внешних библиотек и является полностью переносимым.
Размер компилируемых бинарных файлов не должен и не превышает 11 кБ (по причине размещения в статическом ОЗУ МП).

Рассмотрим по подробней что у нас есть:

02_GPIO - примеры для GPIO, нету смысла уделять им особое время и место. Зажигаение светодиода и мигание им с программной задержкой времени.

03_DBGU  - отладочный интерфейс, также применяемый для загрузки кода в статическое ОЗУ МП. Примеры: включения интерфейса, вывода символа, ввода символа, вывода строки и ввода строки.

04_PMC - блок тактирования + дерево тактирования и блоки ФАПЧ. Примеры: переключения на основную частоту, на пониженную частоту, на ФАПЧ А и ФАПЧ Б.

05_AIC - расширенный контроллер прерываний. Примеры: включение, обращение к несуществующему региону памяти и внешнее прерывание.

06_ST - системный таймер входящий в состав ARM ядра МП, блок содержащий таймер отсчётов, переодичный таймер и сторожевой таймер. Также дан пример использования спящего режима МП.

07_TC - таймеры счётчики, блок содержащий несколько многофункциональных таймеров - счётчиков для выполнения различных действий. Примеры: инициализация, генерация события прерывания по переполнению и совпадению и наконец генерация сигнала ШИМ волнообразной формы.

08_RTC - модуль часов реального времени с календарём, рассмотрена инициализация часов и настройка будильника пробуждения.

09_SDRAMC - контроллер оперативной памяти. Основной модуль для взаимодействия с параллельными внешними устройствами которые либо являются памятью, либо обладают схожими с ней интерфейсами. Примеры: инициализация контроллера, чтение и запись в определённый адрес ОЗУ, полный тест ОЗУ, загрузка данных в ОЗУ с использованием протокола X-modem, выполнение произвольного кода загруженного предыдущим способом, выполнение кода ядра загруженного предыдущим способом.

10_TWI - двухпроводной интерфейс, параметрический аналог от Atmel шины i2c, полностью соответствует функциональности оригинала, рассмотрена работа в качестве master. Примеры: инициализации интерфейса, подключение и настройка внешних часов реального времени, подключение и обмен данными с внешней микросхемой памяти типа EEPROM.

11_SPI - синхронный периферийный интерфейс, полностью функциональный с поддержкой возможности загрузки в МП ПО записанного во внешнюю память с данным интерфейсом, рассмотрена работа в качестве master. Примеры: инициализация, подключение к внешней флеш памяти, операции чтения и записи для этой памяти, запись и чтение данных полученных по X-modem, выполение кода записанного во флеш также полученного по X-modem, самозагрузка кода из флеш (bootstrap),  самозагрузка и загрузка произвольного кода из флеш (bootloader), самозагрузка и загрузка ядра Linux из флеш (linux bootloader).
Исходный код этих примеров послужил основой для моего самодельного загрузчика f-boot.

code_for_sdram - тестовый код выполняемый в ОЗУ.

include - библиотека которая послужила основой для первичного загрузчика (f-boot).

На этом всё, т.к. все наработки по этому МП заморожены то все исходные коды я предаю в открытое использование. Если найду что-нибудь интересно среди собственных исходных кодов то это также выложу в общий доступ.