mirror of https://github.com/ARMmbed/mbed-os.git
				
				
				
			Merge pull request #12379 from mprse/STDIO_UART_restricted_all
Add STDIO UART as restricted for FPGA testing for all targets and support for restricting GPIOpull/12417/head
						commit
						d3078a39b1
					
				| 
						 | 
				
			
			@ -20,6 +20,17 @@
 | 
			
		|||
 | 
			
		||||
#include <list>
 | 
			
		||||
 | 
			
		||||
#define UART_NAME         "UART"
 | 
			
		||||
#define UARTNOFC_NAME     "UART-no-FC"
 | 
			
		||||
#define ANALOGOUT_NAME    "DAC"
 | 
			
		||||
#define ANALOGIN_NAME     "ADC"
 | 
			
		||||
#define PWM_NAME          "PWM"
 | 
			
		||||
#define I2C_NAME          "I2C"
 | 
			
		||||
#define SPI_NAME          "SPI"
 | 
			
		||||
#define SPISLAVE_NAME     "SPISlave"
 | 
			
		||||
#define GPIO_NAME         "GPIO"
 | 
			
		||||
#define GPIO_IRQ_NAME     "GPIO_IRQ"
 | 
			
		||||
 | 
			
		||||
// test function prototypes
 | 
			
		||||
typedef void (*TF1)(PinName p0);
 | 
			
		||||
typedef void (*TF2)(PinName p0, PinName p1);
 | 
			
		||||
