Project

General

Profile

Work with UART (ASM) » History » Version 6

Version 5 (krufter_multiclet, 06/11/2013 05:17 PM) → Version 6/9 (krufter_multiclet, 06/11/2013 05:26 PM)

h1. Work with UART (ASM)

Observe transmit and receive messages via UART more details(on Assembler).
In code examples constant list is used, which need required with directive " .include "

<pre>
.include "HDL50001_pcf.inc"
</pre>

h2. а) Transmit via UART

h3. 1. Allow alternative port functions.

Now, produce two development kits, in which using UART0(HW1-MCp04) and UART3(LDM-MCp04).
Observe assembler commands for allowance alternative port functions.
For UART0:
<pre>
getl 0x00000F00
wrl @1, GPIOB_BPS
</pre>

For UART3:
<pre>
getl 0x00000F00
wrl @1, GPIOD_BPS
</pre>

h3. 2. Configurate UART on transmission, set baudrate.

For setting UART on transmission write value in control register:
For UART0:
<pre>
getl 0x00000002
wrl @1, UART0_CR
</pre>

For UART3:
<pre>
getl 0x00000002
wrl @1, UART3_CR
</pre>

For setting baudrate use division factor BRDIV = Fsys/(8*Fuart - 1)
For speed 38400 kbit/s:

For UART0:
<pre>
getl 0x00000104
wrl @1, UART0_BDR
</pre>

For UART3:
<pre>
getl 0x00000104
wrl @1, UART3_BDR
</pre>

h3. 3. Check transmitter FIFO on full.

For UART0:
<pre>
fifo_tx_full:
rdl UART0_ST
getl 0x00000200
and @1, @2
je @1, fifo_tx_full
jne @2, send_byte
complete
</pre>

For UART3:
<pre>
fifo_tx_full:
rdl UART3_ST
getl 0x00000200
and @1, @2
je @1, fifo_tx_full
jne @2, send_byte
complete
</pre>

h3. 4. Transmit byte via Передача байта по UART.

For Для UART0:
<pre>
getb 0xAB
wrb @1, UART0_DATA
</pre>

For Для UART3:
<pre>
getb 0xAB
wrb @1, UART3_DATA
</pre>

As a result you can get simple example - transmission byte via В результате можно получить простой пример по отправке байта по UART with baudrate со скоростью 38400 kbit/s: Кбит/с:

For Для UART0:
<pre>

.include "HDL50001_pcf.inc"

.text

preset_UART0:
getl 0x00000F00
wrl @1, GPIOB_BPS
getl 0x00000104
wrl @1, UART0_BDR
getl 0x00000002
wrl @1, UART0_CR
jmp fifo_tx_full
complete

fifo_tx_full:
rdl UART0_ST
getl 0x00000200
and @1, @2
je @1, fifo_tx_full
jne @2, paragraph
complete

send_byte:
getb 0xAB
wrb @1, UART0_DATA
complete
</pre>

For Для UART3 example is analogie. All всё будет аналогично. Ознакомиться с другими примерами работы с UART examples are available in Repository, any questions about interfaces you can discuss at Community. можно в Хранилище, интересующие вопросы по всем интерфейсам можно задать на форуме.

h2. б) Приём по UART

Для приёма байта по UART необходимо:

h3. 1. Разрешить алтернативные функции портов (аналогично пункту 1 в "передаче")

h3. 2. Настраиваем UART на приём, устанавливаем скорость работы.

Для настройки UART на передачу запишем следующее значение в регистр управления:
Для UART0:
<pre>
getl 0x00000001
wrl @1, UART0_CR
</pre>

Для UART3:
<pre>
getl 0x00000001
wrl @1, UART3_CR
</pre>

Настройка скорости работы аналогично пункту 2 в "передаче".

h3. 3. Проверить наличие новых данных в буфере приёма

Для UART0:
<pre>
fifo_rx_newb:
rdl UART0_ST
getl 0x00000001
and @1, @2
je @1, fifo_rx_newb
jne @2, get_byte
complete
</pre>

Для UART3:
<pre>
fifo_rx_newb:
rdl UART3_ST
getl 0x00000001
and @1, @2
je @1, fifo_rx_newb
jne @2, get_byte
complete
</pre>

h3. 4. Принять байт

Для UART0:
<pre>
rdl UART0_DATA
</pre>

Для UART3:
<pre>
rdl UART3_DATA
</pre>