Работа с портами ввода/вывода LPC1114.

Работа с периферийными портами в LPC11xx организована достаточно просто. Текущие состояния линий вывода/вывода находятся в регистре GPIOxDATA, где x – номер порта. Направление работы отдельных линий на вход или выход задается в регистре GPIOxDIR. При этом значение 0 в бите GPIOxDIR, соответствующем номеру линии, означает, что линия настроена на вход, 1 – на выход. После сброса все линии работают как входные. Перед началом работы проводится настройка GPIOАлгоритм настройки работы с GPIO состоит из следующих действий:

  1. Подключение GPIO к шине AHB. Можно не делать, так как после сброса подключение устанавливается по умолчанию.
  2. Настройка направления работы отдельных линий, выполняется установкой соответствующих битов в GPIOxDIR.
  3. При необходимости, настройка подтягивающих резисторов. По умолчанию, после сброса включен pull-up резистор.
  4. Настройка генерации прерываний, также при необходимости.

После выполнения этих действий появляется возможность работы с линиями дискретного ввода/вывода. Доступно два режима: классическая работа со всем портом с помощью регистра GPIOxDATA и доступ к отдельным битам с помощью маски.

Работа с регистром GPIOxDATA.

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

Работа с отдельными линиями.

Работа с отдельными линиями выполняется с помощью операции маскирования. Это означает, что вначале необходимо установить маску, в которой единицы в отдельных разрядах будут разрешать изменение данных в соответствующих разрядах GPIOxDATA.
Маскирование линий GPIOНапример, для доступа ко всему регистру значение маски 0x3FFC, а чтобы установить высокий логический уровень на 5 линии порта GPIO3, необходимо записать следующее выражение:

LPC_GPIO3->MASKED_ACCESS[32] = 32;

Здесь 32 - значение равное 2 в 5 степени означает разрешение работы с 5 битом GPIOxDATA и соответственно с пятой линией порта. Для установки одновременно 5 и 0 линии выражение примет вид:

LPC_GPIO3->MASKED_ACCESS[33] = 33;

Значение в правой части может быть любым, главное чтобы отдельные биты двоичного представления соответствовали нужным данным (32d=10000b, 33d=10001b).

Настройка подтягивающих резисторов.

Каждая линия ввода/вывода в LPC11xx имеет отдельный регистр конфигурации IOCON_PIOx_n, где x-номер порта, n-номер линии. Эти регистры позволяют подключать дополнительные периферийные модули, а также подтягивающие резисторы. За последние отвечают биты 4 и 3 каждого регистра. Их возможные комбинации имеют следующие функции:

  • 00 – не активно
  • 01 – подтягивающий резистор к общей шине (pull-down)
  • 10 - подтягивающий резистор к шине питания (pull-up)
  • 11 – мультипликативный режим. Подключает подтягивающий резистор к шине питания, если на входе присутствует логическая 1, и к земле, если на входе логический 0. Данный режим используется для работы с неустойчивыми сигналами.

Еще по теме:
Работа с портами ввода/вывода LPC1114. Регистры 
Работа с портами ввода/вывода LPC1114. Пример программы. 

You have no rights to post comments