| 
						 | 
				
			
			@ -115,11 +126,26 @@ void find_ports(std::list<PortType> &matched_ports, std::list<PortType> ¬_mat
 | 
			
		|||
                             FormFactorType::pin_to_string(port.pins[i]), port.pins[i]);
 | 
			
		||||
                continue;
 | 
			
		||||
            }
 | 
			
		||||
            if (pinmap_list_has_peripheral(pinmap_restricted_peripherals(), port.peripheral)) {
 | 
			
		||||
                utest_printf("Skipping %s peripheral %i with pin %s (%i)\r\n", pin_type,
 | 
			
		||||
                             port.peripheral, FormFactorType::pin_to_string(port.pins[i]), port.pins[i]);
 | 
			
		||||
                continue;
 | 
			
		||||
 | 
			
		||||
            if (!strcmp(PortType::PinMap::name, GPIO_IRQ_NAME) || !strcmp(PortType::PinMap::name, GPIO_NAME)) {
 | 
			
		||||
                // Don't test restricted gpio pins
 | 
			
		||||
                if (pinmap_list_has_pin(pinmap_gpio_restricted_pins(), port.pins[i])) {
 | 
			
		||||
                    utest_printf("Skipping %s pin %s (%i)\r\n", pin_type,
 | 
			
		||||
                                 FormFactorType::pin_to_string(port.pins[i]), port.pins[i]);
 | 
			
		||||
                    continue;
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
#if DEVICE_SERIAL
 | 
			
		||||
            if (!strcmp(PortType::PinMap::name, UART_NAME) || !strcmp(PortType::PinMap::name, UARTNOFC_NAME)) {
 | 
			
		||||
                if (pinmap_list_has_peripheral(pinmap_uart_restricted_peripherals(), port.peripheral)) {
 | 
			
		||||
                    utest_printf("Skipping %s peripheral %i with pin %s (%i)\r\n", pin_type,
 | 
			
		||||
                                 port.peripheral, FormFactorType::pin_to_string(port.pins[i]), port.pins[i]);
 | 
			
		||||
                    continue;
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
            // skipp pin searching if single pin port type
 | 
			
		||||
            if (PortType::pin_count > 1) {
 | 
			
		||||
                find_port_pins<PortType, FormFactorType>(port);
 | 
			
		||||
| 
						 | 
				
			
			@ -442,7 +468,7 @@ struct GPIOMaps {
 | 
			
		|||
};
 | 
			
		||||
const PinMap *GPIOMaps::maps[] = { gpio_pinmap() };
 | 
			
		||||
const char *const GPIOMaps::pin_type_names[] = { "IO" };
 | 
			
		||||
const char *const GPIOMaps::name = "GPIO";
 | 
			
		||||
const char *const GPIOMaps::name = GPIO_NAME;
 | 
			
		||||
typedef Port<1, GPIOMaps, DefaultFormFactor, TF1> GPIOPort;
 | 
			
		||||
 | 
			
		||||
#if DEVICE_INTERRUPTIN
 | 
			
		||||
| 
						 | 
				
			
			@ -454,7 +480,7 @@ struct GPIOIRQMaps {
 | 
			
		|||
};
 | 
			
		||||
const PinMap *GPIOIRQMaps::maps[] = { gpio_irq_pinmap() };
 | 
			
		||||
const char *const GPIOIRQMaps::pin_type_names[] = { "IRQ_IN" };
 | 
			
		||||
const char *const GPIOIRQMaps::name = "GPIO_IRQ";
 | 
			
		||||
const char *const GPIOIRQMaps::name = GPIO_IRQ_NAME;
 | 
			
		||||
typedef Port<1, GPIOIRQMaps, DefaultFormFactor, TF1> GPIOIRQPort;
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -467,7 +493,7 @@ struct SPIMaps {
 | 
			
		|||
};
 | 
			
		||||
const PinMap *SPIMaps::maps[] = { spi_master_mosi_pinmap(), spi_master_miso_pinmap(), spi_master_clk_pinmap(), spi_master_cs_pinmap() };
 | 
			
		||||
const char *const SPIMaps::pin_type_names[] = { "MOSI", "MISO", "SCLK", "SSEL" };
 | 
			
		||||
const char *const SPIMaps::name = "SPI";
 | 
			
		||||
const char *const SPIMaps::name = SPI_NAME;
 | 
			
		||||
typedef Port<4, SPIMaps, DefaultFormFactor, TF4> SPIPort;
 | 
			
		||||
 | 
			
		||||
struct SPINoCSMaps {
 | 
			
		||||
| 
						 | 
				
			
			@ -477,7 +503,7 @@ struct SPINoCSMaps {
 | 
			
		|||
};
 | 
			
		||||
const PinMap *SPINoCSMaps::maps[] = { spi_master_mosi_pinmap(), spi_master_miso_pinmap(), spi_master_clk_pinmap()};
 | 
			
		||||
const char *const SPINoCSMaps::pin_type_names[] = { "MOSI", "MISO", "SCLK" };
 | 
			
		||||
const char *const SPINoCSMaps::name = "SPI";
 | 
			
		||||
const char *const SPINoCSMaps::name = SPI_NAME;
 | 
			
		||||
typedef Port<3, SPINoCSMaps, DefaultFormFactor, TF3> SPINoCSPort;
 | 
			
		||||
 | 
			
		||||
struct SPISlaveMaps {
 | 
			
		||||
| 
						 | 
				
			
			@ -487,7 +513,7 @@ struct SPISlaveMaps {
 | 
			
		|||
};
 | 
			
		||||
const PinMap *SPISlaveMaps::maps[] = { spi_slave_mosi_pinmap(), spi_slave_miso_pinmap(), spi_slave_clk_pinmap(), spi_slave_cs_pinmap() };
 | 
			
		||||
const char *const SPISlaveMaps::pin_type_names[] = { "MOSI", "MISO", "SCLK", "SSEL" };
 | 
			
		||||
const char *const SPISlaveMaps::name = "SPISlave";
 | 
			
		||||
const char *const SPISlaveMaps::name = SPISLAVE_NAME;
 | 
			
		||||
typedef Port<4, SPISlaveMaps, DefaultFormFactor, TF4> SPISlavePort;
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -500,7 +526,7 @@ struct I2CMaps {
 | 
			
		|||
};
 | 
			
		||||
const PinMap *I2CMaps::maps[] = { i2c_master_sda_pinmap(), i2c_master_scl_pinmap() };
 | 
			
		||||
const char *const I2CMaps::pin_type_names[] = { "SDA", "SCL" };
 | 
			
		||||
const char *const I2CMaps::name = "I2C";
 | 
			
		||||
const char *const I2CMaps::name = I2C_NAME;
 | 
			
		||||
typedef Port<2, I2CMaps, DefaultFormFactor, TF2> I2CPort;
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -513,7 +539,7 @@ struct PWMMaps {
 | 
			
		|||
};
 | 
			
		||||
const PinMap *PWMMaps::maps[] = { pwmout_pinmap() };
 | 
			
		||||
const char *const PWMMaps::pin_type_names[] = { "PWM_OUT" };
 | 
			
		||||
const char *const PWMMaps::name = "PWM";
 | 
			
		||||
const char *const PWMMaps::name = PWM_NAME;
 | 
			
		||||
typedef Port<1, PWMMaps, DefaultFormFactor, TF1> PWMPort;
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -526,7 +552,7 @@ struct AnaloginMaps {
 | 
			
		|||
};
 | 
			
		||||
const PinMap *AnaloginMaps::maps[] = { analogin_pinmap() };
 | 
			
		||||
const char *const AnaloginMaps::pin_type_names[] = { "ADC_IN" };
 | 
			
		||||
const char *const AnaloginMaps::name = "ADC";
 | 
			
		||||
const char *const AnaloginMaps::name = ANALOGIN_NAME;
 | 
			
		||||
typedef Port<1, AnaloginMaps, DefaultFormFactor, TF1> AnaloginPort;
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -539,7 +565,7 @@ struct AnalogoutMaps {
 | 
			
		|||
};
 | 
			
		||||
const PinMap *AnalogoutMaps::maps[] = { analogout_pinmap() };
 | 
			
		||||
const char *const AnalogoutMaps::pin_type_names[] = { "DAC_OUT" };
 | 
			
		||||
const char *const AnalogoutMaps::name = "DAC";
 | 
			
		||||
const char *const AnalogoutMaps::name = ANALOGOUT_NAME;
 | 
			
		||||
typedef Port<1, AnalogoutMaps, DefaultFormFactor, TF1> AnalogoutPort;
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -553,7 +579,7 @@ struct UARTMaps {
 | 
			
		|||
};
 | 
			
		||||
const PinMap *UARTMaps::maps[] = { serial_tx_pinmap(), serial_rx_pinmap(), serial_cts_pinmap(), serial_rts_pinmap() };
 | 
			
		||||
const char *const UARTMaps::pin_type_names[] = { "TX", "RX", "CLS", "RTS" };
 | 
			
		||||
const char *const UARTMaps::name = "UART";
 | 
			
		||||
const char *const UARTMaps::name = UART_NAME;
 | 
			
		||||
typedef Port<4, UARTMaps, DefaultFormFactor, TF4> UARTPort;
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -564,8 +590,7 @@ struct UARTNoFCMaps {
 | 
			
		|||
};
 | 
			
		||||
const PinMap *UARTNoFCMaps::maps[] = { serial_tx_pinmap(), serial_rx_pinmap() };
 | 
			
		||||
const char *const UARTNoFCMaps::pin_type_names[] = { "TX", "RX" };
 | 
			
		||||
const char *const UARTNoFCMaps::name = "UART-no-FC";
 | 
			
		||||
const char *const UARTNoFCMaps::name = UARTNOFC_NAME;
 | 
			
		||||
typedef Port<2, UARTNoFCMaps, DefaultFormFactor, TF2> UARTNoFCPort;
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -20,6 +20,7 @@
 | 
			
		|||
#include "platform/mbed_toolchain.h"
 | 
			
		||||
#include "platform/mbed_assert.h"
 | 
			
		||||
#include "device.h"
 | 
			
		||||
#include "hal/serial_api.h"
 | 
			
		||||
 | 
			
		||||
//*** Common form factors ***
 | 
			
		||||
#ifdef TARGET_FF_ARDUINO
 | 
			
		||||
| 
						 | 
				
			
			@ -77,12 +78,31 @@ MBED_WEAK const PinList *pinmap_restricted_pins()
 | 
			
		|||
    return &pin_list;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
//*** Default restricted peripherals ***
 | 
			
		||||
MBED_WEAK const PeripheralList *pinmap_restricted_peripherals()
 | 
			
		||||
//*** Default restricted gpio pins ***
 | 
			
		||||
// GPIO pins are special case because there are no pin-maps for GPIO
 | 
			
		||||
MBED_WEAK const PinList *pinmap_gpio_restricted_pins()
 | 
			
		||||
{
 | 
			
		||||
    static const PeripheralList peripheral_list = {
 | 
			
		||||
    static const PinList pin_list = {
 | 
			
		||||
        0,
 | 
			
		||||
        0
 | 
			
		||||
    };
 | 
			
		||||
    return &pin_list;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
//*** Default restricted peripherals ***
 | 
			
		||||
#if DEVICE_SERIAL
 | 
			
		||||
MBED_WEAK const PeripheralList *pinmap_uart_restricted_peripherals()
 | 
			
		||||
{
 | 
			
		||||
    static const int stdio_uart = pinmap_peripheral(STDIO_UART_TX, serial_tx_pinmap());
 | 
			
		||||
 | 
			
		||||
    static const int peripherals[] = {
 | 
			
		||||
        stdio_uart
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    static const PeripheralList peripheral_list = {
 | 
			
		||||
        sizeof peripherals / sizeof peripherals[0],
 | 
			
		||||
        peripherals
 | 
			
		||||
    };
 | 
			
		||||
    return &peripheral_list;
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
							
								
								
									
										36
									
								
								hal/pinmap.h
								
								
								
								
							
							
						
						
									
										36
									
								
								hal/pinmap.h
								
								
								
								
							| 
						 | 
				
			
			@ -155,7 +155,7 @@ bool pinmap_list_has_peripheral(const PeripheralList *list, int peripheral);
 | 
			
		|||
const PinList *pinmap_restricted_pins(void);
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Get the pin list of peripherals to avoid during testing
 | 
			
		||||
 * Get the pin list of peripherals per interface to avoid during testing
 | 
			
		||||
 *
 | 
			
		||||
 * The restricted peripheral list is used to indicate to testing
 | 
			
		||||
 * that a peripheral should be skipped due to some caveat about it.
 | 
			
		||||
| 
						 | 
				
			
			@ -166,18 +166,34 @@ const PinList *pinmap_restricted_pins(void);
 | 
			
		|||
 * function if they have peripherals which should be
 | 
			
		||||
 * skipped during testing.
 | 
			
		||||
 *
 | 
			
		||||
 * @note Some targets use the same value for multiple
 | 
			
		||||
 * different types of peripherals. For example SPI 0
 | 
			
		||||
 * and UART 0 may both be identified by the peripheral
 | 
			
		||||
 * value 0. If your target does this then do not
 | 
			
		||||
 * use this function to skip peripherals, as this will
 | 
			
		||||
 * unintentionally cause all peripherals with that value
 | 
			
		||||
 * to be skipped. Instead these entries should be removed
 | 
			
		||||
 * from the peripheral PinMap itself.
 | 
			
		||||
 * @note Restricting peripheral is at the moment available for UART
 | 
			
		||||
 *       interface only as only STDIO UART must be skipped because it is
 | 
			
		||||
 *       used by Mbed.
 | 
			
		||||
 *       Restricting peripherals for other interfaces should be added
 | 
			
		||||
 *       in the future if required.
 | 
			
		||||
 *
 | 
			
		||||
 * @return Pointer to a peripheral list of peripheral to avoid
 | 
			
		||||
 */
 | 
			
		||||
const PeripheralList *pinmap_restricted_peripherals(void);
 | 
			
		||||
#if DEVICE_SERIAL
 | 
			
		||||
const PeripheralList *pinmap_uart_restricted_peripherals(void);
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Get the pin list of pins to avoid during GPIO/GPIO_IRQ testing
 | 
			
		||||
 *
 | 
			
		||||
 * The GPIO restricted pin list is used to indicate to testing
 | 
			
		||||
 * that a pin should be skipped due to some caveat about it.
 | 
			
		||||
 *
 | 
			
		||||
 * Targets should override the weak implementation of this
 | 
			
		||||
 * function if they have peripherals which should be
 | 
			
		||||
 * skipped during testing.
 | 
			
		||||
 *
 | 
			
		||||
 * @note This is special case only for GPIO/GPIO_IRQ tests because
 | 
			
		||||
 *       targets do not provide pin-maps for GPIO.
 | 
			
		||||
 *
 | 
			
		||||
 * @return Pointer to a peripheral list of peripheral to avoid
 | 
			
		||||
 */
 | 
			
		||||
const PinList *pinmap_gpio_restricted_pins(void);
 | 
			
		||||
 | 
			
		||||
#ifdef TARGET_FF_ARDUINO
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -43,7 +43,7 @@ void pin_mode(PinName pin, PinMode mode)
 | 
			
		|||
    uint32_t pin_index = NU_PINNAME_TO_PIN(pin);
 | 
			
		||||
    uint32_t port_index = NU_PINNAME_TO_PORT(pin);
 | 
			
		||||
    GPIO_T *gpio_base = NU_PORT_BASE(port_index);
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    uint32_t mode_intern = GPIO_MODE_INPUT;
 | 
			
		||||
 | 
			
		||||
    switch (mode) {
 | 
			
		||||
| 
						 | 
				
			
			@ -81,21 +81,6 @@ void pin_mode(PinName pin, PinMode mode)
 | 
			
		|||
     */
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* List of peripherals excluded from testing */
 | 
			
		||||
const PeripheralList *pinmap_restricted_peripherals()
 | 
			
		||||
{
 | 
			
		||||
    static const int perifs[] = {
 | 
			
		||||
        STDIO_UART          // Dedicated to USB VCOM
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    static const PeripheralList peripheral_list = {
 | 
			
		||||
        sizeof(perifs) / sizeof(perifs[0]),
 | 
			
		||||
        perifs
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    return &peripheral_list;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#if defined(__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U)
 | 
			
		||||
 | 
			
		||||
static void pin_function_impl(int32_t pin, int32_t data, bool nonsecure_caller)
 | 
			
		||||
| 
						 | 
				
			
			@ -103,16 +88,16 @@ static void pin_function_impl(int32_t pin, int32_t data, bool nonsecure_caller)
 | 
			
		|||
    MBED_ASSERT(pin != (PinName)NC);
 | 
			
		||||
    uint32_t pin_index = NU_PINNAME_TO_PIN(pin);
 | 
			
		||||
    uint32_t port_index = NU_PINNAME_TO_PORT(pin);
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    /* Guard access to secure GPIO from non-secure domain */
 | 
			
		||||
    if (nonsecure_caller && 
 | 
			
		||||
    if (nonsecure_caller &&
 | 
			
		||||
        (! (SCU_INIT_IONSSET_VAL & (1 << (port_index + 0))))) {
 | 
			
		||||
        error("Non-secure domain tries to control secure or undefined GPIO.");
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    __IO uint32_t *GPx_MFPx = ((__IO uint32_t *) &SYS->GPA_MFPL) + port_index * 2 + (pin_index / 8);
 | 
			
		||||
    uint32_t MFP_Msk = NU_MFP_MSK(pin_index);
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    // E.g.: SYS->GPA_MFPL  = (SYS->GPA_MFPL & (~SYS_GPA_MFPL_PA0MFP_Msk) ) | SYS_GPA_MFPL_PA0MFP_SC0_CD  ;
 | 
			
		||||
    *GPx_MFPx  = (*GPx_MFPx & (~MFP_Msk)) | data;
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -83,18 +83,3 @@ void pin_mode(PinName pin, PinMode mode)
 | 
			
		|||
     * 2. PushPullOutput/PIN_INPUT
 | 
			
		||||
     */
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* List of peripherals excluded from testing */
 | 
			
		||||
const PeripheralList *pinmap_restricted_peripherals()
 | 
			
		||||
{
 | 
			
		||||
    static const int perifs[] = {
 | 
			
		||||
        STDIO_UART          // Dedicated to USB VCOM
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    static const PeripheralList peripheral_list = {
 | 
			
		||||
        sizeof(perifs) / sizeof(perifs[0]),
 | 
			
		||||
        perifs
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    return &peripheral_list;
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,4 +1,4 @@
 | 
			
		|||
/* 
 | 
			
		||||
/*
 | 
			
		||||
 * Copyright (c) 2019-2020 Nuvoton Technology Corporation
 | 
			
		||||
 * SPDX-License-Identifier: Apache-2.0
 | 
			
		||||
 *
 | 
			
		||||
| 
						 | 
				
			
			@ -29,10 +29,10 @@ void pin_function(PinName pin, int data)
 | 
			
		|||
    MBED_ASSERT(pin != (PinName)NC);
 | 
			
		||||
    uint32_t pin_index = NU_PINNAME_TO_PIN(pin);
 | 
			
		||||
    uint32_t port_index = NU_PINNAME_TO_PORT(pin);
 | 
			
		||||
   
 | 
			
		||||
 | 
			
		||||
    __IO uint32_t *GPx_MFPx = ((__IO uint32_t *) &SYS->GPA_MFPL) + port_index * 2 + (pin_index / 8);
 | 
			
		||||
    uint32_t MFP_Msk = NU_MFP_MSK(pin_index);
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    // E.g.: SYS->GPA_MFPL  = (SYS->GPA_MFPL & (~SYS_GPA_MFPL_PA0MFP_Msk) ) | SYS_GPA_MFPL_PA0MFP_SC0_CD  ;
 | 
			
		||||
    *GPx_MFPx  = (*GPx_MFPx & (~MFP_Msk)) | data;
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -46,7 +46,7 @@ void pin_mode(PinName pin, PinMode mode)
 | 
			
		|||
    uint32_t pin_index = NU_PINNAME_TO_PIN(pin);
 | 
			
		||||
    uint32_t port_index = NU_PINNAME_TO_PORT(pin);
 | 
			
		||||
    GPIO_T *gpio_base = NU_PORT_BASE(port_index);
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    uint32_t mode_intern = GPIO_MODE_INPUT;
 | 
			
		||||
 | 
			
		||||
    switch (mode) {
 | 
			
		||||
| 
						 | 
				
			
			@ -83,18 +83,3 @@ void pin_mode(PinName pin, PinMode mode)
 | 
			
		|||
     * 2. PushPullOutput/PIN_INPUT
 | 
			
		||||
     */
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* List of peripherals excluded from testing */
 | 
			
		||||
const PeripheralList *pinmap_restricted_peripherals()
 | 
			
		||||
{
 | 
			
		||||
    static const int perifs[] = {
 | 
			
		||||
        STDIO_UART          // Dedicated to USB VCOM
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    static const PeripheralList peripheral_list = {
 | 
			
		||||
        sizeof(perifs) / sizeof(perifs[0]),
 | 
			
		||||
        perifs
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    return &peripheral_list;
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -31,10 +31,10 @@ void pin_function(PinName pin, int data)
 | 
			
		|||
    __IO uint32_t *GPx_MFPx = ((__IO uint32_t *) &SYS->GPA_MFPL) + port_index * 2 + (pin_index / 8);
 | 
			
		||||
    //uint32_t MFP_Pos = NU_MFP_POS(pin_index);
 | 
			
		||||
    uint32_t MFP_Msk = NU_MFP_MSK(pin_index);
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    // E.g.: SYS->GPA_MFPL  = (SYS->GPA_MFPL & (~SYS_GPA_MFPL_PA0MFP_Msk) ) | SYS_GPA_MFPL_PA0MFP_SC0_CD  ;
 | 
			
		||||
    *GPx_MFPx  = (*GPx_MFPx & (~MFP_Msk)) | data;
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    // [TODO] Disconnect JTAG-DP + SW-DP signals.
 | 
			
		||||
    // Warning: Need to reconnect under reset
 | 
			
		||||
    //if ((pin == PA_13) || (pin == PA_14)) {
 | 
			
		||||
| 
						 | 
				
			
			@ -54,7 +54,7 @@ void pin_mode(PinName pin, PinMode mode)
 | 
			
		|||
    uint32_t pin_index = NU_PINNAME_TO_PIN(pin);
 | 
			
		||||
    uint32_t port_index = NU_PINNAME_TO_PORT(pin);
 | 
			
		||||
    GPIO_T *gpio_base = NU_PORT_BASE(port_index);
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    uint32_t mode_intern = GPIO_MODE_INPUT;
 | 
			
		||||
 | 
			
		||||
    switch (mode) {
 | 
			
		||||
| 
						 | 
				
			
			@ -91,18 +91,3 @@ void pin_mode(PinName pin, PinMode mode)
 | 
			
		|||
     * 2. PushPullOutput/PIN_INPUT
 | 
			
		||||
     */
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* List of peripherals excluded from testing */
 | 
			
		||||
const PeripheralList *pinmap_restricted_peripherals()
 | 
			
		||||
{
 | 
			
		||||
    static const int perifs[] = {
 | 
			
		||||
        STDIO_UART          // Dedicated to USB VCOM
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    static const PeripheralList peripheral_list = {
 | 
			
		||||
        sizeof(perifs) / sizeof(perifs[0]),
 | 
			
		||||
        perifs
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    return &peripheral_list;
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -97,18 +97,3 @@ const PinList *pinmap_restricted_pins()
 | 
			
		|||
    };
 | 
			
		||||
    return &pin_list;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* List of peripherals excluded from testing */
 | 
			
		||||
const PeripheralList *pinmap_restricted_peripherals()
 | 
			
		||||
{
 | 
			
		||||
    static const int perifs[] = {
 | 
			
		||||
        STDIO_UART          // Dedicated to USB VCOM
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    static const PeripheralList peripheral_list = {
 | 
			
		||||
        sizeof(perifs) / sizeof(perifs[0]),
 | 
			
		||||
        perifs
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    return &peripheral_list;
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -30,7 +30,7 @@ void pin_function(PinName pin, int data)
 | 
			
		|||
    uint32_t port_index = NU_PINNAME_TO_PORT(pin);
 | 
			
		||||
    __IO uint32_t *Px_x_MFP = ((__IO uint32_t *) &SYS->PA_L_MFP) + port_index * 2 + (pin_index / 8);
 | 
			
		||||
    uint32_t MFP_Msk = NU_MFP_MSK(pin_index);
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    // E.g.: SYS->PA_L_MFP  = (SYS->PA_L_MFP & (~SYS_PA_L_MFP_PA0_MFP_Msk) ) | SYS_PA_L_MFP_PA0_MFP_SC0_CD  ;
 | 
			
		||||
    *Px_x_MFP  = (*Px_x_MFP & (~MFP_Msk)) | data;
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -44,7 +44,7 @@ void pin_mode(PinName pin, PinMode mode)
 | 
			
		|||
    uint32_t pin_index = NU_PINNAME_TO_PIN(pin);
 | 
			
		||||
    uint32_t port_index = NU_PINNAME_TO_PORT(pin);
 | 
			
		||||
    GPIO_T *gpio_base = NU_PORT_BASE(port_index);
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    uint32_t mode_intern;
 | 
			
		||||
 | 
			
		||||
    switch (mode) {
 | 
			
		||||
| 
						 | 
				
			
			@ -59,7 +59,7 @@ void pin_mode(PinName pin, PinMode mode)
 | 
			
		|||
        case OpenDrain:
 | 
			
		||||
            mode_intern = GPIO_PMD_OPEN_DRAIN;
 | 
			
		||||
            break;
 | 
			
		||||
            
 | 
			
		||||
 | 
			
		||||
        default:
 | 
			
		||||
            /* H/W doesn't support separate configuration for input pull mode/direction.
 | 
			
		||||
             * We expect upper layer would have translated input pull mode/direction
 | 
			
		||||
| 
						 | 
				
			
			@ -77,18 +77,3 @@ void pin_mode(PinName pin, PinMode mode)
 | 
			
		|||
     * 2. PushPullOutput/PIN_INPUT
 | 
			
		||||
     */
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* List of peripherals excluded from testing */
 | 
			
		||||
const PeripheralList *pinmap_restricted_peripherals()
 | 
			
		||||
{
 | 
			
		||||
    static const int perifs[] = {
 | 
			
		||||
        STDIO_UART          // Dedicated to USB VCOM
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    static const PeripheralList peripheral_list = {
 | 
			
		||||
        sizeof(perifs) / sizeof(perifs[0]),
 | 
			
		||||
        perifs
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    return &peripheral_list;
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -31,10 +31,10 @@ void pin_function(PinName pin, int data)
 | 
			
		|||
    __IO uint32_t *GPx_MFPx = ((__IO uint32_t *) &SYS->GPA_MFPL) + port_index * 2 + (pin_index / 8);
 | 
			
		||||
    //uint32_t MFP_Pos = NU_MFP_POS(pin_index);
 | 
			
		||||
    uint32_t MFP_Msk = NU_MFP_MSK(pin_index);
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    // E.g.: SYS->GPA_MFPL  = (SYS->GPA_MFPL & (~SYS_GPA_MFPL_PA0MFP_Msk) ) | SYS_GPA_MFPL_PA0MFP_SC0_CD  ;
 | 
			
		||||
    *GPx_MFPx  = (*GPx_MFPx & (~MFP_Msk)) | data;
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    // [TODO] Disconnect JTAG-DP + SW-DP signals.
 | 
			
		||||
    // Warning: Need to reconnect under reset
 | 
			
		||||
    //if ((pin == PA_13) || (pin == PA_14)) {
 | 
			
		||||
| 
						 | 
				
			
			@ -54,7 +54,7 @@ void pin_mode(PinName pin, PinMode mode)
 | 
			
		|||
    uint32_t pin_index = NU_PINNAME_TO_PIN(pin);
 | 
			
		||||
    uint32_t port_index = NU_PINNAME_TO_PORT(pin);
 | 
			
		||||
    GPIO_T *gpio_base = NU_PORT_BASE(port_index);
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    uint32_t mode_intern;
 | 
			
		||||
 | 
			
		||||
    switch (mode) {
 | 
			
		||||
| 
						 | 
				
			
			@ -91,18 +91,3 @@ void pin_mode(PinName pin, PinMode mode)
 | 
			
		|||
     * 2. PushPullOutput/PIN_INPUT
 | 
			
		||||
     */
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* List of peripherals excluded from testing */
 | 
			
		||||
const PeripheralList *pinmap_restricted_peripherals()
 | 
			
		||||
{
 | 
			
		||||
    static const int perifs[] = {
 | 
			
		||||
        STDIO_UART          // Dedicated to USB VCOM
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    static const PeripheralList peripheral_list = {
 | 
			
		||||
        sizeof(perifs) / sizeof(perifs[0]),
 | 
			
		||||
        perifs
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    return &peripheral_list;
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue