STM pin_function(), pin_mode(): return immediately when given pin is NC

Additionally, remove redundant pin checks against NC when above functions are used.
pull/12460/head
Przemyslaw Stekiel 2020-02-19 11:27:08 +01:00
parent 5aaf3b7479
commit 713be4fd77
4 changed files with 24 additions and 42 deletions

View File

@ -100,12 +100,8 @@ static void _can_init_freq_direct(can_t *obj, const can_pinmap_t *pinmap, int hz
pin_function(pinmap->rd_pin, pinmap->rd_function);
pin_function(pinmap->td_pin, pinmap->td_function);
// Add pull-ups
if (pinmap->rd_pin != NC) {
pin_mode(pinmap->rd_pin, PullUp);
}
if (pinmap->td_pin != NC) {
pin_mode(pinmap->td_pin, PullUp);
}
pin_mode(pinmap->rd_pin, PullUp);
pin_mode(pinmap->td_pin, PullUp);
// Default values
obj->CanHandle.Instance = (FDCAN_GlobalTypeDef *)pinmap->peripheral;
@ -599,12 +595,8 @@ static void _can_init_freq_direct(can_t *obj, const can_pinmap_t *pinmap, int hz
pin_function(pinmap->rd_pin, pinmap->rd_function);
pin_function(pinmap->td_pin, pinmap->td_function);
// Add pull-ups
if (pinmap->rd_pin != NC) {
pin_mode(pinmap->rd_pin, PullUp);
}
if (pinmap->td_pin != NC) {
pin_mode(pinmap->td_pin, PullUp);
}
pin_mode(pinmap->rd_pin, PullUp);
pin_mode(pinmap->td_pin, PullUp);
/* Use default values for rist init */
obj->CanHandle.Instance = (CAN_TypeDef *)pinmap->peripheral;

View File

@ -59,7 +59,9 @@ const uint32_t ll_pin_defines[16] = {
*/
void pin_function(PinName pin, int data)
{
MBED_ASSERT(pin != (PinName)NC);
if (pin == NC) {
return;
}
// Get the pin informations
uint32_t mode = STM_PIN_FUNCTION(data);
@ -163,7 +165,9 @@ void pin_function(PinName pin, int data)
*/
void pin_mode(PinName pin, PinMode mode)
{
MBED_ASSERT(pin != (PinName)NC);
if (pin == NC) {
return;
}
uint32_t port_index = STM_PORT(pin);
uint32_t ll_pin = ll_pin_defines[STM_PIN(pin)];

View File

@ -157,14 +157,10 @@ static void _serial_init_direct(serial_t *obj, const serial_pinmap_t *pinmap)
MBED_ASSERT(obj_s->index >= 0);
// Configure UART pins
if (pinmap->tx_pin != NC) {
pin_function(pinmap->tx_pin, pinmap->tx_function);
pin_mode(pinmap->tx_pin, PullUp);
}
if (pinmap->rx_pin != NC) {
pin_function(pinmap->rx_pin, pinmap->rx_function);
pin_mode(pinmap->rx_pin, PullUp);
}
pin_function(pinmap->tx_pin, pinmap->tx_function);
pin_mode(pinmap->tx_pin, PullUp);
pin_function(pinmap->rx_pin, pinmap->rx_function);
pin_mode(pinmap->rx_pin, PullUp);
// Configure UART
obj_s->baudrate = 9600; // baudrate default value
@ -355,13 +351,9 @@ void serial_free(serial_t *obj)
#endif /* DUAL_CORE */
// Configure GPIOs
if (obj_s->pin_tx != NC) {
pin_function(obj_s->pin_tx, STM_PIN_DATA(STM_MODE_INPUT, GPIO_NOPULL, 0));
}
pin_function(obj_s->pin_tx, STM_PIN_DATA(STM_MODE_INPUT, GPIO_NOPULL, 0));
if (obj_s->pin_rx != NC) {
pin_function(obj_s->pin_rx, STM_PIN_DATA(STM_MODE_INPUT, GPIO_NOPULL, 0));
}
pin_function(obj_s->pin_rx, STM_PIN_DATA(STM_MODE_INPUT, GPIO_NOPULL, 0));
serial_irq_ids[obj_s->index] = 0;
}

View File

@ -218,14 +218,12 @@ static void _spi_init_direct(spi_t *obj, const spi_pinmap_t *pinmap)
#endif
// Configure the SPI pins
if (pinmap->mosi_pin != NC) {
pin_function(pinmap->mosi_pin, pinmap->mosi_function);
pin_mode(pinmap->mosi_pin, PullNone);
}
if (pinmap->miso_pin != NC) {
pin_function(pinmap->miso_pin, pinmap->miso_function);
pin_mode(pinmap->miso_pin, PullNone);
}
pin_function(pinmap->mosi_pin, pinmap->mosi_function);
pin_mode(pinmap->mosi_pin, PullNone);
pin_function(pinmap->miso_pin, pinmap->miso_function);
pin_mode(pinmap->miso_pin, PullNone);
pin_function(pinmap->sclk_pin, pinmap->sclk_function);
pin_mode(pinmap->sclk_pin, PullNone);
spiobj->pin_miso = pinmap->miso_pin;
@ -370,12 +368,8 @@ void spi_free(spi_t *obj)
LL_HSEM_ReleaseLock(HSEM, CFG_HW_RCC_SEMID, HSEM_CR_COREID_CURRENT);
#endif /* DUAL_CORE */
// Configure GPIOs
if (spiobj->pin_miso != NC) {
pin_function(spiobj->pin_miso, STM_PIN_DATA(STM_MODE_INPUT, GPIO_NOPULL, 0));
}
if (spiobj->pin_mosi != NC) {
pin_function(spiobj->pin_mosi, STM_PIN_DATA(STM_MODE_INPUT, GPIO_NOPULL, 0));
}
pin_function(spiobj->pin_miso, STM_PIN_DATA(STM_MODE_INPUT, GPIO_NOPULL, 0));
pin_function(spiobj->pin_mosi, STM_PIN_DATA(STM_MODE_INPUT, GPIO_NOPULL, 0));
pin_function(spiobj->pin_sclk, STM_PIN_DATA(STM_MODE_INPUT, GPIO_NOPULL, 0));
if (handle->Init.NSS != SPI_NSS_SOFT) {
pin_function(spiobj->pin_ssel, STM_PIN_DATA(STM_MODE_INPUT, GPIO_NOPULL, 0));