LPC
Работа с портами ввода/вывода LPC1114. Библиотека gpio.c.
Для удобства работы со своими микроконтроллерами, NXP предоставляет несколько библиотек периферийных устройств. В состав этих библиотек включены функции, реализующие работу с оборудованием на более высоком уровне, чем это делается с помощью прямого программирования регистров. Для работы с портами ввода вывода используется библиотека gpio.c, описание функций которой приведено ниже.
Фактически библиотека gpio.c содержит функции высокого уровня, осуществляющие доступ к регистрам микроконтроллера LPC1114. Для удобства пользователя, все функции работают с отдельными битами. В описании функций используется несколько переменных. Наиболее часто встречаются следующие:
- portNum – номер используемого порта.
- bitPosi – номер бита с которым производится работа
- bitVal – значение бита
Все переменные имею тип uint32_t, который является обозначением беззнакового целого - unsigned int.
1. Инициализация портов ввода вывода
GPIOInit(void)
Выполняет подключение модуля GPIO к шине AHB. Обязательна к применению перед началом работы с портами.
2. Обработчики прерываний
PIOINT0_IRQHandler(void);
PIOINT1_IRQHandler(void);
PIOINT2_IRQHandler(void);
PIOINT3_IRQHandler(void);
Каждый из обработчиков прерываний работает с двумя внешними переменными: gpiox_counter и px_1_counter, где x – порта. При возникновении прерывания по любой линии порта, счетчик gpiox_counter увеличивается на 1. В случае, если прерывание генерируется по линии 1, также инкрементируется px_1_counter.
3. Настройка прерывания
GPIOSetInterrupt(portNum, bitPosi, sense, single, event)
Функция используется при необходимости настройки прерывания. Имеет следующие параметры:
Sense – тип логики прерывания. 0- фронту, 1 – по уровню.
Single – тип формирования прерывания. 0 – определяется переменной event, 1 прерывание формируется по двум фронтам, то есть импульсу.
Event – событие прерывания. 0 - задний фронт или низкий уровень, 1 - передний фронт или высокий уровень. (уровень или фронт определяется переменной Sense)
4. Разрешение прерывания
GPIOIntEnable(portNum, bitPosi)
Функция разрешает генерацию прерываний.
5. Запрет прерываний
GPIOIntDisable( uint32_t portNum, uint32_t bitPosi)
Функция запрещает генерацию прерываний
6. Флаг прерывания
GPIOIntStatus(portNum, bitPosi)
Функция возвращает 0 при отсутствии прерывания по выбранной линии и 1 при его наличии.
7. Сброс флага прерывания
GPIOIntClear(portNum, bitPosi)
8. Функция установки отдельного бита.
GPIOSetValue(portNum, bitPosi, bitVal) - установка значения бита.
9. Функция направления работы порта.
GPIOSetDir(portNum, bitPosi, dir) – установка направления работы линии. Задается в переменной dir. Если последняя имеет значение 0, то линия работает как вход, значение 1 переключает линию на выход.