Project

General

Profile

GPIO

В процессоре P1 реализованы следующие порты GPIO:
GPIOA - 32 разрядов
GPIOB - 32 разрядов
GPIOC - 24 разрядов
GPIOD - 16 разрядов

Выводы портов могут быть сконфигурированы на вход, выход или как альтернативная функция.

Для работы с портами GPIO предназначены следующие регистры:
GPIO_IN - регистр принимаемых данных
GPIO_OUT - регистр передаваемых данных
GPIO_DIR - регистр направления передачи данных (вход или выход)
GPIO_BPS - регистр разрешения альтернативных функций

Рассмотрим пример на Си:

#include <gpio.h>

main()
{
    GPIOB->OUT = 1<<20; //устанавливаем в регистре передаваемых данных 20-й бит порта B в "1" 
    GPIOB->DIR = (1<<20) | (1<<21); //устанавливаем 20 и 21 биты порта B на выход
    //в результате на порту B 20-й бит будет установлен в "1", 21-й бит в "0".
}

Этот же пример на ассемблере:

.include HDL50001_pcf.inc

set_port:
    getl 1<<20
    wrl @1, GPIOB_OUT ;устанавливаем в регистре передаваемых данных 20-й бит порта B в "1" 
    getl ((1<<20) | (1<<21))
    wrl @1, GPIOB_DIR ;устанавливаем 20 и 21 биты порта B на выход
    ;в результате на порту B 20-й бит будет установлен в "1", 21-й бит в "0".
complete

Примечание: Если альтернативная функция битов порта GPIO, задаваемая через BPS - выход, то биты порта конфигурируются в соответствии с направлением BPS. Если альтернативная функция битов порта GPIO, задаваемая через BPS - вход, то биты порта конфигурируются в соответствии с направлением DIR. Таким образом, если установлен бит в DIR в "1", то установка в "1" BPS для текущего бита не позволит ему сконфигурироваться на вход(только на выход). В этом случае необходимо сначала сконфигурировать бит в DIR в "0" и из такого положения с помощью BPS регистра бит конфигурируется на любое направление для альтернативной функции.