NXP i.MX7D отладочный терминал через UART5

На плате установлен преобразователь USB-UART FT232RQ. Он висит на UART5.
Сколько я всего понаотлаживал через него...

Слов нету..

	@ Переназначить ножки
	MOV32 R0, IOMUXC_BASE
	MOV R1, 1 @ Режим ALT1 для UART5
	STR R1, [R0, SW_MUX_CTL_PAD_I2C4_SCL] @ UART5_RX
	STR R1, [R0, SW_MUX_CTL_PAD_I2C4_SDA] @ UART5_TX

	@ Определить источник тактовых импульсов и настроить делитель
	@ Модуль UART должен тактироваться частотой 80 МГц
	MOV32 R0, CCM_BASE + TARGET_ROOT99 @ UART5_CLK_ROOT
	MOV32 R1, 1 << ROOT_ENABLE + 4 << MUX + (1-1) << PRE_PODF + (6-1) << POST_PODF
	STR R1, [R0] @ Источник: SYS_PLL, частота 480/6 = 80МГц

	@ Затактировать
	MOV32 R0, CCM_BASE + CCGR152 @ UART5 clock gate
	MOV R1, 0x00003333
	STR R1, [R0]


	MOV32 R0, UART5_BASE

	@ Включить модуль
	MOV R1, 1 << UARTEN
	STR R1, [R0, UCR1]
	@ Сбросить
	MOV R1, 1 << SRST
	STR R1, [R0, UCR2]
	@ Дождаться завершения сброса
	1:
	LDR R1, [R0, UTS]
	TST R1, 1 << SOFTRST
	BNE 1b @ Переход, если флаг SOFTRST==1


	@ Основные настройки
	MOV32 R1, 1 << IRTS + 1 << WS + 1 << TXEN + 1 << RXEN + 1 << SRST
	STR R1, [R0, UCR2]

	@ MUXED mode
	LDR R1, [R0, UCR3]
	BIS R1, 1 << RXDMUXSEL
	STR R1, [R0, UCR3]

	@ Включить прерывания
	LDR R1, [R0, UCR1]
	@ Есть входящий байт (обычное прерывание)
	BIS R1, 1 << RRDYEN @ Работает в демке прерываний
	@ Подключить событие TX к SDMA
	@ Используется в демке на канале ch2
	BIS R1, 1 << TXDMAEN @ Transmitter Ready DMA Enable (сигнал TX идёт в SDMA)
	STR R1, [R0, UCR1]

	@ Настройки буферов + делитель референсных клоков на 1 (RFDIV=5)
	MOV32 R1, 5 << RFDIV + 1 << TXTL + 1 << RXTL
	STR R1, [R0, UFCR]

	@ Настройка скорости порта
	@ На 1.000.000 бит/сек

	@ Делитель записывается первым
	MOV32 R1, 200-1
	STR R1, [R0, UBIR]

	@ Делимое вторым
	MOV32 R1, 1000-1
	STR R1, [R0, UBMR]
	
Современные камушки могут похвастаться дробными делителями частот.
Любая скорость передачи, с шагом один бит, теперь настраивается
с нулевой ошибкой или в сотые-тысячные доли процента.


На радостях, я написал макрос printf.