R1 GPIO » History » Version 3
krufter_multiclet, 05/13/2015 05:37 PM
1 | 1 | krufter_multiclet | h1. GPIO Мультиклет R1 |
---|---|---|---|
2 | 1 | krufter_multiclet | |
3 | 1 | krufter_multiclet | В процессоре R1 реализованы следующие порты GPIO: |
4 | 1 | krufter_multiclet | GPIOA - 30 разрядов |
5 | 1 | krufter_multiclet | GPIOB - 30 разрядов |
6 | 1 | krufter_multiclet | GPIOC - 28 разрядов |
7 | 1 | krufter_multiclet | GPIOD - 32 разрядов |
8 | 1 | krufter_multiclet | GPIOE - 28 разрядов |
9 | 1 | krufter_multiclet | GPIOF - 31 разряд |
10 | 1 | krufter_multiclet | |
11 | 1 | krufter_multiclet | Выводы портов могут быть сконфигурированы на вход, выход или как альтернативная функция. |
12 | 2 | krufter_multiclet | По форме и уровню сигналов на выводах портов может быть задано прерывание(по фронту, спаду; высокому, низкому уровню ). |
13 | 2 | krufter_multiclet | |
14 | 2 | krufter_multiclet | Для работы с портами GPIO предназначены следующие регистры: |
15 | 2 | krufter_multiclet | GPIO_IN - регистр принимаемых данных |
16 | 2 | krufter_multiclet | GPIO_OUT - регистр передаваемых данных |
17 | 2 | krufter_multiclet | GPIO_DIR - регистр направления передачи данных (вход или выход) |
18 | 2 | krufter_multiclet | GPIO_MSK - регистр маски прерываний |
19 | 2 | krufter_multiclet | GPIO_POL - регистр настройки прерываний по событию - полярность сигнала |
20 | 2 | krufter_multiclet | GPIO_EDG - регистр настройки прерываний по событию - составляющая сигнала |
21 | 2 | krufter_multiclet | GPIO_BPS - регистр разрешения альтернативных функций |
22 | 2 | krufter_multiclet | |
23 | 2 | krufter_multiclet | Рассмотрим пример на Си: |
24 | 3 | krufter_multiclet | <pre><code class="c"> |
25 | 3 | krufter_multiclet | #include <gpio.h> |
26 | 3 | krufter_multiclet | |
27 | 3 | krufter_multiclet | main() |
28 | 3 | krufter_multiclet | { |
29 | 3 | krufter_multiclet | GPIOB->OUT = 1<<20; //устанавливаем в регистре передаваемых данных 20-й бит порта B в "1" |
30 | 3 | krufter_multiclet | GPIOB->DIR = (1<<20) | (1<<21); //устанавливаем 20 и 21 биты порта B на выход |
31 | 3 | krufter_multiclet | //в результате на порту B 20-й бит будет установлен в "1", 21-й бит в "0". |
32 | 3 | krufter_multiclet | } |
33 | 3 | krufter_multiclet | </code></pre> |
34 | 3 | krufter_multiclet | |
35 | 3 | krufter_multiclet | Этот же пример на ассемблере: |
36 | 3 | krufter_multiclet | <pre><code class="php"> |
37 | 3 | krufter_multiclet | .include R1_pcf.inc |
38 | 3 | krufter_multiclet | |
39 | 3 | krufter_multiclet | set_port: |
40 | 3 | krufter_multiclet | getl 1<<20 |
41 | 3 | krufter_multiclet | wrl @1, GPIOB_OUT ;устанавливаем в регистре передаваемых данных 20-й бит порта B в "1" |
42 | 3 | krufter_multiclet | getl ((1<<20) | (1<<21)) |
43 | 3 | krufter_multiclet | wrl @1, GPIOB_DIR ;устанавливаем 20 и 21 биты порта B на выход |
44 | 3 | krufter_multiclet | ;в результате на порту B 20-й бит будет установлен в "1", 21-й бит в "0". |
45 | 3 | krufter_multiclet | complete |
46 | 3 | krufter_multiclet | </code></pre> |
47 | 2 | krufter_multiclet | |
48 | 2 | krufter_multiclet | |
49 | 2 | krufter_multiclet | |
50 | 2 | krufter_multiclet | |
51 | 2 | krufter_multiclet | |
52 | 2 | krufter_multiclet |