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