Project

General

Profile

Работа с 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>