"Понты" общего назначения
------------------------------------------------------------------------
Родные больного - профессору (при вручении гонорара):
- Скажите, профессор, он будет жить?
- Пока - нет.
------------------------------------------------------------------------
Ну что ж продолжем!
И так порты общего назначения МК LPC...
Микроконтроллеры
LPC.... оснащены несколькими 32-разрядными портами ввода-вывода. Начиная в определённой модели, в состав микроконтроллеров заложен усовершенствованный набор регистров для быстрого управления портами общего назначения. В документации на конкретную модель их легко узнать по начальной букве "F”, например:
FIO0DIR, FIO0SET, FIO0CLR.
Каждый из выводов портов общего назначения может быть настроен как вход или выход с помощью регистра
FIOnDIR (n- номер порта). Для настройки вывода на выход соответствующий разряд регистра необходимо установить в единицу, на вход – в ноль (это сделано по умолчанию для всех портов):
PHP код:
|
FIO0DIR|= (1‹‹15); // Вывод 15 порта 0 настроить на выход.
FIO0DIR&=~(1‹‹15); // Вывод 15 порта 0 настроить как вход.
|
Помимо 32-х разрядных регистров
FIOnDIR, также можно использовать четыре восьмиразрядных регистра для отдельных байтов порта -
FIOnDIR0, FIOnDIR1, FIOnDIR2, FIOnDIR3, задающих направления для разрядов 0-7, 8-15, 16-23 и 24-31. Или два шестнадцатиразрядных –
FIOnDIRL и FIOnDIRU, определяющих направления выводов 0-15 и 16-31. При использовании указанных регистров настройка вывода 26 порта 1 будет выглядеть следующим образом:
PHP код:
|
FIO1DIR3 |= (1‹‹2); // Вывод 26 порта 1 настроить на выход .
FIO1DIRU |= (1‹‹10); // Вывод 26 порта 1 настроить на выход .
|
.
Устанавливать и сбрасывать выводы портов можно при помощи специально предназначенных для этого регистров
SET и
CLR. Для установки нужного вывода порта в соответствующий разряд регистра
FIOnSET необходимо записать единичный бит, для сброса вывода необходимо установить в единицу соответствующий бит в другом регистре -
FIOnCLR:
PHP код:
|
FIO1SET = (1‹‹8); // Установить вывод 8 порта 1.
FIO1CLR = (1‹‹8); // Сбросить вывод 8 порта 1.
|
Можно использовать также четыре однобайтовых и два двухбайтовых регистра установки и сброса:
FIOnSET0, FIOnSET0, FIOnSET0, FIOnSET0 и FIOnSETL, FIOnSETU.
Для записи данных в порт и чтения фактического состояния выводов порта используют 32-разрядные регистры
FIOnPIN:
PHP код:
|
FIO1PIN=0xFFFFFFFF; // Записать единицы во все разряды порта.
FIO1PIN= FIO1PIN ^ (1‹‹8); // Изменить состояние вывода 8 на противоположное.
|
Регистры записи/чтения порта с одно- и двухбайтовой адресацией:
FIOnPIN0, FIOnPIN1, FIOnPIN2, FIOnPIN3 и FIOnPINL, FIOnPINL.
Ещё одна особенность работы с портами микроконтроллеров
LPC – возможность защитить конкретные выводы портов от изменений командами
FIOnPIN, FIOnSET и FIOnCLR с помощью регистров защитных масок
FIOnMASK.
Если один или несколько разрядов регистра
FIOnMASK установить в единицу, то он будет защищён от изменений командами записи, установки и сброса. Это очень удобно для записи необходимых числовых значений в группу разрядов порта, без воздействия на окружающие выводы.
PHP код:
|
FIO0MASK=~((1‹‹4)| (1‹‹5)| (1‹‹6)| (1‹‹7));
// Разрешить старшую тетраду первого байта.
FIO0PIN = 0x0000 00A0;
// Записать в тетраду число 0x0A.
|
В следующий раз мигнем свето диодом! Правда можно бы и дисплеем сразу мигнуть, но пока, по тех.причинам оставим на потом эту затею! Разве что предоставить слово нашему МК и через ЦАП предоставить ему слово в свою поддержку!