9 #include "sw/device/lib/testing/test_framework/check.h"
10 #include "sw/device/lib/testing/test_framework/ottf_console.h"
12 #include "sw/device/lib/testing/test_framework/ottf_utils.h"
13 #include "sw/device/lib/testing/uart_testutils.h"
17 static const uint8_t kSendData[] =
"Loopback test!";
18 static const uint32_t kBaseAddrs[4] = {
25 kTestTimeoutMicros = 1000000,
28 typedef enum test_phases {
35 static volatile uint8_t uart_idx = 0xff;
36 static volatile uint8_t test_phase = kTestPhaseCfg;
38 static dif_uart_t uart;
39 static dif_pinmux_t pinmux;
41 OTTF_DEFINE_TEST_CONFIG(.enable_uart_flow_control =
true);
47 OTTF_WAIT_FOR(uart_idx != 0xff, kTestTimeoutMicros);
50 CHECK_DIF_OK(dif_pinmux_init(base_addr, &pinmux));
55 uart_testutils_select_pinmux(&pinmux, 1, kUartPinmuxChannelConsole));
61 uart_testutils_select_pinmux(&pinmux, uart_idx, kUartPinmuxChannelDut));
64 CHECK_DIF_OK(dif_uart_init(base_addr, &uart));
76 LOG_INFO(
"UART%d configured", uart_idx);
87 OTTF_WAIT_FOR(test_phase == kTestPhaseLine, kTestTimeoutMicros);
88 LOG_INFO(
"Testing the line loopback");
92 OTTF_WAIT_FOR(test_phase == kTestPhaseSystem, kTestTimeoutMicros);
93 LOG_INFO(
"Testing the system loopback");
102 for (
int i = 0; i <
sizeof(kSendData); ++i) {
105 uint8_t receive_byte;
107 CHECK(kSendData[i] == receive_byte,
"expected %c, got %c", kSendData[i],
111 test_phase = kTestPhaseDone;