From 864c96efd483b79e54e1e7a296ebf1c232e769ae Mon Sep 17 00:00:00 2001 From: jeromecoutant Date: Wed, 11 Mar 2020 09:38:35 +0100 Subject: [PATCH 1/6] FGGA UART test: add test cases with 7 and 9 bits data length --- .../uart/main.cpp | 33 +++++++++++++++++-- 1 file changed, 30 insertions(+), 3 deletions(-) diff --git a/TESTS/mbed_hal_fpga_ci_test_shield/uart/main.cpp b/TESTS/mbed_hal_fpga_ci_test_shield/uart/main.cpp index 3bf4f760ed..ba0c57b902 100644 --- a/TESTS/mbed_hal_fpga_ci_test_shield/uart/main.cpp +++ b/TESTS/mbed_hal_fpga_ci_test_shield/uart/main.cpp @@ -92,10 +92,20 @@ static void uart_test_common(int baudrate, int data_bits, SerialParity parity, i // STM-specific constraints // Only 7, 8 & 9 data bits. MBED_ASSERT(data_bits >= 7 && data_bits <= 9); - // Only Odd or Even parity for 7 data bits. - if (data_bits == 7) { - MBED_ASSERT(parity != ParityNone); + +#if defined(UART_9BITS_PARITY_NOT_SUPPORTED) + if ((data_bits == 9) && (parity != ParityNone)) { + utest_printf(" UART_9BITS_PARITY_NOT_SUPPORTED set ... "); + return; } +#endif + +#if defined(UART_7BITS_PARITY_NONE_NOT_SUPPORTED) + if ((data_bits == 7) && (parity == ParityNone)) { + utest_printf(" UART_7BITS_PARITY_NONE_NOT_SUPPORTED set ... "); + return; + } +#endif // Limit the actual TX & RX chars to 8 bits for this test. int test_buff_bits = data_bits < 8 ? data_bits : 8; @@ -333,6 +343,10 @@ Case cases[] = { Case("basic, 9600, 8N1, FC off", all_peripherals >), Case("basic (direct init), 9600, 8N1, FC off", all_peripherals >), + // same test with 7 and 9 bits data length + Case("basic, 9600, 7N1, FC off", all_peripherals >), + Case("basic, 9600, 9N1, FC off", all_peripherals >), + // One set of pins from one peripheral. // baudrate Case("19200, 8N1, FC off", one_peripheral >), @@ -351,6 +365,10 @@ Case cases[] = { Case("basic, 9600, 8N1, FC on", all_peripherals >), Case("basic (direct init), 9600, 8N1, FC on", all_peripherals >), + // same test with 7 and 9 bits data length + Case("basic, 9600, 7N1, FC on", all_peripherals >), + Case("basic, 9600, 9N1, FC on", all_peripherals >), + // One set of pins from one peripheral. // baudrate Case("19200, 8N1, FC on", one_peripheral >), @@ -360,8 +378,17 @@ Case cases[] = { // parity #if !defined(UART_ODD_PARITY_NOT_SUPPORTED) Case("9600, 8O1, FC on", one_peripheral >), + + // same test with 7 and 9 bits data length + Case("9600, 7O1, FC on", one_peripheral >), + Case("9600, 9O1, FC on", one_peripheral >), #endif Case("9600, 8E1, FC on", one_peripheral >), + + // same test with 7 and 9 bits data length + Case("9600, 7E1, FC on", one_peripheral >), + Case("9600, 9E1, FC on", one_peripheral >), + // stop bits #if !defined(UART_TWO_STOP_BITS_NOT_SUPPORTED) Case("9600, 8N2, FC on", one_peripheral >), From 2c0d96c57c806b093471093590c7e73dc1bffbce Mon Sep 17 00:00:00 2001 From: jeromecoutant Date: Mon, 18 May 2020 11:48:12 +0200 Subject: [PATCH 2/6] FPGA test : remove test specific macro from targets.json --- targets/targets.json | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/targets/targets.json b/targets/targets.json index 78b5074bc7..5606538028 100644 --- a/targets/targets.json +++ b/targets/targets.json @@ -5604,9 +5604,7 @@ "WSF_MAX_HANDLERS=10", "MBED_MPU_CUSTOM", "SWI_DISABLE0", - "NRF52_PAN_20", - "UART_TWO_STOP_BITS_NOT_SUPPORTED", - "UART_ODD_PARITY_NOT_SUPPORTED" + "NRF52_PAN_20" ], "features": [ "CRYPTOCELL310", From 6900ec69ddd06472c1cb8d22f37105e53fcced65 Mon Sep 17 00:00:00 2001 From: jeromecoutant Date: Fri, 10 Apr 2020 09:26:42 +0200 Subject: [PATCH 3/6] FPGA test shield: UART test capability update --- TESTS/configs/fpga.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/TESTS/configs/fpga.json b/TESTS/configs/fpga.json index 40d82ba41b..a9eeab3c38 100644 --- a/TESTS/configs/fpga.json +++ b/TESTS/configs/fpga.json @@ -13,7 +13,8 @@ }, "K64F": { "target.macros_add": [ - "UART_7BITS_PARITY_NONE_NOT_SUPPORTED" + "UART_7BITS_PARITY_NONE_NOT_SUPPORTED", + "UART_9BITS_PARITY_NOT_SUPPORTED" ] }, "STM": { From ba94adbf65c1f112fffd855a69d920330d79955b Mon Sep 17 00:00:00 2001 From: jeromecoutant Date: Fri, 10 Apr 2020 09:32:46 +0200 Subject: [PATCH 4/6] FPGA test: Add ReadMe file --- TESTS/mbed_hal_fpga_ci_test_shield/README.md | 51 ++++++++++++++++++ .../fpga_test_shield.jpg | Bin 0 -> 41866 bytes 2 files changed, 51 insertions(+) create mode 100644 TESTS/mbed_hal_fpga_ci_test_shield/README.md create mode 100644 TESTS/mbed_hal_fpga_ci_test_shield/fpga_test_shield.jpg diff --git a/TESTS/mbed_hal_fpga_ci_test_shield/README.md b/TESTS/mbed_hal_fpga_ci_test_shield/README.md new file mode 100644 index 0000000000..c15471fbec --- /dev/null +++ b/TESTS/mbed_hal_fpga_ci_test_shield/README.md @@ -0,0 +1,51 @@ +# Testing with FPGA CI TEST shield + +## Setup + +![30% center](fpga_test_shield.jpg) + +``` +mbed test -n tests*fpga* --app-config tests/configs/fpga.json +``` + +FPGA_CI_TEST_SHIELD needed macro +and specific test capabilities per target +are defined in: +https://github.com/ARMmbed/mbed-os/blob/master/TESTS/configs/fpga.json + + + +## MBED-OS + +Tested from factor is defined by MBED_CONF_TARGET_DEFAULT_FORM_FACTOR +"default-form-factor" default value is null. + +When "default-form-factor" is not set, ARDUINO form factor is used. + +Default ff_arduino_pins is defined in: +https://github.com/ARMmbed/mbed-os/blob/master/hal/mbed_pinmap_default.cpp#L28-L32 + +Default ff_arduino_names is defined in: +https://github.com/ARMmbed/mbed-os/blob/master/hal/mbed_pinmap_default.cpp#L34-L38 + +Default empty_gpio_pinmap is defined in: +https://github.com/ARMmbed/mbed-os/blob/master/hal/mbed_gpio.c#L89-L114 + +Some pins are restricted: +https://github.com/ARMmbed/mbed-os/blob/master/hal/mbed_pinmap_default.cpp#L69-L73 + +Some peripherals are restricted: +https://github.com/ARMmbed/mbed-os/blob/master/hal/mbed_pinmap_default.cpp#L94-L100 + + +## Known issues + + +## LINKS + +https://github.com/ARMmbed/fpga-ci-test-shield + +https://github.com/ARMmbed/fpga-ci-test-shield-updater + +https://github.com/ARMmbed/fpga-ci-test-shield-terminal + diff --git a/TESTS/mbed_hal_fpga_ci_test_shield/fpga_test_shield.jpg b/TESTS/mbed_hal_fpga_ci_test_shield/fpga_test_shield.jpg new file mode 100644 index 0000000000000000000000000000000000000000..fe7b7ca6cbffef680c9cefbec7b3d8c7d354d979 GIT binary patch literal 41866 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 Date: Tue, 14 Apr 2020 15:08:22 +0200 Subject: [PATCH 5/6] FPGA UART test: disable 9 bits test for K64F --- TESTS/configs/fpga.json | 2 +- TESTS/mbed_hal_fpga_ci_test_shield/uart/main.cpp | 7 +++++++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/TESTS/configs/fpga.json b/TESTS/configs/fpga.json index a9eeab3c38..c91be88bc7 100644 --- a/TESTS/configs/fpga.json +++ b/TESTS/configs/fpga.json @@ -14,7 +14,7 @@ "K64F": { "target.macros_add": [ "UART_7BITS_PARITY_NONE_NOT_SUPPORTED", - "UART_9BITS_PARITY_NOT_SUPPORTED" + "UART_9BITS_NOT_SUPPORTED" ] }, "STM": { diff --git a/TESTS/mbed_hal_fpga_ci_test_shield/uart/main.cpp b/TESTS/mbed_hal_fpga_ci_test_shield/uart/main.cpp index ba0c57b902..92625514cf 100644 --- a/TESTS/mbed_hal_fpga_ci_test_shield/uart/main.cpp +++ b/TESTS/mbed_hal_fpga_ci_test_shield/uart/main.cpp @@ -93,6 +93,13 @@ static void uart_test_common(int baudrate, int data_bits, SerialParity parity, i // Only 7, 8 & 9 data bits. MBED_ASSERT(data_bits >= 7 && data_bits <= 9); +#if defined(UART_9BITS_NOT_SUPPORTED) + if (data_bits == 9) { + utest_printf(" UART_9BITS_NOT_SUPPORTED set ... "); + return; + } +#endif + #if defined(UART_9BITS_PARITY_NOT_SUPPORTED) if ((data_bits == 9) && (parity != ParityNone)) { utest_printf(" UART_9BITS_PARITY_NOT_SUPPORTED set ... "); From 1a64d6e525edc3502647a2306722371c25c74fd7 Mon Sep 17 00:00:00 2001 From: jeromecoutant Date: Tue, 14 Apr 2020 18:05:40 +0200 Subject: [PATCH 6/6] FPGA UART test: disable 7 bits test for K64F --- TESTS/configs/fpga.json | 2 +- TESTS/mbed_hal_fpga_ci_test_shield/uart/main.cpp | 14 +++++++++----- 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/TESTS/configs/fpga.json b/TESTS/configs/fpga.json index c91be88bc7..5d45ff2a2c 100644 --- a/TESTS/configs/fpga.json +++ b/TESTS/configs/fpga.json @@ -13,7 +13,7 @@ }, "K64F": { "target.macros_add": [ - "UART_7BITS_PARITY_NONE_NOT_SUPPORTED", + "UART_7BITS_NOT_SUPPORTED", "UART_9BITS_NOT_SUPPORTED" ] }, diff --git a/TESTS/mbed_hal_fpga_ci_test_shield/uart/main.cpp b/TESTS/mbed_hal_fpga_ci_test_shield/uart/main.cpp index 92625514cf..4315cc8641 100644 --- a/TESTS/mbed_hal_fpga_ci_test_shield/uart/main.cpp +++ b/TESTS/mbed_hal_fpga_ci_test_shield/uart/main.cpp @@ -86,13 +86,10 @@ static void test_irq_handler(uint32_t id, SerialIrq event) static void uart_test_common(int baudrate, int data_bits, SerialParity parity, int stop_bits, bool init_direct, PinName tx, PinName rx, PinName cts, PinName rts) { // The FPGA CI shield only supports None, Odd & Even. - // Forced parity is not supported on Atmel, Freescale, Nordic & STM targets. + // Forced parity is not supported on many targets MBED_ASSERT(parity != ParityForced1 && parity != ParityForced0); - // STM-specific constraints - // Only 7, 8 & 9 data bits. - MBED_ASSERT(data_bits >= 7 && data_bits <= 9); - +// See TESTS/configs/fpga.json to check which target supports what #if defined(UART_9BITS_NOT_SUPPORTED) if (data_bits == 9) { utest_printf(" UART_9BITS_NOT_SUPPORTED set ... "); @@ -107,6 +104,13 @@ static void uart_test_common(int baudrate, int data_bits, SerialParity parity, i } #endif +#if defined(UART_7BITS_NOT_SUPPORTED) + if (data_bits == 7) { + utest_printf(" UART_7BITS_NOT_SUPPORTED set ... "); + return; + } +#endif + #if defined(UART_7BITS_PARITY_NONE_NOT_SUPPORTED) if ((data_bits == 7) && (parity == ParityNone)) { utest_printf(" UART_7BITS_PARITY_NONE_NOT_SUPPORTED set ... ");