как мбед общается с периферией - PullRequest
0 голосов
/ 24 февраля 2019

Основываясь на ответе на этот вопрос: Как процессор взаимодействует с периферийными устройствами?

Я уже знаю, что современные процессоры обычно используют механизм, аналогичный DMA, для взаимодействия с периферийным устройством ввода-вывода.и т.д.

Недавно я купил плату, FRDM-K66F .Как сказано в руководстве пользователя, этот системный процессор основан на ARM, и на нем уже установлена ​​Mbed OS 5.

Когда дело касается функции «Цифровой вход / выход», я знаю только следующее:

C ++ -> библиотека mbed -> API GPIO -> ...?-> Аппаратное обеспечение

Я хочу уточнить, что как процессор работает с периферийными устройствами в низкоуровневой области ?(от API GPIO до аппаратного обеспечения, особенно в случае mbed)

Существуют ли какие-либо специальные переменные, объявленные в библиотеке mbed-os, которые соответствуют конкретным регистрам в процессоре mbed-board?чтобы компилятор arm мог преобразовывать такие операторы в конкретные инструкции по доступу?

Я не знаю, как искать этот вопрос в Google, поэтому, если вам нужна какая-либо полезная ссылка или руководство пользователя, вставьте его для меня.

Ответы [ 2 ]

0 голосов
/ 24 февраля 2019

