1i7 (1i7) wrote,
1i7
1i7

Categories:

Лабораторная работа 6: знакомство с промышленной реализацией архитектуры MIPS на примере pic32 (3)

Продолжение, начало Лабораторная работа 6: знакомство с промышленной реализацией архитектуры MIPS на примере pic32 (2)<<.

Блок памяти SFR (ввод-вывод)

SFR (Special runction register - регистры специального назначения) - набор регистров, предназначенных для работы с внешними устройствами, т.е. для организации операций ввода-вывода.

Распиновка

Посмотрим на нашу плату ChipKIT Uno32 поближе.



В центре платы наблюдаем черный квадрат с ямочкой в углу с надписью PIC32 (или подробнее PIC32MX320F128H) и расходящимимся во все стороны ножками цвета металлик. Сверху и внизу платы (если развернуть ее так, как на картинке выше) видим черные параллелепеды с множеством отверстий. Если присмотреться повнимательнее, можно убедиться, что большинство ножек, выходящих из квадрата PIC32, соединены с отверстиями черных параллелепипедов красными дорожками. Также стоит обратить внимание, что все отверстия пронумерованы (почти) по порядку - номера также нарисованы на плате белыми цифрами.

Как нетрудно догадаться, черный квадрат с ямочкой с надписью PIC32 - это и есть микроконтроллер PIC32, который мы рассматриваем в этой лабораторной работе, а пронумерованные отверстия, соединенные с ножками контроллера проводящими дорожками, - это отдельные ножки (хотя в данном исполнении с контактным отверстием ножками их называть может быть не совсем корректно; в английском варианте используется универсальный термин pin пин в стиле унисекс) ввода-вывода, к которым можно подключать внешние устройства проводами и работать с ними из программы, загруженной в контроллер.

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



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

В этом месте обратимся к документу с описанием платы chipKIT™ Uno32 reference manual и промотаем его на страницу 12 к таблице "Pinout Table by Logical Pin Number" ("Таблица распиновки по логическому номеру ножки").





Каждая запись в этой таблице соответствует одной ножке ввода-вывода на плате. В первой колонке "chipKIT Pin #" находим строку с значением "8" (это номер выбранной нами ножки, нарисованный на плате) и смотрим значение в колонке "PIC32 Signal", которое в нашем случае является "IC3/PMCS2/PMA15/INT3/RD10" - это список функциональных имен нашей ножки, под которыми она представлена внутри собственно самого микроконтроллера pic32 (также можно обратить внимание на колонку "PIC32 Pin #" - значение "44" - это порядковый номер ножки-пина опять же внутри микроконтроллера pic32).

Эти же самые имена мы можем наблюдать на схеме микроконтроллера в даташите на pic32 в разделе "Pin Diagrams (64-Pin QFN General Purpose)" на странице 6:




Видим все ту же ножку "IC3/PMCS2/PMA15/INT3/RD10" под номером "44" (можно также проверить, что проводящая дорожка на плате из указанной на картинке ножки "44" ведет именно к ножке chipKIT под номером "8") - все сходится и это хорошо.

