Работа с UART (ASM) » History » Version 13
krufter_multiclet, 04/16/2013 02:51 PM
1 | 1 | krufter_multiclet | h1. Работа с UART (ASM) |
---|---|---|---|
2 | 1 | krufter_multiclet | |
3 | 2 | krufter_multiclet | Рассмотрим передачу и приём сообщений посредством интерфейса UART подробнее(на ассемблере). |
4 | 2 | krufter_multiclet | В приведённых ниже примерах кода используется список констант, который необходимо подключить директивой " .include " |
5 | 2 | krufter_multiclet | <pre> |
6 | 2 | krufter_multiclet | .include "HDL50001_pcf.inc" |
7 | 2 | krufter_multiclet | </pre> |
8 | 2 | krufter_multiclet | |
9 | 2 | krufter_multiclet | |
10 | 10 | krufter_multiclet | h2. а) Передача по UART |
11 | 7 | krufter_multiclet | |
12 | 10 | krufter_multiclet | h3. 1. Разрешаем алтернативные функции порта. |
13 | 2 | krufter_multiclet | |
14 | 4 | krufter_multiclet | В настоящее время выпущены две отладочные платы, в которых задействованы UART0(HW1-MCp04) и UART3(LDM-MCp04). |
15 | 2 | krufter_multiclet | Рассмотрим команды ассемблера для разрешения алтернативных функций порта. |
16 | 2 | krufter_multiclet | Для UART0: |
17 | 2 | krufter_multiclet | <pre> |
18 | 5 | krufter_multiclet | getl 0x00000F00 |
19 | 5 | krufter_multiclet | wrl @1, GPIOB_BPS |
20 | 5 | krufter_multiclet | </pre> |
21 | 5 | krufter_multiclet | |
22 | 5 | krufter_multiclet | Для UART3: |
23 | 5 | krufter_multiclet | <pre> |
24 | 5 | krufter_multiclet | getl 0x00000F00 |
25 | 5 | krufter_multiclet | wrl @1, GPIOD_BPS |
26 | 2 | krufter_multiclet | </pre> |
27 | 6 | krufter_multiclet | |
28 | 10 | krufter_multiclet | h3. 2. Настраиваем UART на передачу, устанавливаем скорость работы. |
29 | 6 | krufter_multiclet | |
30 | 6 | krufter_multiclet | Для настройки UART на передачу запишем следующее значение в регистр управления: |
31 | 6 | krufter_multiclet | Для UART0: |
32 | 6 | krufter_multiclet | <pre> |
33 | 6 | krufter_multiclet | getl 0x00000002 |
34 | 6 | krufter_multiclet | wrl @1, UART0_CR |
35 | 6 | krufter_multiclet | </pre> |
36 | 6 | krufter_multiclet | |
37 | 6 | krufter_multiclet | Для UART3: |
38 | 6 | krufter_multiclet | <pre> |
39 | 6 | krufter_multiclet | getl 0x00000002 |
40 | 6 | krufter_multiclet | wrl @1, UART3_CR |
41 | 6 | krufter_multiclet | </pre> |
42 | 11 | krufter_multiclet | |
43 | 11 | krufter_multiclet | Для установки скорости используется коэффициент деления BRDIV = Fsys/(8*Fuart - 1) |
44 | 12 | krufter_multiclet | Для скорости 38400 кбит/с: |
45 | 12 | krufter_multiclet | |
46 | 12 | krufter_multiclet | Для UART0: |
47 | 12 | krufter_multiclet | <pre> |
48 | 12 | krufter_multiclet | getl 0x00000104 |
49 | 12 | krufter_multiclet | wrl @1, UART0_BDR |
50 | 12 | krufter_multiclet | </pre> |
51 | 12 | krufter_multiclet | |
52 | 12 | krufter_multiclet | Для UART3: |
53 | 12 | krufter_multiclet | <pre> |
54 | 12 | krufter_multiclet | getl 0x00000104 |
55 | 12 | krufter_multiclet | wrl @1, UART3_BDR |
56 | 12 | krufter_multiclet | </pre> |
57 | 13 | krufter_multiclet | |
58 | 13 | krufter_multiclet | h3. 3. Проверка буфера передатчика на полноту. |
59 | 13 | krufter_multiclet | |
60 | 13 | krufter_multiclet | Для UART0: |
61 | 13 | krufter_multiclet | <pre> |
62 | 13 | krufter_multiclet | fifo_tx_full: |
63 | 13 | krufter_multiclet | rdl UART0_ST |
64 | 13 | krufter_multiclet | getl 0x00000200 |
65 | 13 | krufter_multiclet | and @1, @2 |
66 | 13 | krufter_multiclet | je @1, fifo_tx_full |
67 | 13 | krufter_multiclet | jne @2, paragraph |
68 | 13 | krufter_multiclet | complete |
69 | 13 | krufter_multiclet | </pre> |
70 | 13 | krufter_multiclet | |
71 | 13 | krufter_multiclet | h3. 4. Передача байта по UART. |
72 | 13 | krufter_multiclet | |
73 | 13 | krufter_multiclet | Для UART0: |
74 | 13 | krufter_multiclet | <pre> |
75 | 13 | krufter_multiclet | getb 0xAB |
76 | 13 | krufter_multiclet | wrb @1, UART0_DATA |
77 | 13 | krufter_multiclet | </pre> |
78 | 13 | krufter_multiclet | |
79 | 13 | krufter_multiclet | Для UART3: |
80 | 13 | krufter_multiclet | <pre> |
81 | 13 | krufter_multiclet | getb 0xAB |
82 | 13 | krufter_multiclet | wrb @1, UART3_DATA |
83 | 13 | krufter_multiclet | </pre> |