Простой ответ - несколько уровней абстракции.MBED - это ОС, предназначенная для портирования на множество устройств от разных производителей:

  • API MBED определяет, как (в программном обеспечении) пользователь будет указывать доступ к периферийному устройству, такому как GPIO, включаяабстрактное имя контакта, относящееся к уровню платы.
  • Код поставщика для порта MBED определяет общий метод, который работает для всех деталей от одного поставщика / семейства (может быть сотни различных комбинаций пакетов / периферийных устройств, но поставщики, как правило, сохраняют те же функции периферийных устройств, включая карту памяти периферийных устройств, на которую ссылается их базовый адрес.
  • Код конкретного устройства определяет, где в карте памяти находится каждое периферийное устройство, что 'понятными именами для каждого вывода являются и любые специфичные для поставщика зависимости (такие как требования к тактовым часам для включения конкретного GPIO и какие выводы это покрывают).

Поскольку он является общим, код не будетвсегда быть оптимальным для любой конкретной цели. Он может даже не предлагать всеиз функций, предоставляемых аппаратным обеспечением.Намерение состоит в том, что легко добавить поддержку новых устройств.

Чтобы показать некоторые примеры, я сошлюсь на фрагменты из цели Cortex-M3 DesignStart Eval .Это имеет только ограниченное количество периферийных устройств, и вы также можете скачать исходный код для платформы в Verilog, если хотите.Это всего лишь несколько частей ОС, эти фрагменты не объединяются полностью.

PinNames содержит как номера EXPnn для 50-контактного интерфейса, так и мультиплексирование контактов альтернативной функции GPIO.определения:

typedef enum {
    ALTERNATE_FUNC = 0, /* The pin is used for alternative function */
    GPIO_FUNC = 1       /* The pin is used for GPIO function */
} PinFunction;

gpio_api.c реализует (иногда некрасивое) отображение между стандартным API и внутренней логикой.Например, чтобы инициализировать конкретный вывод, необходимо выполнить поиск номера и периферийного устройства (на основе 16 выводов на GPIO):

void gpio_init(gpio_t *obj, PinName pin)
{
struct arm_gpio_dev_t *gpio_dev;

if (pin >= EXP0 && pin <= EXP51) {
    /* GPIO pins */
    switch (GPIO_DEV_NUMBER(pin)) {
    case GPIO0_NUMBER:
        gpio_dev = &ARM_GPIO0_DEV;
    break;
    }

    arm_gpio_init(gpio_dev);

    obj->gpio_dev = gpio_dev;
    obj->mps2_io_dev = NULL;
    obj->arm_mps2_io_write = NULL;
    obj->pin_number = GPIO_PIN_NUMBER(pin);
    /* GPIO is input by default */
    obj->direction = PIN_INPUT;
    return;
}

Фактическая карта памяти для устройства записана в CM3DS.h

#define CMSDK_GPIO0_BASE        0x40010000UL
#define CMSDK_GPIO1_BASE        0x40011000UL
#define CMSDK_GPIO2_BASE        0x40012000UL
#define CMSDK_GPIO3_BASE        0x40013000UL
0 голосов
/ 24 февраля 2019

Нет никакой разницы, никакой магии и ничего особенного для mbed, что также делает его особенным.

Ответ приведен в документации к рассматриваемой детали и плате.Вы гуглите или заходите в NXP и ищите mcu: MK66FN2M0VMD18, который, конечно, был по вашей ссылке.Там он скажет вам, что это A cortex-m4 на базе ARM, так что вы захотите перейти на сайт вооружения и получить информацию о процессоре для ядра процессора, встроенного в чип NXP.Вы получите документацию для рассматриваемой платы с сайта, на который вы ссылаетесь, или выполните поиск по названию платы.

Например, в руководстве пользователя для этой платы показаны подключения гироскопа для SDA и SDL, для которых вы используете документацию.микроконтроллер, чтобы узнать об интерфейсе I2C для этой части и об интерфейсе на этих выводах, и / или вы просто ударили по gpio.как правило, сначала лучше всего выполнить бит-бэнг, а затем, при желании, попытаться заставить периферийное устройство mcu i2c работать позже.

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

Теперь, что находится между этой информацией и «mbed os» - это набор драйверов и уровней ОС, по концепции не отличающийся от уровней междуэта веб-страница в вашем браузере на вашем компьютере в вашей операционной системе на материнской плате.Некоторые микросхемы на плате, подключенные через плату или через кабели, а также другие элементы (жесткий диск и т. Д.), Подключенные через кабели или разъемы к другим платам.

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

NXP, вероятно, имеет голые библиотеки для периферийных устройств (MCU), таких как I2C, возможно, также имеет некоторый пример кодакакая-то форма для гироскопа, так как я продолжаю выбирать этот чип, но иногда нет, иногда приходится писать свой собственный, такова природа мира микроконтроллеров.

Аналогично этому mbed, NXP, вероятно, написал кодтаким образом, что это соответствует mbed os (обратите внимание, что mbed bare metal и mbed os, возможно, являются разными интерфейсами) в основном написали драйверы для чипов и плат для этого продукта.Скорее всего, опубликовано на сайте NXP, а не на сайте ARMs mbed, но кто знает, что я не пользуюсь ни mbed, ни CMSIS, так что редко обращаю на это внимание.В интересах NXP предоставить исходный код для этой платы, так как они хотят, чтобы вы использовали эту плату для изготовления продуктов и покупали много чипов, если они препятствовали тому, чтобы все, что они делали, это продавали вам одну или несколько плат ипроиграть.Это природа мира mcu, который отличается от мира материнских плат, где они хотят продать вам один чип и одну плату и называть это днем.Поставщики микроконтроллеров выживают только в том случае, если каждый N-й из нас покупает микросхемы от десятков до сотен тысяч деталей.Чтобы заставить этого N-го человека сделать это, ему нужны справочные / eval-платформы со схемами и исходным кодом, в противном случае этот N-й человек будет использовать ST или ti или какой-либо продукт других поставщиков, предоставивший схему и исходный код.

Таким образом, все, о чем вы спрашиваете, задокументировано в разных местах, это чип на основе ARM (не чип руки), поэтому само ядро ​​руки документировано рукой.Это чип NXP, поэтому остальная часть чипа идеально документирована NXP, но могут быть и другие приобретенные IP-адреса, для которых вам нужно перейти на сайт этого поставщика для документации, в редких случаях для микроконтроллеров, но не редко для микросхем уровня операционной системы (например,чип allwinner на оранжевом пи или чип Broadcom на малиновом пи), чтобы иметь некоторые купленные ip, которые NDA диктует, что они не могут документировать их, и поставщик ip не даст вам документы без NDA, которые вы, вероятно, не сможете получить (обычно USB, DDRи некоторые другие типы ip, которые обычно имеют эти секреты).Вы не должны видеть это на этих микроконтроллерах, в редких случаях они могут сказать, что это 16550-совместимый UART или это ARM-сервер, и вам нужно это Google.

если работает на ОС, включая RTOS, по крайней мере, в общемЕсть исключения из этого.приложения обращаются к apis, которые обращаются к драйверам операционной системы, которые взаимодействуют с периферийными устройствами в чипе (gpio, i2c, spi, uart, usb, таймеры и т. д.), некоторые из которых используют внешний по отношению к интерфейсу чипа другой элемент на платеили подключен к плате.Комбинация приложения, API и драйверов заставляет оконечное периферийное устройство выполнять все, что вы просили, при условии, что программное обеспечение разработано правильно и не содержит ошибок.Это ничем не отличается от написания программы на вашем компьютере.Здесь нет никакой магии.

Ничего особенного в ARM против ARM или x86 или другого процессора, используемого на вашем компьютере.На процессорах общего назначения, таких как ARM и X86, есть инструкции по загрузке / сохранению (чтение / запись), точный синтаксис хорошо зависит от ассемблера, машинный код зависит от процессора.Как упоминалось в вашей другой ссылке, x86 имеет представление о командах ввода / вывода, отличных от инструкций памяти, которые в конечном итоге были в то время всего лишь одним выводом на интерфейсе памяти (ввод / вывод против сигнала памяти / вывод вместе с сигналом чтения против записи /булавка и т. д.)Все ARM представляют собой ввод-вывод с отображением в память, и по большей части, так же как и для x86, существует обратная совместимость, и вы можете прочитать документацию по x86 от intel, чтобы увидеть, как она реализована сегодня на внешней шине (ях) микросхем.

В отличие от x86, ARM приобретается по протоколу IP и скрывается в микросхеме поставщика, поэтому в этом случае шина ARM является внутренней по отношению к микросхеме NXP, в NXP у вас есть декодеры адресов, так как MCU малони одно из этого адресного пространства непосредственно не отображается вне чипа.Таким образом, в документации по NXP вы найдете адресное пространство, специфичное для чипа NXP, например, этот конкретный чип UXP может быть специфичным для этого чипа NXP, и нет никаких оснований предполагать, что он такой же, как другой чип NXP, и, конечно, не тот же адрес или как онработает или интерфейсы / регистры как чип не-NXP, который использует то же ядро ​​ARM.Доступ к периферийным устройствам на кристалле осуществляется через инструкции по загрузке и хранению на шине (ах) ARM внутри чипа.NXP определяет в правилах ARM, какие адреса связаны с чем, флэш-памятью, оперативной памятью и конкретными периферийными устройствами.Есть также прерывания, которые также подключены между ядром и встроенными периферийными устройствами для округления их интерфейсов.

с ОС (RT) - это часто драйвер в ОС, который взаимодействует с apis внутри ОС, которыйв конечном счете, становится одним из видов инструкций загрузки и хранения, вызывающих транзакции шины управления для контроллера памяти в микросхеме nxp, которая на основе адреса передает транзакцию в обработчик в микросхеме (флэш-память, память, определенное периферийное устройство).

Адресное пространство для этого чипа можно найти в документации NXP, некоторые поставщики чипов имеют адресное пространство в одном документе, например в техническом описании, и сведения о полужестких периферийных устройствах с смещениями регистров в другом документе.Но каждый вендор делает свое дело: информация там, как правило, хуже, чем у других (NXP довольно хорош, микрочип довольно плох, ST, TI довольно хорош).Исторически NXP заходил настолько далеко, что имел полный адрес регистра в описании регистра, где у большинства поставщиков базовый адрес задокументирован в другом месте этого документа или другого документа, а периферийная документация показывает только смещения к базе.

*API-интерфейсы 1028 * - это просто API-интерфейсы, разработанные ими как хорошие, плохие или как-то иначе (не думайте, что код поставщика хорош, вы можете увидеть по его взгляду, он редко пишется командой «А», обычно пишется кем-то, кто застрял, делая это).иногда это хорошо / хорошо иногда нет).То же самое касается драйверов операционной системы.

В интересах NXP предоставить готовое приложение для этих плат, демонстрирующее его возможности.Но в отличие от материнской платы компьютера для большинства потребителей этих продуктов, потребители микроконтроллеров в идеале являются разработчиками, создающими продукты на уровне чипа и программного обеспечения, а также для таких продуктов, как это программное обеспечение на уровне платы.Так что, хотя приложение под ключ интересно, мы не покупаем плату, чтобы просто запустить это программное обеспечение, поэтому документация API, исходный код и т. Д. Сверху вниз идеально где-то доступны.mbed - это инструмент для рук, поэтому некоторые из этих программ вам, возможно, придется получить из рук, а не nxp.это зависит от того, как именно и что NXP выбрал для упаковки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...