Работа с UART (ASM) » History » Version 20
« Previous -
Version 20/27
(diff) -
Next » -
Current version
krufter_multiclet, 04/16/2013 07:32 PM
Работа с UART (ASM)¶
Рассмотрим передачу и приём сообщений посредством интерфейса UART подробнее(на ассемблере).
В приведённых ниже примерах кода используется список констант, который необходимо подключить директивой " .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:
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