Замечание: При программировании микроконтроллера pic32 в данной лабораторной работе мы будем рассматривать именно pic32-специфические номера и наименования ножек. Номер выбранной нами ножки, нарисованный на плате и указанный в поле "chipKIT Pin #" в таблице выше, имеет отношение к конкретной плате ChipKIT Uno32, хотя и проецируется на внутренние номера ножек контроллера pic32 однозначным образом. Дело в том, что платы ChipKIT можно программировать в двух режимах - упрощенном режиме совместимости с платформой Arduino (и тогда бы мы обращали внимание только на chipKit Pin #) и во взрослом режиме программирования контроллера напрямую вне контекста текущей платы (и здесь нужны номера именно из взрослой документации на контроллер). Т.к. мы договорились, что в данной лабораторной работе мы будем рассматривать именно взрослый вариант, нашей конечной целью является имеено pic32-специфическая нумерация, а номера в стиле chipKIT мы рассматриваем только на промежуточном этапе и далее они нигде всплывать не будут. Если бы мы использовали другую микроконтроллерную плату, основанную на pic32, но не из семейства ChipKIT, этот "внешний" номер ножки мог бы быть другим или бы его не было вовсе (внешние ножки вполне могли бы быть обозначены сразу pic32-нумерацией).

Так или иначе, мы научились узнавать имя и номер выбранной нами внешней ножки ввода-вывода в том виде, в котором они представлены в документации на pic32, можно двигаться дальше.

Работа с портами ввода-вывода через регистры

Каждая ножка в режиме цифрового ввода-вывода может иметь значение 1 (на ножку подан определенный уровень напряжения, т.е. "плюс") или 0 (ножка подключена к земле), т.е. одна ножка несет 1 бит информации.

В pic32 все ножки ввода-вывода объединены в группы по 16 штук (вероятно для некоторой совместимости со старыми 16тибитными контроллерами), которые называются портами ввода-вывода (i/o ports). Всего в pic32 определено 7 таких 16тибитных портов, каждому присвоено имя: PORTA, PORTB, PORTC, PORTD, PORTE, PORTF, PORTG.

Внутри порта все ножки (пины) также пронумерованы от 0ля до 15ти. Например для порта "A" PORTA имена его внутренних ножек будут такие: RA0, RA1, RA2, ..., RA15; для PORTB: RB0, RB1, RB2, ..., RB15 и т.п. ("A", "B" и т.п. берется из имени порта, дальше порядковый номер ножки, "R" в начале вероятно тоже что-то означает - скорее всего от Register, но не факт).

Возвращаемся к нашей ножке под pic32-номером "44" с именем "IC3/PMCS2/PMA15/INT3/RD10" и обращаем внимание на последний кусок в ее имени - "RD10". Следуя описанной выше схеме именования это очевидно значит, что мы имеем дело с портом D (PORTD), а именно с его ножкой под номером 10.

Замечание: Другие части имени ножки "IC3", "PMCS2", "PMA15", "INT3" и "RD10" указывают на режимы и роли, которые также может поддерживать и играть эта ножка внутри контроллера. Последний режим цифрового ввода-вывода - всего лишь один из многих доступных режимов работы. Определенные ножки контроллера также могут работать в режиме аналогового ввода-вывода, использоваться для подачи внешних тактовых сигналов в контроллер, работать в режиме широтно-импульсной модуляции (pulse-width modulation - pwm) и т.п. Все эти дополнительные роли и режимы могут потребоваться для решения тех или иных прикладных задач, но мы их сейчас рассматривать вообще не будем, а ограничимся уже упомянутой традиционной ролью цифрового ввода-вывода в качестве 10й ножки порта D.

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

Каждый такой регистр представляет собой 32хбитный блок памяти (слово), каждый из младших 16ти бит которого подключен к отдельной ножке порта (старшие 16 бит не задействованы). Таким образом, записывая и считывая значения отдельных битов соответствующего регистра можно манипулировать отдельными ножками порта — читать и устанавливать их значения (1 или 0) и задавать нужные настройки.

Посмотрим, как выглядят специальные регистры SFR, назначенные на порт PORTD – для этого в очередной раз обратимся к документации контроллера pic32 и откроем таблицу из раздела «4.0 Memory Organization > 4.2 PIC32MX3XX/4XX Memory Layout > TABLE 4-26: PORTD Registers Map for PIC32MX... devices only».



Действительно видим множество регистров - 32хбитных ячеек памяти, каждая из которых имеет определенный адрес в глобальном виртуальном адресном пространстве, условное имя и действительно разбита на отдельные биты — по биту на ножку порта.

Основные регистры для каждого порта: TRIS, PORT и LAT (еще есть регистр ODC — Open-drain — режим «открытого стока» или «открытого коллектора» - используется, когда надо повесить несколько передатчиков на одну шину, но мы его касаться не будем).

Регистр TRIS (от слова Tristate — тристабильный) позволяет задать режим работы каждой из ножек порта — ввод или вывод. Если соответствующий ножке бит регистра установлен в 1, ножка будет работать в режиме вывода, если в 0 — в режиме ввода. По умолчанию все ножки работают в режиме вывода, т. е. все биты регистра TRIS установлены в 1.
Регистр PORT (от слова Port — порт) используется для считывания значения с ножек, работающих в режиме ввода. Нужное значение (1 или 0) находится в соответствующем бите регистра.
Регистр LAT (от слова Latch — защелка) позволяет записывать значения на ножки, работающие в режиме вывода. Нужное значение (1 или 0) необходимо записать в соответствующий бит регистра.

Таким образом, для порта PORTD, чтобы установить режим работы ножек на ввод или вывод, используем биты регистра TRISD (блок памяти, находящийся по адресу 0xBF88_60C0), для чтения значений каждой из ножек читаем значения из регистра PORTD (блок памяти по адресу 0xBF88_60D0), для установки значений ножек записываем значения в регистр LATD (блок памяти по адресу 0xBF88_60E0).

Также для каждого из 4х основных регистров существует по 3 вспомогательных регистра CLR, SET и INV, облегчающих манипуляцию отдельными битами внутри регистра. Вспомогательные регистры расположены в памяти по адресам со сдвигами 0x4, 0x8 и 0xC относительного адреса основного регистра соответственно. Для TRISD это TRISDCLR (0xBF88_60C4), TRISDSET (0xBF88_60C8) и TRISDINV (0xBF88_60CC); для PORTD: PORTDCLR (0xBF88_60D4), PORTDSET (0xBF88_60D8), PORTDINV (0xBF88_60DC); для LATD: LATDCLR (0xBF88_60E4), LATDSET (0xBF88_60E8), LATDINV (0xBF88_60EC).



Примеры работы с ножками при помощи перечисленных регистров SFR из программ на ассемблере MIPS и Си далее.
Продолжение Лабораторная работа 6: знакомство с промышленной реализацией архитектуры MIPS на примере pic32 (4) >>
Tags: microchip, mips, pic32, лаба 6, цифровая электроника для программистов
Subscribe

  • Post a new comment

    Error

    default userpic

    Your IP address will be recorded 

    When you submit the form an invisible reCAPTCHA check will be performed.
    You must follow the Privacy Policy and Google Terms of use.
  • 2 comments