Skip to content

Commit 4f314be

Browse files
authored
Merge pull request #3309 from OpenNuvoton/nuvoton
[NUC472/M453] Fix CI failed tests
2 parents a296366 + e1995db commit 4f314be

File tree

18 files changed

+481
-357
lines changed

18 files changed

+481
-357
lines changed

targets/TARGET_NUVOTON/TARGET_M451/TARGET_NUMAKER_PFM_M453/PeripheralPins.c

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -297,14 +297,12 @@ const PinMap PinMap_UART_CTS[] = {
297297

298298
const PinMap PinMap_SPI_MOSI[] = {
299299
{PA_5, SPI_1, SYS_GPA_MFPL_PA5MFP_SPI1_MOSI},
300-
{PB_0, SPI_0, SYS_GPB_MFPL_PB0MFP_SPI0_MOSI1},
301300
{PB_5, SPI_0, SYS_GPB_MFPL_PB5MFP_SPI0_MOSI0},
302301
{PB_5, SPI_1, SYS_GPB_MFPL_PB5MFP_SPI1_MOSI},
303302
{PC_3, SPI_2, SYS_GPC_MFPL_PC3MFP_SPI2_MOSI},
304303
{PC_10, SPI_2, SYS_GPC_MFPH_PC10MFP_SPI2_MOSI},
305304
{PD_13, SPI_2, SYS_GPD_MFPH_PD13MFP_SPI2_MOSI},
306305
{PE_3, SPI_1, SYS_GPE_MFPL_PE3MFP_SPI1_MOSI},
307-
{PE_9, SPI_0, SYS_GPE_MFPH_PE9MFP_SPI0_MOSI1},
308306
{PE_11, SPI_1, SYS_GPE_MFPH_PE11MFP_SPI1_MOSI},
309307
{PE_11, SPI_0, SYS_GPE_MFPH_PE11MFP_SPI0_MOSI0},
310308

@@ -313,7 +311,6 @@ const PinMap PinMap_SPI_MOSI[] = {
313311

314312
const PinMap PinMap_SPI_MISO[] = {
315313
{PA_6, SPI_1, SYS_GPA_MFPL_PA6MFP_SPI1_MISO},
316-
{PB_1, SPI_0, SYS_GPB_MFPL_PB1MFP_SPI0_MISO1},
317314
{PB_3, SPI_0, SYS_GPB_MFPL_PB3MFP_SPI0_MISO0},
318315
{PB_3, SPI_1, SYS_GPB_MFPL_PB3MFP_SPI1_MISO},
319316
{PB_6, SPI_0, SYS_GPB_MFPL_PB6MFP_SPI0_MISO0},
@@ -322,7 +319,6 @@ const PinMap PinMap_SPI_MISO[] = {
322319
{PC_11, SPI_2, SYS_GPC_MFPH_PC11MFP_SPI2_MISO},
323320
{PD_5, SPI_1, SYS_GPD_MFPL_PD5MFP_SPI1_MISO},
324321
{PD_14, SPI_2, SYS_GPD_MFPH_PD14MFP_SPI2_MISO},
325-
{PE_8, SPI_0, SYS_GPE_MFPH_PE8MFP_SPI0_MISO1},
326322
{PE_10, SPI_1, SYS_GPE_MFPH_PE10MFP_SPI1_MISO},
327323
{PE_10, SPI_0, SYS_GPE_MFPH_PE10MFP_SPI0_MISO0},
328324

targets/TARGET_NUVOTON/TARGET_M451/TARGET_NUMAKER_PFM_M453/PinNames.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -101,8 +101,8 @@ typedef enum {
101101
LED_GREEN = LED3,
102102
LED_BLUE = LED1,
103103
// Button naming
104-
SW1 = PA_15,
105-
SW2 = PA_14,
104+
SW2 = PA_15,
105+
SW3 = PA_14,
106106

107107
} PinName;
108108

targets/TARGET_NUVOTON/TARGET_M451/TARGET_NUMAKER_PFM_M453/mbed_overrides.c

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -64,9 +64,8 @@ void mbed_sdk_init(void)
6464
CLK_SetCoreClock(72000000);
6565

6666
#if DEVICE_ANALOGIN
67-
// FIXME: Check voltage reference for EADC
68-
/* Vref connect to AVDD */
69-
//SYS->VREFCTL = (SYS->VREFCTL & ~SYS_VREFCTL_VREFCTL_Msk) | SYS_VREFCTL_VREF_AVDD;
67+
/* Vref connect to internal */
68+
SYS->VREFCTL = (SYS->VREFCTL & ~SYS_VREFCTL_VREFCTL_Msk) | SYS_VREFCTL_VREF_3_072V;
7069
#endif
7170

7271
/* Update System Core Clock */

targets/TARGET_NUVOTON/TARGET_M451/analogin_api.c

Lines changed: 21 additions & 75 deletions
Original file line numberDiff line numberDiff line change
@@ -23,76 +23,25 @@
2323
#include "PeripheralPins.h"
2424
#include "nu_modutil.h"
2525

26-
struct nu_adc_var {
27-
uint32_t en_msk;
28-
};
29-
30-
static struct nu_adc_var adc0_var = {
31-
.en_msk = 0
32-
};
33-
static struct nu_adc_var adc1_var = {
34-
.en_msk = 0
35-
};
36-
static struct nu_adc_var adc2_var = {
37-
.en_msk = 0
38-
};
39-
static struct nu_adc_var adc3_var = {
40-
.en_msk = 0
41-
};
42-
static struct nu_adc_var adc4_var = {
43-
.en_msk = 0
44-
};
45-
static struct nu_adc_var adc5_var = {
46-
.en_msk = 0
47-
};
48-
static struct nu_adc_var adc6_var = {
49-
.en_msk = 0
50-
};
51-
static struct nu_adc_var adc7_var = {
52-
.en_msk = 0
53-
};
54-
static struct nu_adc_var adc8_var = {
55-
.en_msk = 0
56-
};
57-
static struct nu_adc_var adc9_var = {
58-
.en_msk = 0
59-
};
60-
static struct nu_adc_var adc10_var = {
61-
.en_msk = 0
62-
};
63-
static struct nu_adc_var adc11_var = {
64-
.en_msk = 0
65-
};
66-
static struct nu_adc_var adc12_var = {
67-
.en_msk = 0
68-
};
69-
static struct nu_adc_var adc13_var = {
70-
.en_msk = 0
71-
};
72-
static struct nu_adc_var adc14_var = {
73-
.en_msk = 0
74-
};
75-
static struct nu_adc_var adc15_var = {
76-
.en_msk = 0
77-
};
26+
static uint32_t eadc_modinit_mask = 0;
7827

7928
static const struct nu_modinit_s adc_modinit_tab[] = {
80-
{ADC_0_0, EADC_MODULE, 0, CLK_CLKDIV0_EADC(8), EADC_RST, ADC00_IRQn, &adc0_var},
81-
{ADC_0_1, EADC_MODULE, 0, CLK_CLKDIV0_EADC(8), EADC_RST, ADC00_IRQn, &adc1_var},
82-
{ADC_0_2, EADC_MODULE, 0, CLK_CLKDIV0_EADC(8), EADC_RST, ADC00_IRQn, &adc2_var},
83-
{ADC_0_3, EADC_MODULE, 0, CLK_CLKDIV0_EADC(8), EADC_RST, ADC00_IRQn, &adc3_var},
84-
{ADC_0_4, EADC_MODULE, 0, CLK_CLKDIV0_EADC(8), EADC_RST, ADC00_IRQn, &adc4_var},
85-
{ADC_0_5, EADC_MODULE, 0, CLK_CLKDIV0_EADC(8), EADC_RST, ADC00_IRQn, &adc5_var},
86-
{ADC_0_6, EADC_MODULE, 0, CLK_CLKDIV0_EADC(8), EADC_RST, ADC00_IRQn, &adc6_var},
87-
{ADC_0_7, EADC_MODULE, 0, CLK_CLKDIV0_EADC(8), EADC_RST, ADC00_IRQn, &adc7_var},
88-
{ADC_0_8, EADC_MODULE, 0, CLK_CLKDIV0_EADC(8), EADC_RST, ADC00_IRQn, &adc8_var},
89-
{ADC_0_9, EADC_MODULE, 0, CLK_CLKDIV0_EADC(8), EADC_RST, ADC00_IRQn, &adc9_var},
90-
{ADC_0_10, EADC_MODULE, 0, CLK_CLKDIV0_EADC(8), EADC_RST, ADC00_IRQn, &adc10_var},
91-
{ADC_0_11, EADC_MODULE, 0, CLK_CLKDIV0_EADC(8), EADC_RST, ADC00_IRQn, &adc11_var},
92-
{ADC_0_12, EADC_MODULE, 0, CLK_CLKDIV0_EADC(8), EADC_RST, ADC00_IRQn, &adc12_var},
93-
{ADC_0_13, EADC_MODULE, 0, CLK_CLKDIV0_EADC(8), EADC_RST, ADC00_IRQn, &adc13_var},
94-
{ADC_0_14, EADC_MODULE, 0, CLK_CLKDIV0_EADC(8), EADC_RST, ADC00_IRQn, &adc14_var},
95-
{ADC_0_15, EADC_MODULE, 0, CLK_CLKDIV0_EADC(8), EADC_RST, ADC00_IRQn, &adc15_var},
29+
{ADC_0_0, EADC_MODULE, 0, CLK_CLKDIV0_EADC(8), EADC_RST, ADC00_IRQn, NULL},
30+
{ADC_0_1, EADC_MODULE, 0, CLK_CLKDIV0_EADC(8), EADC_RST, ADC00_IRQn, NULL},
31+
{ADC_0_2, EADC_MODULE, 0, CLK_CLKDIV0_EADC(8), EADC_RST, ADC00_IRQn, NULL},
32+
{ADC_0_3, EADC_MODULE, 0, CLK_CLKDIV0_EADC(8), EADC_RST, ADC00_IRQn, NULL},
33+
{ADC_0_4, EADC_MODULE, 0, CLK_CLKDIV0_EADC(8), EADC_RST, ADC00_IRQn, NULL},
34+
{ADC_0_5, EADC_MODULE, 0, CLK_CLKDIV0_EADC(8), EADC_RST, ADC00_IRQn, NULL},
35+
{ADC_0_6, EADC_MODULE, 0, CLK_CLKDIV0_EADC(8), EADC_RST, ADC00_IRQn, NULL},
36+
{ADC_0_7, EADC_MODULE, 0, CLK_CLKDIV0_EADC(8), EADC_RST, ADC00_IRQn, NULL},
37+
{ADC_0_8, EADC_MODULE, 0, CLK_CLKDIV0_EADC(8), EADC_RST, ADC00_IRQn, NULL},
38+
{ADC_0_9, EADC_MODULE, 0, CLK_CLKDIV0_EADC(8), EADC_RST, ADC00_IRQn, NULL},
39+
{ADC_0_10, EADC_MODULE, 0, CLK_CLKDIV0_EADC(8), EADC_RST, ADC00_IRQn, NULL},
40+
{ADC_0_11, EADC_MODULE, 0, CLK_CLKDIV0_EADC(8), EADC_RST, ADC00_IRQn, NULL},
41+
{ADC_0_12, EADC_MODULE, 0, CLK_CLKDIV0_EADC(8), EADC_RST, ADC00_IRQn, NULL},
42+
{ADC_0_13, EADC_MODULE, 0, CLK_CLKDIV0_EADC(8), EADC_RST, ADC00_IRQn, NULL},
43+
{ADC_0_14, EADC_MODULE, 0, CLK_CLKDIV0_EADC(8), EADC_RST, ADC00_IRQn, NULL},
44+
{ADC_0_15, EADC_MODULE, 0, CLK_CLKDIV0_EADC(8), EADC_RST, ADC00_IRQn, NULL},
9645
};
9746

9847
void analogin_init(analogin_t *obj, PinName pin)
@@ -107,7 +56,7 @@ void analogin_init(analogin_t *obj, PinName pin)
10756
EADC_T *eadc_base = (EADC_T *) NU_MODBASE(obj->adc);
10857

10958
// NOTE: All channels (identified by ADCName) share a ADC module. This reset will also affect other channels of the same ADC module.
110-
if (! ((struct nu_adc_var *) modinit->var)->en_msk) {
59+
if (! eadc_modinit_mask) {
11160
// Reset this module if no channel enabled
11261
SYS_ResetModule(modinit->rsetidx);
11362

@@ -116,9 +65,6 @@ void analogin_init(analogin_t *obj, PinName pin)
11665
// Enable clock of paired channels
11766
CLK_EnableModuleClock(modinit->clkidx);
11867

119-
// Power on ADC
120-
//ADC_POWER_ON(ADC);
121-
12268
// Set the ADC internal sampling time, input mode as single-end and enable the A/D converter
12369
EADC_Open(eadc_base, EADC_CTL_DIFFEN_SINGLE_END);
12470
EADC_SetInternalSampleTime(eadc_base, 6);
@@ -130,9 +76,9 @@ void analogin_init(analogin_t *obj, PinName pin)
13076
pinmap_pinout(pin, PinMap_ADC);
13177

13278
// Configure the sample module Nmod for analog input channel Nch and software trigger source
133-
EADC_ConfigSampleModule(EADC, chn, EADC_SOFTWARE_TRIGGER, chn);
79+
EADC_ConfigSampleModule(eadc_base, chn, EADC_SOFTWARE_TRIGGER, chn);
13480

135-
((struct nu_adc_var *) modinit->var)->en_msk |= 1 << chn;
81+
eadc_modinit_mask |= 1 << chn;
13682
}
13783

13884
uint16_t analogin_read_u16(analogin_t *obj)
@@ -141,7 +87,7 @@ uint16_t analogin_read_u16(analogin_t *obj)
14187
uint32_t chn = NU_MODSUBINDEX(obj->adc);
14288

14389
EADC_START_CONV(eadc_base, 1 << chn);
144-
while (EADC_GET_PENDING_CONV(eadc_base) & (1 << chn));
90+
while (EADC_GET_DATA_VALID_FLAG(eadc_base, 1 << chn) != (1 << chn));
14591
uint16_t conv_res_12 = EADC_GET_CONV_DATA(eadc_base, chn);
14692
// Just 12 bits are effective. Convert to 16 bits.
14793
// conv_res_12: 0000 b11b10b9b8 b7b6b5b4 b3b2b1b0

targets/TARGET_NUVOTON/TARGET_M451/gpio_irq_api.c

Lines changed: 41 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -52,22 +52,23 @@ static struct nu_gpio_irq_var gpio_irq_var_arr[] = {
5252

5353
#define NU_MAX_PORT (sizeof (gpio_irq_var_arr) / sizeof (gpio_irq_var_arr[0]))
5454

55-
#ifdef MBED_CONF_M451_GPIO_IRQ_DEBOUNCE_ENABLE
56-
#define M451_GPIO_IRQ_DEBOUNCE_ENABLE MBED_CONF_M451_GPIO_IRQ_DEBOUNCE_ENABLE
57-
#else
58-
#define M451_GPIO_IRQ_DEBOUNCE_ENABLE 0
55+
#ifndef MBED_CONF_M451_GPIO_IRQ_DEBOUNCE_ENABLE
56+
#define MBED_CONF_M451_GPIO_IRQ_DEBOUNCE_ENABLE 0
5957
#endif
6058

61-
#ifdef MBED_CONF_M451_GPIO_IRQ_DEBOUNCE_CLOCK_SOURCE
62-
#define M451_GPIO_IRQ_DEBOUNCE_CLOCK_SOURCE MBED_CONF_M451_GPIO_IRQ_DEBOUNCE_CLOCK_SOURCE
63-
#else
64-
#define M451_GPIO_IRQ_DEBOUNCE_CLOCK_SOURCE GPIO_DBCTL_DBCLKSRC_LIRC
59+
#ifndef MBED_CONF_M451_GPIO_IRQ_DEBOUNCE_ENABLE_LIST
60+
#define MBED_CONF_M451_GPIO_IRQ_DEBOUNCE_ENABLE_LIST NC
61+
#endif
62+
static PinName gpio_irq_debounce_arr[] = {
63+
MBED_CONF_M451_GPIO_IRQ_DEBOUNCE_ENABLE_LIST
64+
};
65+
66+
#ifndef MBED_CONF_M451_GPIO_IRQ_DEBOUNCE_CLOCK_SOURCE
67+
#define MBED_CONF_M451_GPIO_IRQ_DEBOUNCE_CLOCK_SOURCE GPIO_DBCTL_DBCLKSRC_LIRC
6568
#endif
6669

67-
#ifdef MBED_CONF_M451_GPIO_IRQ_DEBOUNCE_SAMPLE_RATE
68-
#define M451_GPIO_IRQ_DEBOUNCE_SAMPLE_RATE MBED_CONF_M451_GPIO_IRQ_DEBOUNCE_SAMPLE_RATE
69-
#else
70-
#define M451_GPIO_IRQ_DEBOUNCE_SAMPLE_RATE GPIO_DBCTL_DBCLKSEL_16
70+
#ifndef MBED_CONF_M451_GPIO_IRQ_DEBOUNCE_SAMPLE_RATE
71+
#define MBED_CONF_M451_GPIO_IRQ_DEBOUNCE_SAMPLE_RATE GPIO_DBCTL_DBCLKSEL_16
7172
#endif
7273

7374
int gpio_irq_init(gpio_irq_t *obj, PinName pin, gpio_irq_handler handler, uint32_t id)
@@ -89,13 +90,36 @@ int gpio_irq_init(gpio_irq_t *obj, PinName pin, gpio_irq_handler handler, uint32
8990
GPIO_T *gpio_base = NU_PORT_BASE(port_index);
9091
//gpio_set(pin);
9192

92-
#if M451_GPIO_IRQ_DEBOUNCE_ENABLE
93-
// Configure de-bounce clock source and sampling cycle time
94-
GPIO_SET_DEBOUNCE_TIME(M451_GPIO_IRQ_DEBOUNCE_CLOCK_SOURCE, M451_GPIO_IRQ_DEBOUNCE_SAMPLE_RATE);
95-
GPIO_ENABLE_DEBOUNCE(gpio_base, 1 << pin_index);
93+
{
94+
#if MBED_CONF_M451_GPIO_IRQ_DEBOUNCE_ENABLE
95+
// Suppress compiler warning
96+
(void) gpio_irq_debounce_arr;
97+
98+
// Configure de-bounce clock source and sampling cycle time
99+
GPIO_SET_DEBOUNCE_TIME(MBED_CONF_M451_GPIO_IRQ_DEBOUNCE_CLOCK_SOURCE, MBED_CONF_M451_GPIO_IRQ_DEBOUNCE_SAMPLE_RATE);
100+
GPIO_ENABLE_DEBOUNCE(gpio_base, 1 << pin_index);
96101
#else
97-
GPIO_DISABLE_DEBOUNCE(gpio_base, 1 << pin_index);
102+
// Enable de-bounce if the pin is in the de-bounce enable list
103+
104+
// De-bounce defaults to disabled.
105+
GPIO_DISABLE_DEBOUNCE(gpio_base, 1 << pin_index);
106+
107+
PinName *debounce_pos = gpio_irq_debounce_arr;
108+
PinName *debounce_end = gpio_irq_debounce_arr + sizeof (gpio_irq_debounce_arr) / sizeof (gpio_irq_debounce_arr[0]);
109+
for (; debounce_pos != debounce_end && *debounce_pos != NC; debounce_pos ++) {
110+
uint32_t pin_index_debunce = NU_PINNAME_TO_PIN(*debounce_pos);
111+
uint32_t port_index_debounce = NU_PINNAME_TO_PORT(*debounce_pos);
112+
113+
if (pin_index == pin_index_debunce &&
114+
port_index == port_index_debounce) {
115+
// Configure de-bounce clock source and sampling cycle time
116+
GPIO_SET_DEBOUNCE_TIME(MBED_CONF_M451_GPIO_IRQ_DEBOUNCE_CLOCK_SOURCE, MBED_CONF_M451_GPIO_IRQ_DEBOUNCE_SAMPLE_RATE);
117+
GPIO_ENABLE_DEBOUNCE(gpio_base, 1 << pin_index);
118+
break;
119+
}
120+
}
98121
#endif
122+
}
99123

100124
struct nu_gpio_irq_var *var = gpio_irq_var_arr + port_index;
101125

0 commit comments

Comments
 (0)