Skip to content

Commit ea54f12

Browse files
authored
Merge pull request #11379 from OpenNuvoton/nuvoton_m263_fpga-ci
M263: Fix FPGA CI testing failing
2 parents be769c0 + 254866e commit ea54f12

File tree

14 files changed

+219
-115
lines changed

14 files changed

+219
-115
lines changed

targets/TARGET_NUVOTON/TARGET_M261/PeripheralPins.c

Lines changed: 18 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ const PinMap PinMap_GPIO[] = {
4343
{PA_13, GPIO_A, SYS_GPA_MFPH_PA13MFP_GPIO},
4444
{PA_14, GPIO_A, SYS_GPA_MFPH_PA14MFP_GPIO},
4545
{PA_15, GPIO_A, SYS_GPA_MFPH_PA15MFP_GPIO},
46-
46+
4747
// GPIO B MFP
4848
{PB_0, GPIO_B, SYS_GPB_MFPL_PB0MFP_GPIO},
4949
{PB_1, GPIO_B, SYS_GPB_MFPL_PB1MFP_GPIO},
@@ -61,7 +61,7 @@ const PinMap PinMap_GPIO[] = {
6161
{PB_13, GPIO_B, SYS_GPB_MFPH_PB13MFP_GPIO},
6262
{PB_14, GPIO_B, SYS_GPB_MFPH_PB14MFP_GPIO},
6363
{PB_15, GPIO_B, SYS_GPB_MFPH_PB15MFP_GPIO},
64-
64+
6565
// GPIO C MFP
6666
{PC_0, GPIO_C, SYS_GPC_MFPL_PC0MFP_GPIO},
6767
{PC_1, GPIO_C, SYS_GPC_MFPL_PC1MFP_GPIO},
@@ -77,7 +77,7 @@ const PinMap PinMap_GPIO[] = {
7777
{PC_11, GPIO_C, SYS_GPC_MFPH_PC11MFP_GPIO},
7878
{PC_12, GPIO_C, SYS_GPC_MFPH_PC12MFP_GPIO},
7979
{PC_13, GPIO_C, SYS_GPC_MFPH_PC13MFP_GPIO},
80-
80+
8181
// GPIO D MFP
8282
{PD_0, GPIO_D, SYS_GPD_MFPL_PD0MFP_GPIO},
8383
{PD_1, GPIO_D, SYS_GPD_MFPL_PD1MFP_GPIO},
@@ -94,7 +94,7 @@ const PinMap PinMap_GPIO[] = {
9494
{PD_12, GPIO_D, SYS_GPD_MFPH_PD12MFP_GPIO},
9595
{PD_13, GPIO_D, SYS_GPD_MFPH_PD13MFP_GPIO},
9696
{PD_14, GPIO_D, SYS_GPD_MFPH_PD14MFP_GPIO},
97-
97+
9898
// GPIO E MFP
9999
{PE_0, GPIO_E, SYS_GPE_MFPL_PE0MFP_GPIO},
100100
{PE_1, GPIO_E, SYS_GPE_MFPL_PE1MFP_GPIO},
@@ -146,6 +146,7 @@ const PinMap PinMap_GPIO[] = {
146146
{PH_9, GPIO_H, SYS_GPH_MFPH_PH9MFP_GPIO},
147147
{PH_10, GPIO_H, SYS_GPH_MFPH_PH10MFP_GPIO},
148148
{PH_11, GPIO_H, SYS_GPH_MFPH_PH11MFP_GPIO},
149+
149150
{NC, NC, 0}
150151
};
151152
#endif
@@ -169,7 +170,7 @@ const PinMap PinMap_ADC[] = {
169170
{PB_13, ADC_0_13, SYS_GPB_MFPH_PB13MFP_EADC0_CH13},
170171
{PB_14, ADC_0_14, SYS_GPB_MFPH_PB14MFP_EADC0_CH14},
171172
{PB_15, ADC_0_15, SYS_GPB_MFPH_PB15MFP_EADC0_CH15},
172-
173+
173174
{NC, NC, 0}
174175
};
175176

@@ -209,7 +210,7 @@ const PinMap PinMap_I2C_SDA[] = {
209210
{PF_2, I2C_0, SYS_GPF_MFPL_PF2MFP_I2C0_SDA},
210211
{PG_3, I2C_1, SYS_GPG_MFPL_PG3MFP_I2C1_SDA},
211212
{PH_9, I2C_2, SYS_GPH_MFPH_PH9MFP_I2C2_SDA},
212-
213+
213214
{NC, NC, 0}
214215
};
215216

@@ -238,7 +239,7 @@ const PinMap PinMap_I2C_SCL[] = {
238239
{PF_3, I2C_0, SYS_GPF_MFPL_PF3MFP_I2C0_SCL},
239240
{PG_2, I2C_1, SYS_GPG_MFPL_PG2MFP_I2C1_SCL},
240241
{PH_8, I2C_2, SYS_GPH_MFPH_PH8MFP_I2C2_SCL},
241-
242+
242243
{NC, NC, 0}
243244
};
244245

@@ -355,7 +356,7 @@ const PinMap PinMap_UART_TX[] = {
355356
{NU_PINNAME_BIND(PH_10, UART_0), UART_0, SYS_GPH_MFPH_PH10MFP_UART0_TXD},
356357
{PH_10, UART_4, SYS_GPH_MFPH_PH10MFP_UART4_TXD},
357358
{NU_PINNAME_BIND(PH_10, UART_4), UART_4, SYS_GPH_MFPH_PH10MFP_UART4_TXD},
358-
359+
359360
{NC, NC, 0}
360361
};
361362

@@ -407,7 +408,7 @@ const PinMap PinMap_UART_RX[] = {
407408
{NU_PINNAME_BIND(PH_11, UART_0), UART_0, SYS_GPH_MFPH_PH11MFP_UART0_RXD},
408409
{PH_11, UART_4, SYS_GPH_MFPH_PH11MFP_UART4_RXD},
409410
{NU_PINNAME_BIND(PH_11, UART_4), UART_4, SYS_GPH_MFPH_PH11MFP_UART4_RXD},
410-
411+
411412
{NC, NC, 0}
412413
};
413414

@@ -428,7 +429,7 @@ const PinMap PinMap_UART_RTS[] = {
428429
{PE_13, UART_4, SYS_GPE_MFPH_PE13MFP_UART4_nRTS},
429430
{PF_4, UART_2, SYS_GPF_MFPL_PF4MFP_UART2_nRTS},
430431
{PH_8, UART_3, SYS_GPH_MFPH_PH8MFP_UART3_nRTS},
431-
432+
432433
{NC, NC, 0}
433434
};
434435

@@ -449,7 +450,7 @@ const PinMap PinMap_UART_CTS[] = {
449450
{PE_11, UART_1, SYS_GPE_MFPH_PE11MFP_UART1_nCTS},
450451
{PF_5, UART_2, SYS_GPF_MFPL_PF5MFP_UART2_nCTS},
451452
{PH_9, UART_3, SYS_GPH_MFPH_PH9MFP_UART3_nCTS},
452-
453+
453454
{NC, NC, 0}
454455
};
455456

@@ -474,7 +475,7 @@ const PinMap PinMap_SPI_MOSI[] = {
474475
{PF_6, SPI_0, SYS_GPF_MFPL_PF6MFP_SPI0_MOSI},
475476
{PF_11, SPI_2, SYS_GPF_MFPH_PF11MFP_SPI2_MOSI},
476477
{PH_5, SPI_1, SYS_GPH_MFPL_PH5MFP_SPI1_MOSI},
477-
478+
478479
{NC, NC, 0}
479480
};
480481

@@ -497,54 +498,31 @@ const PinMap PinMap_SPI_MISO[] = {
497498
{PF_7, SPI_0, SYS_GPF_MFPL_PF7MFP_SPI0_MISO},
498499
{PG_4, SPI_2, SYS_GPG_MFPL_PG4MFP_SPI2_MISO},
499500
{PH_4, SPI_1, SYS_GPH_MFPL_PH4MFP_SPI1_MISO},
500-
501+
501502
{NC, NC, 0}
502503
};
503504

504505
const PinMap PinMap_SPI_SCLK[] = {
505506
{PA_2, SPI_0, SYS_GPA_MFPL_PA2MFP_SPI0_CLK},
506-
{PA_4, SPI_0, SYS_GPA_MFPL_PA4MFP_SPI0_I2SMCLK},
507-
{PA_5, SPI_1, SYS_GPA_MFPL_PA5MFP_SPI1_I2SMCLK},
508507
{PA_7, SPI_1, SYS_GPA_MFPL_PA7MFP_SPI1_CLK},
509508
{PA_10, SPI_2, SYS_GPA_MFPH_PA10MFP_SPI2_CLK},
510509
{PA_13, SPI_2, SYS_GPA_MFPH_PA13MFP_SPI2_CLK},
511-
{PB_0, SPI_0, SYS_GPB_MFPL_PB0MFP_SPI0_I2SMCLK},
512-
{PB_1, SPI_1, SYS_GPB_MFPL_PB1MFP_SPI1_I2SMCLK},
513-
{NU_PINNAME_BIND(PB_1, SPI_1), SPI_1, SYS_GPB_MFPL_PB1MFP_SPI1_I2SMCLK},
514-
{PB_1, SPI_3, SYS_GPB_MFPL_PB1MFP_SPI3_I2SMCLK},
515-
{NU_PINNAME_BIND(PB_1, SPI_3), SPI_3, SYS_GPB_MFPL_PB1MFP_SPI3_I2SMCLK},
516510
{PB_3, SPI_1, SYS_GPB_MFPL_PB3MFP_SPI1_CLK},
517-
{PB_11, SPI_0, SYS_GPB_MFPH_PB11MFP_SPI0_I2SMCLK},
518-
{NU_PINNAME_BIND(PB_11, SPI_0), SPI_0, SYS_GPB_MFPH_PB11MFP_SPI0_I2SMCLK},
519511
{PB_11, SPI_3, SYS_GPB_MFPH_PB11MFP_SPI3_CLK},
520512
{NU_PINNAME_BIND(PB_11, SPI_3), SPI_3, SYS_GPB_MFPH_PB11MFP_SPI3_CLK},
521513
{PB_14, SPI_0, SYS_GPB_MFPH_PB14MFP_SPI0_CLK},
522514
{PC_1, SPI_1, SYS_GPC_MFPL_PC1MFP_SPI1_CLK},
523-
{PC_4, SPI_1, SYS_GPC_MFPL_PC4MFP_SPI1_I2SMCLK},
524515
{PC_10, SPI_3, SYS_GPC_MFPH_PC10MFP_SPI3_CLK},
525-
{PC_13, SPI_2, SYS_GPC_MFPH_PC13MFP_SPI2_I2SMCLK},
526516
{PD_2, SPI_0, SYS_GPD_MFPL_PD2MFP_SPI0_CLK},
527517
{PD_5, SPI_1, SYS_GPD_MFPL_PD5MFP_SPI1_CLK},
528-
{PD_13, SPI_0, SYS_GPD_MFPH_PD13MFP_SPI0_I2SMCLK},
529-
{NU_PINNAME_BIND(PD_13, SPI_0), SPI_0, SYS_GPD_MFPH_PD13MFP_SPI0_I2SMCLK},
530-
{PD_13, SPI_1, SYS_GPD_MFPH_PD13MFP_SPI1_I2SMCLK},
531-
{NU_PINNAME_BIND(PD_13, SPI_1), SPI_1, SYS_GPD_MFPH_PD13MFP_SPI1_I2SMCLK},
532-
{PD_14, SPI_0, SYS_GPD_MFPH_PD14MFP_SPI0_I2SMCLK},
533-
{NU_PINNAME_BIND(PD_14, SPI_0), SPI_0, SYS_GPD_MFPH_PD14MFP_SPI0_I2SMCLK},
534-
{PD_14, SPI_3, SYS_GPD_MFPH_PD14MFP_SPI3_I2SMCLK},
535-
{NU_PINNAME_BIND(PD_14, SPI_3), SPI_3, SYS_GPD_MFPH_PD14MFP_SPI3_I2SMCLK},
536518
{PE_4, SPI_3, SYS_GPE_MFPL_PE4MFP_SPI3_CLK},
537519
{NU_PINNAME_BIND(PE_4, SPI_3), SPI_3, SYS_GPE_MFPL_PE4MFP_SPI3_CLK},
538-
{PE_6, SPI_3, SYS_GPE_MFPL_PE6MFP_SPI3_I2SMCLK},
539520
{PE_8, SPI_2, SYS_GPE_MFPH_PE8MFP_SPI2_CLK},
540-
{PE_12, SPI_2, SYS_GPE_MFPH_PE12MFP_SPI2_I2SMCLK},
541521
{PF_8, SPI_0, SYS_GPF_MFPH_PF8MFP_SPI0_CLK},
542-
{PF_10, SPI_0, SYS_GPF_MFPH_PF10MFP_SPI0_I2SMCLK},
543522
{PG_3, SPI_2, SYS_GPG_MFPL_PG3MFP_SPI2_CLK},
544523
{PH_6, SPI_1, SYS_GPH_MFPL_PH6MFP_SPI1_CLK},
545524
{PH_8, SPI_1, SYS_GPH_MFPH_PH8MFP_SPI1_CLK},
546-
{PH_10, SPI_1, SYS_GPH_MFPH_PH10MFP_SPI1_I2SMCLK},
547-
525+
548526
{NC, NC, 0}
549527
};
550528

@@ -567,7 +545,7 @@ const PinMap PinMap_SPI_SSEL[] = {
567545
{PG_2, SPI_2, SYS_GPG_MFPL_PG2MFP_SPI2_SS},
568546
{PH_7, SPI_1, SYS_GPH_MFPL_PH7MFP_SPI1_SS},
569547
{PH_9, SPI_1, SYS_GPH_MFPH_PH9MFP_SPI1_SS},
570-
548+
571549
{NC, NC, 0}
572550
};
573551

@@ -629,10 +607,10 @@ const PinMap PinMap_CAN_TD[] = {
629607
{PC_5, CAN_0, SYS_GPC_MFPL_PC5MFP_CAN0_TXD},
630608
{PD_11, CAN_0, SYS_GPD_MFPH_PD11MFP_CAN0_TXD},
631609
{PE_14, CAN_0, SYS_GPE_MFPH_PE14MFP_CAN0_TXD},
632-
610+
633611
{NC, NC, 0}
634612
};
635-
613+
636614
const PinMap PinMap_CAN_RD[] = {
637615
{PA_4, CAN_0, SYS_GPA_MFPL_PA4MFP_CAN0_RXD},
638616
{PA_13, CAN_0, SYS_GPA_MFPH_PA13MFP_CAN0_RXD},

targets/TARGET_NUVOTON/TARGET_M261/PinNames.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -135,6 +135,9 @@ typedef enum {
135135
BUTTON1 = SW2,
136136
BUTTON2 = SW3,
137137

138+
// Force PinName to 32-bit required by NU_PINNAME_BIND(...)
139+
FORCE_ENUM_PINNAME_32BIT = 0x7FFFFFFF,
140+
138141
} PinName;
139142

140143
#ifdef __cplusplus

targets/TARGET_NUVOTON/TARGET_M261/analogin_api.c

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -54,28 +54,30 @@ void analogin_init(analogin_t *obj, PinName pin)
5454
MBED_ASSERT(modinit != NULL);
5555
MBED_ASSERT(modinit->modname == (int) obj->adc);
5656

57+
obj->pin = pin;
58+
59+
// Wire pinout
60+
pinmap_pinout(pin, PinMap_ADC);
61+
5762
EADC_T *eadc_base = (EADC_T *) NU_MODBASE(obj->adc);
5863

5964
// NOTE: All channels (identified by ADCName) share a ADC module. This reset will also affect other channels of the same ADC module.
6065
if (! eadc_modinit_mask) {
61-
// Reset module
62-
SYS_ResetModule(modinit->rsetidx);
63-
6466
// Select IP clock source
6567
CLK_SetModuleClock(modinit->clkidx, modinit->clksrc, modinit->clkdiv);
6668

6769
// Enable IP clock
6870
CLK_EnableModuleClock(modinit->clkidx);
6971

72+
// Reset module
73+
SYS_ResetModule(modinit->rsetidx);
74+
7075
// Set the ADC internal sampling time, input mode as single-end and enable the A/D converter
7176
EADC_Open(eadc_base, EADC_CTL_DIFFEN_SINGLE_END);
7277
}
7378

7479
uint32_t chn = NU_MODSUBINDEX(obj->adc);
7580

76-
// Wire pinout
77-
pinmap_pinout(pin, PinMap_ADC);
78-
7981
// Configure the sample module Nmod for analog input channel Nch and software trigger source
8082
EADC_ConfigSampleModule(eadc_base, chn, EADC_SOFTWARE_TRIGGER, chn);
8183

targets/TARGET_NUVOTON/TARGET_M261/analogout_api.c

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,11 @@ void analogout_init(dac_t *obj, PinName pin)
5353
uint32_t chn = NU_MODSUBINDEX(obj->dac);
5454
MBED_ASSERT(chn < NU_DACCHN_MAXNUM);
5555

56+
obj->pin = pin;
57+
58+
/* Wire pinout */
59+
pinmap_pinout(pin, PinMap_DAC);
60+
5661
DAC_T *dac_base = (DAC_T *) NU_MODBASE(obj->dac);
5762

5863
/* Module-level setup from here */
@@ -66,15 +71,15 @@ void analogout_init(dac_t *obj, PinName pin)
6671
* channels are deactivated.
6772
*/
6873
if ((! dac_modinit_mask[0]) && (! dac_modinit_mask[1])) {
69-
// Reset IP
70-
SYS_ResetModule(modinit->rsetidx);
71-
7274
// Select IP clock source and clock divider
7375
CLK_SetModuleClock(modinit->clkidx, modinit->clksrc, modinit->clkdiv);
7476

7577
// Enable IP clock
7678
CLK_EnableModuleClock(modinit->clkidx);
77-
79+
80+
// Reset IP
81+
SYS_ResetModule(modinit->rsetidx);
82+
7883
/* The conversion settling time is 8us when 12-bit input code transition from
7984
* lowest code (0x000) to highest code (0xFFF). */
8085
DAC_SetDelayTime(dac_base, 8);
@@ -88,9 +93,6 @@ void analogout_init(dac_t *obj, PinName pin)
8893

8994
/* Set the software trigger, enable DAC event trigger mode and enable D/A converter */
9095
DAC_Open(dac_base, chn, DAC_SOFTWARE_TRIGGER);
91-
92-
/* Wire pinout */
93-
pinmap_pinout(pin, PinMap_DAC);
9496

9597
/* Mark channel allocated */
9698
dac_modinit_mask[modidx] |= 1 << chn;
@@ -128,6 +130,10 @@ void analogout_free(dac_t *obj)
128130
// Disable IP clock
129131
CLK_DisableModuleClock(modinit->clkidx);
130132
}
133+
134+
// Free up pins
135+
gpio_set(obj->pin);
136+
obj->pin = NC;
131137
}
132138

133139
void analogout_write(dac_t *obj, float value)

targets/TARGET_NUVOTON/TARGET_M261/dma_api.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -54,12 +54,12 @@ void dma_init(void)
5454
dma_chn_mask = ~NU_PDMA_CH_Msk;
5555
memset(dma_chn_arr, 0x00, sizeof (dma_chn_arr));
5656

57-
// Reset module
58-
SYS_ResetModule(dma_modinit.rsetidx);
59-
6057
// Enable IP clock
6158
CLK_EnableModuleClock(dma_modinit.clkidx);
6259

60+
// Reset module
61+
SYS_ResetModule(dma_modinit.rsetidx);
62+
6363
/* Check PDMA0. */
6464
PDMA_T *pdma_base = dma_modbase();
6565
if (((uint32_t) pdma_base) != PDMA0_BASE) {

targets/TARGET_NUVOTON/TARGET_M261/gpio_api.c

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,10 +63,23 @@ void gpio_mode(gpio_t *obj, PinMode mode)
6363
return;
6464
}
6565

66+
uint32_t pin_index = NU_PININDEX(obj->pin);
67+
uint32_t port_index = NU_PINPORT(obj->pin);
68+
GPIO_T *gpio_base = NU_PORT_BASE(port_index);
69+
6670
switch (mode) {
6771
case PullNone:
72+
if (mode == PullNone) {
73+
GPIO_SetPullCtl(gpio_base, 1 << pin_index, GPIO_PUSEL_DISABLE);
74+
}
6875
case PullDown:
76+
if (mode == PullDown) {
77+
GPIO_SetPullCtl(gpio_base, 1 << pin_index, GPIO_PUSEL_PULL_DOWN);
78+
}
6979
case PullUp:
80+
if (mode == PullUp) {
81+
GPIO_SetPullCtl(gpio_base, 1 << pin_index, GPIO_PUSEL_PULL_UP);
82+
}
7083
/* H/W doesn't support separate configuration for input pull mode/direction.
7184
* We translate to input-only/push-pull output I/O mode dependent on direction. */
7285
obj->mode = (obj->direction == PIN_INPUT) ? InputOnly : PushPullOutput;
@@ -111,10 +124,23 @@ void gpio_dir(gpio_t *obj, PinDirection direction)
111124

112125
obj->direction = direction;
113126

127+
uint32_t pin_index = NU_PININDEX(obj->pin);
128+
uint32_t port_index = NU_PINPORT(obj->pin);
129+
GPIO_T *gpio_base = NU_PORT_BASE(port_index);
130+
114131
switch (obj->mode) {
115132
case PullNone:
133+
if (obj->mode == PullNone) {
134+
GPIO_SetPullCtl(gpio_base, 1 << pin_index, GPIO_PUSEL_DISABLE);
135+
}
116136
case PullDown:
137+
if (obj->mode == PullDown) {
138+
GPIO_SetPullCtl(gpio_base, 1 << pin_index, GPIO_PUSEL_PULL_DOWN);
139+
}
117140
case PullUp:
141+
if (obj->mode == PullUp) {
142+
GPIO_SetPullCtl(gpio_base, 1 << pin_index, GPIO_PUSEL_PULL_UP);
143+
}
118144
/* H/W doesn't support separate configuration for input pull mode/direction.
119145
* We translate to input-only/push-pull output I/O mode dependent on direction. */
120146
obj->mode = (obj->direction == PIN_INPUT) ? InputOnly : PushPullOutput;

0 commit comments

Comments
 (0)