Work with UART (ASM) » History » Version 4
« Previous -
Version 4/9
(diff) -
Next » -
Current version
krufter_multiclet, 06/11/2013 05:15 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"
а) Transmit via UART¶
1. Allow alternative port functions.¶
Now, produce two development kits, in which using UART0 and UART3.
Observe assembler commands for allowance alternative port functions.
For UART0:
getl 0x00000F00 wrl @1, GPIOB_BPS
For UART3:
getl 0x00000F00 wrl @1, GPIOD_BPS
2. Configurate UART on transmission, set baudrate.¶
For setting UART on transmission write value in control register:
For UART0:
getl 0x00000002 wrl @1, UART0_CR
For UART3:
getl 0x00000002 wrl @1, UART3_CR
For setting baudrate use division factor BRDIV = Fsys/(8*Fuart - 1)
For speed 38400 kbit/s:
For UART0:
getl 0x00000104 wrl @1, UART0_BDR
For 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