12 #include "sw/device/lib/testing/test_framework/check.h"
13 #include "sw/device/lib/testing/test_framework/ottf_console.h"
15 #include "sw/device/lib/testing/test_framework/ottf_utils.h"
16 #include "sw/device/lib/testing/uart_testutils.h"
20 static const uint8_t kSendData[] =
"UART baud test!";
21 static const uint32_t kBaseAddrs[4] = {
27 static const uint32_t kBauds[11] = {
28 4800, 9600, 19200, 38400, 57600, 115200, 230400, 128000, 256000, 1000000,
33 kTestTimeoutMillis = 500000,
36 typedef enum test_phase {
44 static volatile uint8_t test_phase = kTestPhaseInit;
45 static volatile uint8_t uart_idx = UINT8_MAX;
46 static volatile uint32_t baud_rate = UINT32_MAX;
48 static dif_uart_t uart;
49 static dif_pinmux_t pinmux;
51 OTTF_DEFINE_TEST_CONFIG(.enable_uart_flow_control =
true);
55 static status_t test_uart_baud(
void) {
56 test_phase = kTestPhaseCfg;
60 .baudrate = (uint32_t)baud_rate,
70 LOG_INFO(
"Configured UART%d with Baud rate %d", uart_idx, baud_rate);
72 OTTF_WAIT_FOR(test_phase == kTestPhaseSend, kTestTimeoutMillis);
78 OTTF_WAIT_FOR(test_phase == kTestPhaseRecv, kTestTimeoutMillis);
81 uint8_t data[
sizeof(kSendData)] = {0};
82 for (
size_t i = 0; i <
sizeof(data); ++i) {
85 TRY_CHECK_ARRAYS_EQ(data, kSendData,
sizeof(kSendData));
87 test_phase = kTestPhaseDone;
93 OTTF_WAIT_FOR(uart_idx != 0xff, kTestTimeoutMillis);
98 CHECK_DIF_OK(dif_pinmux_init(base_addr, &pinmux));
101 CHECK_DIF_OK(dif_uart_init(base_addr, &uart));
105 uart_testutils_select_pinmux(&pinmux, 1, kUartPinmuxChannelConsole));
110 uart_testutils_select_pinmux(&pinmux, uart_idx, kUartPinmuxChannelDut));
122 for (
size_t baud_idx = 0; baud_idx < baud_count; ++baud_idx) {
123 baud_rate = kBauds[baud_idx];
126 return status_ok(result);