123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158 |
- /* mbed Microcontroller Library
- *******************************************************************************
- * Copyright (c) 2016, STMicroelectronics
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- *
- * 1. Redistributions of source code must retain the above copyright notice,
- * this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright notice,
- * this list of conditions and the following disclaimer in the documentation
- * and/or other materials provided with the distribution.
- * 3. Neither the name of STMicroelectronics nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
- * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
- * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *******************************************************************************
- */
- #ifndef MBED_PINNAMESTYPES_H
- #define MBED_PINNAMESTYPES_H
- #include "cmsis.h"
- #ifdef __cplusplus
- extern "C" {
- #endif
- /* STM PIN data as used in pin_function is coded on 32 bits as below
- * [2:0] Function (like in MODER reg) : Input / Output / Alt / Analog
- * [3] Output Push-Pull / Open Drain (as in OTYPER reg)
- * [5:4] as in PUPDR reg: No Pull, Pull-up, Pull-Donc
- * [7:6] Reserved for speed config (as in OSPEEDR), but not used yet
- * [11:8] Alternate Num (as in AFRL/AFRG reg)
- * [16:12] Channel (Analog/Timer specific)
- * [17] Inverted (Analog/Timer specific)
- * [18] Analog ADC control - Only valid for specific families
- * [32:19] Reserved
- */
- #define STM_PIN_FUNCTION_MASK 0x07
- #define STM_PIN_FUNCTION_SHIFT 0
- #define STM_PIN_FUNCTION_BITS (STM_PIN_FUNCTION_MASK << STM_PIN_FUNCTION_SHIFT)
- #define STM_PIN_OD_MASK 0x01
- #define STM_PIN_OD_SHIFT 3
- #define STM_PIN_OD_BITS (STM_PIN_OD_MASK << STM_PIN_OD_SHIFT)
- #define STM_PIN_PUPD_MASK 0x03
- #define STM_PIN_PUPD_SHIFT 4
- #define STM_PIN_PUPD_BITS (STM_PIN_PUPD_MASK << STM_PIN_PUPD_SHIFT)
- #define STM_PIN_SPEED_MASK 0x03
- #define STM_PIN_SPEED_SHIFT 6
- #define STM_PIN_SPEED_BITS (STM_PIN_SPEED_MASK << STM_PIN_SPEED_SHIFT)
- #define STM_PIN_AFNUM_MASK 0x0F
- #define STM_PIN_AFNUM_SHIFT 8
- #define STM_PIN_AFNUM_BITS (STM_PIN_AFNUM_MASK << STM_PIN_AFNUM_SHIFT)
- #define STM_PIN_CHAN_MASK 0x1F
- #define STM_PIN_CHAN_SHIFT 12
- #define STM_PIN_CHANNEL_BIT (STM_PIN_CHAN_MASK << STM_PIN_CHAN_SHIFT)
- #define STM_PIN_INV_MASK 0x01
- #define STM_PIN_INV_SHIFT 17
- #define STM_PIN_INV_BIT (STM_PIN_INV_MASK << STM_PIN_INV_SHIFT)
- #define STM_PIN_AN_CTRL_MASK 0x01
- #define STM_PIN_AN_CTRL_SHIFT 18
- #define STM_PIN_ANALOG_CONTROL_BIT (STM_PIN_AN_CTRL_MASK << STM_PIN_AN_CTRL_SHIFT)
- #define STM_PIN_FUNCTION(X) (((X) >> STM_PIN_FUNCTION_SHIFT) & STM_PIN_FUNCTION_MASK)
- #define STM_PIN_OD(X) (((X) >> STM_PIN_OD_SHIFT) & STM_PIN_OD_MASK)
- #define STM_PIN_PUPD(X) (((X) >> STM_PIN_PUPD_SHIFT) & STM_PIN_PUPD_MASK)
- #define STM_PIN_SPEED(X) (((X) >> STM_PIN_SPEED_SHIFT) & STM_PIN_SPEED_MASK)
- #define STM_PIN_AFNUM(X) (((X) >> STM_PIN_AFNUM_SHIFT) & STM_PIN_AFNUM_MASK)
- #define STM_PIN_CHANNEL(X) (((X) >> STM_PIN_CHAN_SHIFT) & STM_PIN_CHAN_MASK)
- #define STM_PIN_INVERTED(X) (((X) >> STM_PIN_INV_SHIFT) & STM_PIN_INV_MASK)
- #define STM_PIN_ANALOG_CONTROL(X) (((X) >> STM_PIN_AN_CTRL_SHIFT) & STM_PIN_AN_CTRL_MASK)
- #define STM_PIN_DEFINE(FUNC_OD, PUPD, AFNUM) ((int)(FUNC_OD) |\
- ((PUPD & STM_PIN_PUPD_MASK) << STM_PIN_PUPD_SHIFT) |\
- ((AFNUM & STM_PIN_AFNUM_MASK) << STM_PIN_AFNUM_SHIFT))
- #define STM_PIN_DEFINE_EXT(FUNC_OD, PUPD, AFNUM, CHAN, INV) \
- ((int)(FUNC_OD) |\
- ((PUPD & STM_PIN_PUPD_MASK) << STM_PIN_PUPD_SHIFT) |\
- ((AFNUM & STM_PIN_AFNUM_MASK) << STM_PIN_AFNUM_SHIFT) |\
- ((CHAN & STM_PIN_CHAN_MASK) << STM_PIN_CHAN_SHIFT) |\
- ((INV & STM_PIN_INV_MASK) << STM_PIN_INV_SHIFT))
- /*
- * MACROS to support the legacy definition of PIN formats
- * The STM_MODE_ defines contain the function and the Push-pull/OpenDrain
- * configuration (legacy inheritance).
- */
- #define STM_PIN_DATA(FUNC_OD, PUPD, AFNUM) \
- STM_PIN_DEFINE(FUNC_OD, PUPD, AFNUM)
- #define STM_PIN_DATA_EXT(FUNC_OD, PUPD, AFNUM, CHANNEL, INVERTED) \
- STM_PIN_DEFINE_EXT(FUNC_OD, PUPD, AFNUM, CHANNEL, INVERTED)
- typedef enum {
- STM_PIN_INPUT = 0,
- STM_PIN_OUTPUT = 1,
- STM_PIN_ALTERNATE = 2,
- STM_PIN_ANALOG = 3,
- } StmPinFunction;
- #define STM_MODE_INPUT (STM_PIN_INPUT)
- #define STM_MODE_OUTPUT_PP (STM_PIN_OUTPUT)
- #define STM_MODE_OUTPUT_OD (STM_PIN_OUTPUT | STM_PIN_OD_BITS)
- #define STM_MODE_AF_PP (STM_PIN_ALTERNATE)
- #define STM_MODE_AF_OD (STM_PIN_ALTERNATE | STM_PIN_OD_BITS)
- #define STM_MODE_ANALOG (STM_PIN_ANALOG)
- #define STM_MODE_ANALOG_ADC_CONTROL (STM_PIN_ANALOG | STM_PIN_ANALOG_CONTROL_BIT)
- // High nibble = port number (0=A, 1=B, 2=C, 3=D, 4=E, 5=F, 6=G, 7=H)
- // Low nibble = pin number
- #define STM_PORT(X) (((uint32_t)(X) >> 4) & 0xF)
- #define STM_PIN(X) ((uint32_t)(X) & 0xF)
- /* Defines to be used by application */
- typedef enum {
- PIN_INPUT = 0,
- PIN_OUTPUT
- } PinDirection;
- typedef enum {
- PullNone = 0,
- PullUp = 1,
- PullDown = 2,
- OpenDrainPullUp = 3,
- OpenDrainNoPull = 4,
- OpenDrainPullDown = 5,
- PushPullNoPull = PullNone,
- PushPullPullUp = PullUp,
- PushPullPullDown = PullDown,
- OpenDrain = OpenDrainPullUp,
- PullDefault = PullNone
- } PinMode;
- #ifdef __cplusplus
- }
- #endif
- #endif
|