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.