Project

General

Profile

Работа с UART (ASM) » History » Version 14

krufter_multiclet, 04/16/2013 03:05 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 14 krufter_multiclet
    jne @2, send_byte
68 13 krufter_multiclet
complete
69 13 krufter_multiclet
</pre>
70 1 krufter_multiclet
71 14 krufter_multiclet
Для UART3:
72 14 krufter_multiclet
<pre>
73 14 krufter_multiclet
fifo_tx_full:
74 14 krufter_multiclet
    rdl UART3_ST
75 14 krufter_multiclet
    getl 0x00000200
76 14 krufter_multiclet
    and @1, @2
77 14 krufter_multiclet
    je @1, fifo_tx_full
78 14 krufter_multiclet
    jne @2, send_byte
79 14 krufter_multiclet
complete
80 14 krufter_multiclet
</pre>
81 14 krufter_multiclet
82 14 krufter_multiclet
83 13 krufter_multiclet
h3. 4. Передача байта по UART.
84 13 krufter_multiclet
85 13 krufter_multiclet
Для UART0:
86 13 krufter_multiclet
<pre>
87 13 krufter_multiclet
    getb 0xAB 
88 13 krufter_multiclet
    wrb @1, UART0_DATA
89 13 krufter_multiclet
</pre>
90 13 krufter_multiclet
91 13 krufter_multiclet
Для UART3:
92 13 krufter_multiclet
<pre>
93 13 krufter_multiclet
    getb 0xAB 
94 1 krufter_multiclet
    wrb @1, UART3_DATA
95 14 krufter_multiclet
</pre>
96 14 krufter_multiclet
97 14 krufter_multiclet
В результате можно получить простой пример по отправке байта по UART со скоростью 38400 Кбит/с:
98 14 krufter_multiclet
99 14 krufter_multiclet
Для UART0:
100 14 krufter_multiclet
<pre>
101 14 krufter_multiclet
preset_UART0:
102 14 krufter_multiclet
    getl 0x00000F00
103 14 krufter_multiclet
    wrl @1, GPIOB_BPS
104 14 krufter_multiclet
    getl 0x00000104
105 14 krufter_multiclet
    wrl @1, UART0_BDR
106 14 krufter_multiclet
    getl 0x00000002
107 14 krufter_multiclet
    wrl @1, UART0_CR
108 14 krufter_multiclet
    jmp fifo_tx_full
109 14 krufter_multiclet
complete
110 14 krufter_multiclet
111 14 krufter_multiclet
fifo_tx_full:
112 14 krufter_multiclet
    rdl UART0_ST
113 14 krufter_multiclet
    getl 0x00000200
114 14 krufter_multiclet
    and @1, @2
115 14 krufter_multiclet
    je @1, fifo_tx_full
116 14 krufter_multiclet
    jne @2, paragraph
117 14 krufter_multiclet
complete
118 14 krufter_multiclet
119 14 krufter_multiclet
send_byte:
120 14 krufter_multiclet
    getb 0xAB 
121 14 krufter_multiclet
    wrb @1, UART0_DATA
122 14 krufter_multiclet
complete
123 13 krufter_multiclet
</pre>