Project

General

Profile

R1 GPIO » History » Version 3

Version 2 (krufter_multiclet, 05/13/2015 05:20 PM) → Version 3/5 (krufter_multiclet, 05/13/2015 05:37 PM)

h1. GPIO Мультиклет R1

В процессоре R1 реализованы следующие порты GPIO:
GPIOA - 30 разрядов
GPIOB - 30 разрядов
GPIOC - 28 разрядов
GPIOD - 32 разрядов
GPIOE - 28 разрядов
GPIOF - 31 разряд

Выводы портов могут быть сконфигурированы на вход, выход или как альтернативная функция.
По форме и уровню сигналов на выводах портов может быть задано прерывание(по фронту, спаду; высокому, низкому уровню ).

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

Рассмотрим пример на Си:
<pre><code class="c">
#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".
}
</code></pre>

Этот же пример на ассемблере:
<pre><code class="php">
.include R1_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
</code></pre>