Project

General

Profile

Work with UART (ASM) » History » Version 1

Version 1/9 - Next » - Current version
krufter_multiclet, 06/11/2013 05:01 PM


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 "

.include "HDL50001_pcf.inc" 

а) Передача по UART

1. Разрешаем алтернативные функции порта.

В настоящее время выпущены две отладочные платы, в которых задействованы UART0 и UART3.
Рассмотрим команды ассемблера для разрешения алтернативных функций порта.
Для UART0:

getl 0x00000F00
wrl @1, GPIOB_BPS

Для UART3:

getl 0x00000F00
wrl @1, GPIOD_BPS

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

Для настройки UART на передачу запишем следующее значение в регистр управления:
Для UART0:

getl 0x00000002
wrl @1, UART0_CR

Для UART3:

getl 0x00000002
wrl @1, UART3_CR

Для установки скорости используется коэффициент деления BRDIV = Fsys/(8*Fuart - 1)
Для скорости 38400 кбит/с:

Для UART0:

 getl 0x00000104
 wrl @1, UART0_BDR

Для UART3:

 getl 0x00000104
 wrl @1, UART3_BDR

3. Проверка буфера передатчика на полноту.

Для UART0:

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

Для UART3:

fifo_tx_full:
    rdl UART3_ST
    getl 0x00000200
    and @1, @2
    je @1, fifo_tx_full
    jne @2, send_byte
complete

4. Передача байта по UART.

Для UART0:

    getb 0xAB 
    wrb @1, UART0_DATA

Для UART3:

    getb 0xAB 
    wrb @1, UART3_DATA

В результате можно получить простой пример по отправке байта по UART со скоростью 38400 Кбит/с:

Для UART0:


.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

Для UART3 всё будет аналогично. Ознакомиться с другими примерами работы с UART можно в Хранилище, интересующие вопросы по всем интерфейсам можно задать на форуме.

б) Приём по UART

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

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

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

Для настройки UART на передачу запишем следующее значение в регистр управления:
Для UART0:

getl 0x00000001
wrl @1, UART0_CR

Для UART3:

getl 0x00000001
wrl @1, UART3_CR

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

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

Для UART0:

fifo_rx_newb:
    rdl UART0_ST
    getl 0x00000001
    and @1, @2
    je @1, fifo_rx_newb
    jne @2, get_byte
complete

Для UART3:

fifo_rx_newb:
    rdl UART3_ST
    getl 0x00000001
    and @1, @2
    je @1, fifo_rx_newb
    jne @2, get_byte
complete

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

Для UART0:

rdl UART0_DATA

Для UART3:

rdl UART3_DATA