Кембриджский университет Raspberry Pi Руководство по разработке операционной системы Вопросы

9

Я разработчик приложений высокого уровня (C #, python), и я бы хотел испачкать руки разработкой низкоуровневых встроенных приложений. Кембриджский университет опубликовал серию учебных пособий, в которых рассказывается, как создать операционную систему для Raspberry Pi под названием Baking Pi. Я намеревался опубликовать свой вопрос относительно этого урока здесь и обновлять ответы по мере продвижения. Может быть, даже опубликовать некоторые моменты, которые я понял сам.

Так что я следовал за уроком 1 и уже запутался. Вот ссылка на страницу .

Первая часть урока говорит, что нам нужно (я полагаю) включить контроллер GPIO, записав значение 0x20200000 для регистрации r0. Я не могу найти такую ​​актуальную информацию нигде в листе данных. ( ссылка ). Я посмотрел на раздел GPIO, но не увидел никаких признаков 16 регистров или r0. Где эта информация?

ОБНОВИТЬ

Прежде всего, в руководстве рассказывается о включении светодиода OK, который является светодиодом состояния. Вы можете спросить, где в Руководстве сказано, что GPIO 16 подключен к индикатору OK. Не будет Вам нужно взглянуть на Raspberry Schematics и найти, к какому GPIO подключен status_led. Вот ссылка на схему. Страница 2, Блок BCM2835.

Таким образом, цель состоит в том, чтобы выбрать вывод GPIO16. (больше обновлений, чтобы прибыть ...)

Armenb
источник

Ответы:

5

Вот соответствующая информация в этом уроке:

Адреса в компьютерах - это просто цифры, поэтому число 0x20200000 является адресом контроллера GPIO. Это просто дизайнерское решение, принятое производителями, они могли использовать любой другой адрес (при условии, что он не конфликтует ни с чем другим). Я знаю этот адрес только потому, что я посмотрел его в руководстве [3] , нет конкретной системы адресов (кроме того, что все они представляют собой большие круглые числа в шестнадцатеричном формате).

r0просто раздел памяти на процессоре, где вы можете хранить любую информацию, которая вам нравится; они называются регистрами общего назначения. Мы записываем местоположение контроллера GPIO в это местоположение, чтобы мы могли использовать его позже, как мы обычно делаем, используя переменную в программировании высокого уровня.

Я думаю, что значение 0x20200000 на самом деле относится к первой ячейке памяти в таблице на стр. 90. Вы заметите, что перед записью в регистр мы увеличиваем его на 4, давая нам Function Select 1(см. Таблицу) регистр, который управляет несколькими выводами. в том числе тот, который мы хотим написать.

Это помогает вообще?

Jivings
источник
Мой вопрос, где в таблице данных эта информация относится?
АрменБ
@ArmenB .: Раздел 6.1, Страница 90
Jivings
В документе говорится: «GPIO имеет 41 регистр». где в учебнике написано 16. В этом разделе нет ни указания регистра r0, ни номера 0x20200000 для его включения.
АрменБ
@ArmenB .: Извините, Армен, я расскажу немного подробнее.
Jivings
3

Спасибо Jivings и emcconville за ответ на вопрос.

В листе данных pdf, стр. 6, раздел ARM физический адрес , есть раздел, который говорит

Физические адреса варьируются от 0x20000000 до 0x20FFFFFF для периферийных устройств. Адреса шины для периферийных устройств настроены для сопоставления с диапазоном адресов периферийной шины, начиная с 0x7E000000. Таким образом, периферийное устройство, рекламируемое здесь по адресу шины 0x7Ennnnnn, доступно по физическому адресу 0x20nnnnnn.

Переходя к странице 90, первая строка таблицы гласит:

0x7E200000 GPFSEL0 GPIO Функция Выбор 0 32 R / W

поэтому 0x7E200000 преобразуется в физический адрес 0x20200000, который является 0-битным выбором функции GPIO.

Что касается r0, в ARM есть 16 регистров общего назначения, которые мы можем использовать для хранения чисел, и поэтому в руководстве он выбирает r0, поскольку это первый бесплатный регистр.

Armenb
источник
Рад помочь, и хороший ответ сам, это подводит итог двух других хорошо.
Jivings
Нет, спасибо, что нашли время ответить. Я опубликовал это как вики сообщества, чтобы другие могли редактировать / исправлять / завершать публикацию.
АрменБ
1

Реестр r0через r12общего назначения. Естественно, проще всего начать с r0. Как отметил Дживингс, в руководстве перечислены все адреса и указано:

Физические адреса варьируются от 0x20000000 до 0x20FFFFFF для периферийных устройств.

emcconville
источник
Я не могу выбрать два правильных ответа! это хромой Пожалуйста, исправьте этот сайт ... Спасибо за ваш вклад. Я наконец понял значение RTFM.
АрменБ