Skip to content

Commit 834d61b

Browse files
author
Filip Jagodzinski
committed
Test: FPGA shield: Update the GPIO-IRQ API tests
Use the gpio_irq_pinmap() for GPIO-IRQ testing.
1 parent 2ddc879 commit 834d61b

File tree

2 files changed

+35
-42
lines changed
  • TESTS/mbed_hal_fpga_ci_test_shield/gpio_irq
  • components/testing/COMPONENT_FPGA_CI_TEST_SHIELD

2 files changed

+35
-42
lines changed

TESTS/mbed_hal_fpga_ci_test_shield/gpio_irq/main.cpp

Lines changed: 23 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -30,32 +30,38 @@
3030

3131
using namespace utest::v1;
3232

33-
#include "mbed.h"
3433
#include "MbedTester.h"
3534
#include "pinmap.h"
35+
#include "test_utils.h"
36+
37+
MbedTester tester(DefaultFormFactor::pins(), DefaultFormFactor::restricted_pins());
3638

37-
static uint32_t call_counter;
39+
static volatile uint32_t call_counter;
3840
void test_gpio_irq_handler(uint32_t id, gpio_irq_event event)
3941
{
4042
call_counter++;
4143
}
4244

43-
const PinList *form_factor = pinmap_ff_default_pins();
44-
const PinList *restricted = pinmap_restricted_pins();
45-
MbedTester tester(form_factor, restricted);
46-
4745
#define WAIT() wait_us(10)
4846

49-
5047
void gpio_irq_test(PinName pin)
5148
{
49+
// Reset everything and set all tester pins to hi-Z.
50+
tester.reset();
51+
52+
// Map pins for test.
53+
tester.pin_map_set(pin, MbedTester::LogicalPinGPIO0);
54+
55+
// Select GPIO0.
56+
tester.select_peripheral(MbedTester::PeripheralGPIO);
57+
5258
gpio_t gpio;
5359
// configure pin as input
5460
gpio_init_in(&gpio, pin);
5561

5662
gpio_irq_t gpio_irq;
5763
uint32_t id = 123;
58-
gpio_irq_init(&gpio_irq, pin, test_gpio_irq_handler, id);
64+
TEST_ASSERT_EQUAL(0, gpio_irq_init(&gpio_irq, pin, test_gpio_irq_handler, id));
5965

6066
gpio_irq_set(&gpio_irq, IRQ_RISE, true);
6167
gpio_irq_enable(&gpio_irq);
@@ -241,51 +247,26 @@ void gpio_irq_test(PinName pin)
241247
WAIT();
242248
TEST_ASSERT_EQUAL(2, call_counter);
243249

244-
245250
gpio_irq_free(&gpio_irq);
246251
}
247252

248-
249-
void gpio_irq_test()
250-
{
251-
for (uint32_t i = 0; i < form_factor->count; i++) {
252-
const PinName test_pin = form_factor->pins[i];
253-
if (test_pin == NC) {
254-
continue;
255-
}
256-
if (pinmap_list_has_pin(restricted, test_pin)) {
257-
printf("Skipping gpio pin %s (%i)\r\n", pinmap_ff_default_pin_to_string(test_pin), test_pin);
258-
continue;
259-
}
260-
tester.pin_map_reset();
261-
tester.pin_map_set(test_pin, MbedTester::LogicalPinGPIO0);
262-
263-
printf("GPIO irq test on pin %3s (%3i)\r\n", pinmap_ff_default_pin_to_string(test_pin), test_pin);
264-
gpio_irq_test(test_pin);
265-
}
266-
}
267-
268-
utest::v1::status_t setup(const Case *const source, const size_t index_of_case)
269-
{
270-
tester.reset();
271-
tester.select_peripheral(MbedTester::PeripheralGPIO);
272-
273-
return greentea_case_setup_handler(source, index_of_case);
274-
}
275-
276-
utest::v1::status_t teardown(const Case *const source, const size_t passed, const size_t failed,
277-
const failure_t reason)
253+
void init_free_test(PinName pin)
278254
{
279-
return greentea_case_teardown_handler(source, passed, failed, reason);
255+
gpio_t gpio;
256+
gpio_irq_t gpio_irq;
257+
gpio_init_in(&gpio, pin);
258+
TEST_ASSERT_EQUAL(0, gpio_irq_init(&gpio_irq, pin, test_gpio_irq_handler, 123));
259+
gpio_irq_free(&gpio_irq);
280260
}
281261

282262
Case cases[] = {
283-
Case("GPIO - irq test", setup, gpio_irq_test, teardown)
263+
Case("init/free", all_ports<GPIOIRQPort, DefaultFormFactor, init_free_test>),
264+
Case("rising & falling edge", all_ports<GPIOIRQPort, DefaultFormFactor, gpio_irq_test>),
284265
};
285266

286267
utest::v1::status_t greentea_test_setup(const size_t number_of_cases)
287268
{
288-
GREENTEA_SETUP(10, "default_auto");
269+
GREENTEA_SETUP(60, "default_auto");
289270
return greentea_test_setup_handler(number_of_cases);
290271
}
291272

components/testing/COMPONENT_FPGA_CI_TEST_SHIELD/test_utils.h

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -430,6 +430,18 @@ class DefaultFormFactor {
430430
* pin set to use for testing.
431431
*/
432432

433+
#if DEVICE_INTERRUPTIN
434+
struct GPIOIRQMaps {
435+
static const PinMap *maps[];
436+
static const char *const pin_type_names[];
437+
static const char *const name;
438+
};
439+
const PinMap *GPIOIRQMaps::maps[] = { gpio_irq_pinmap() };
440+
const char *const GPIOIRQMaps::pin_type_names[] = { "IRQ_IN" };
441+
const char *const GPIOIRQMaps::name = "GPIO_IRQ";
442+
typedef Port<1, GPIOIRQMaps, DefaultFormFactor, TF1> GPIOIRQPort;
443+
#endif
444+
433445
#if DEVICE_SPI
434446
#include "spi_api.h"
435447
struct SPIMaps {

0 commit comments

Comments
 (0)