Решил почистить домашний каталог от всякого мусора и нашёл интересную коллекцию своих исходных кодов для 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).
На этом всё, т.к. все наработки по этому МП заморожены то все исходные коды я предаю в открытое использование. Если найду что-нибудь интересно среди собственных исходных кодов то это также выложу в общий доступ.
Для тех кому это интересно расписано где всё это можно взять и что там конкретного лежит.
Заранее извиняюсь за компоновку и некоторые названия функций - это всё было порядка шести лет назад - на тот момент я достаточно плохо знал английский.
Итак начнём обзор.
Все исходные коды располагаются по адресу - 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).
На этом всё, т.к. все наработки по этому МП заморожены то все исходные коды я предаю в открытое использование. Если найду что-нибудь интересно среди собственных исходных кодов то это также выложу в общий доступ.
Комментариев нет:
Отправить комментарий