PinNamesTypes.h 6.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158
  1. /* mbed Microcontroller Library
  2. *******************************************************************************
  3. * Copyright (c) 2016, STMicroelectronics
  4. * All rights reserved.
  5. *
  6. * Redistribution and use in source and binary forms, with or without
  7. * modification, are permitted provided that the following conditions are met:
  8. *
  9. * 1. Redistributions of source code must retain the above copyright notice,
  10. * this list of conditions and the following disclaimer.
  11. * 2. Redistributions in binary form must reproduce the above copyright notice,
  12. * this list of conditions and the following disclaimer in the documentation
  13. * and/or other materials provided with the distribution.
  14. * 3. Neither the name of STMicroelectronics nor the names of its contributors
  15. * may be used to endorse or promote products derived from this software
  16. * without specific prior written permission.
  17. *
  18. * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
  19. * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  20. * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
  21. * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
  22. * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  23. * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
  24. * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
  25. * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  26. * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
  27. * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  28. *******************************************************************************
  29. */
  30. #ifndef MBED_PINNAMESTYPES_H
  31. #define MBED_PINNAMESTYPES_H
  32. #include "cmsis.h"
  33. #ifdef __cplusplus
  34. extern "C" {
  35. #endif
  36. /* STM PIN data as used in pin_function is coded on 32 bits as below
  37. * [2:0] Function (like in MODER reg) : Input / Output / Alt / Analog
  38. * [3] Output Push-Pull / Open Drain (as in OTYPER reg)
  39. * [5:4] as in PUPDR reg: No Pull, Pull-up, Pull-Donc
  40. * [7:6] Reserved for speed config (as in OSPEEDR), but not used yet
  41. * [11:8] Alternate Num (as in AFRL/AFRG reg)
  42. * [16:12] Channel (Analog/Timer specific)
  43. * [17] Inverted (Analog/Timer specific)
  44. * [18] Analog ADC control - Only valid for specific families
  45. * [32:19] Reserved
  46. */
  47. #define STM_PIN_FUNCTION_MASK 0x07
  48. #define STM_PIN_FUNCTION_SHIFT 0
  49. #define STM_PIN_FUNCTION_BITS (STM_PIN_FUNCTION_MASK << STM_PIN_FUNCTION_SHIFT)
  50. #define STM_PIN_OD_MASK 0x01
  51. #define STM_PIN_OD_SHIFT 3
  52. #define STM_PIN_OD_BITS (STM_PIN_OD_MASK << STM_PIN_OD_SHIFT)
  53. #define STM_PIN_PUPD_MASK 0x03
  54. #define STM_PIN_PUPD_SHIFT 4
  55. #define STM_PIN_PUPD_BITS (STM_PIN_PUPD_MASK << STM_PIN_PUPD_SHIFT)
  56. #define STM_PIN_SPEED_MASK 0x03
  57. #define STM_PIN_SPEED_SHIFT 6
  58. #define STM_PIN_SPEED_BITS (STM_PIN_SPEED_MASK << STM_PIN_SPEED_SHIFT)
  59. #define STM_PIN_AFNUM_MASK 0x0F
  60. #define STM_PIN_AFNUM_SHIFT 8
  61. #define STM_PIN_AFNUM_BITS (STM_PIN_AFNUM_MASK << STM_PIN_AFNUM_SHIFT)
  62. #define STM_PIN_CHAN_MASK 0x1F
  63. #define STM_PIN_CHAN_SHIFT 12
  64. #define STM_PIN_CHANNEL_BIT (STM_PIN_CHAN_MASK << STM_PIN_CHAN_SHIFT)
  65. #define STM_PIN_INV_MASK 0x01
  66. #define STM_PIN_INV_SHIFT 17
  67. #define STM_PIN_INV_BIT (STM_PIN_INV_MASK << STM_PIN_INV_SHIFT)
  68. #define STM_PIN_AN_CTRL_MASK 0x01
  69. #define STM_PIN_AN_CTRL_SHIFT 18
  70. #define STM_PIN_ANALOG_CONTROL_BIT (STM_PIN_AN_CTRL_MASK << STM_PIN_AN_CTRL_SHIFT)
  71. #define STM_PIN_FUNCTION(X) (((X) >> STM_PIN_FUNCTION_SHIFT) & STM_PIN_FUNCTION_MASK)
  72. #define STM_PIN_OD(X) (((X) >> STM_PIN_OD_SHIFT) & STM_PIN_OD_MASK)
  73. #define STM_PIN_PUPD(X) (((X) >> STM_PIN_PUPD_SHIFT) & STM_PIN_PUPD_MASK)
  74. #define STM_PIN_SPEED(X) (((X) >> STM_PIN_SPEED_SHIFT) & STM_PIN_SPEED_MASK)
  75. #define STM_PIN_AFNUM(X) (((X) >> STM_PIN_AFNUM_SHIFT) & STM_PIN_AFNUM_MASK)
  76. #define STM_PIN_CHANNEL(X) (((X) >> STM_PIN_CHAN_SHIFT) & STM_PIN_CHAN_MASK)
  77. #define STM_PIN_INVERTED(X) (((X) >> STM_PIN_INV_SHIFT) & STM_PIN_INV_MASK)
  78. #define STM_PIN_ANALOG_CONTROL(X) (((X) >> STM_PIN_AN_CTRL_SHIFT) & STM_PIN_AN_CTRL_MASK)
  79. #define STM_PIN_DEFINE(FUNC_OD, PUPD, AFNUM) ((int)(FUNC_OD) |\
  80. ((PUPD & STM_PIN_PUPD_MASK) << STM_PIN_PUPD_SHIFT) |\
  81. ((AFNUM & STM_PIN_AFNUM_MASK) << STM_PIN_AFNUM_SHIFT))
  82. #define STM_PIN_DEFINE_EXT(FUNC_OD, PUPD, AFNUM, CHAN, INV) \
  83. ((int)(FUNC_OD) |\
  84. ((PUPD & STM_PIN_PUPD_MASK) << STM_PIN_PUPD_SHIFT) |\
  85. ((AFNUM & STM_PIN_AFNUM_MASK) << STM_PIN_AFNUM_SHIFT) |\
  86. ((CHAN & STM_PIN_CHAN_MASK) << STM_PIN_CHAN_SHIFT) |\
  87. ((INV & STM_PIN_INV_MASK) << STM_PIN_INV_SHIFT))
  88. /*
  89. * MACROS to support the legacy definition of PIN formats
  90. * The STM_MODE_ defines contain the function and the Push-pull/OpenDrain
  91. * configuration (legacy inheritance).
  92. */
  93. #define STM_PIN_DATA(FUNC_OD, PUPD, AFNUM) \
  94. STM_PIN_DEFINE(FUNC_OD, PUPD, AFNUM)
  95. #define STM_PIN_DATA_EXT(FUNC_OD, PUPD, AFNUM, CHANNEL, INVERTED) \
  96. STM_PIN_DEFINE_EXT(FUNC_OD, PUPD, AFNUM, CHANNEL, INVERTED)
  97. typedef enum {
  98. STM_PIN_INPUT = 0,
  99. STM_PIN_OUTPUT = 1,
  100. STM_PIN_ALTERNATE = 2,
  101. STM_PIN_ANALOG = 3,
  102. } StmPinFunction;
  103. #define STM_MODE_INPUT (STM_PIN_INPUT)
  104. #define STM_MODE_OUTPUT_PP (STM_PIN_OUTPUT)
  105. #define STM_MODE_OUTPUT_OD (STM_PIN_OUTPUT | STM_PIN_OD_BITS)
  106. #define STM_MODE_AF_PP (STM_PIN_ALTERNATE)
  107. #define STM_MODE_AF_OD (STM_PIN_ALTERNATE | STM_PIN_OD_BITS)
  108. #define STM_MODE_ANALOG (STM_PIN_ANALOG)
  109. #define STM_MODE_ANALOG_ADC_CONTROL (STM_PIN_ANALOG | STM_PIN_ANALOG_CONTROL_BIT)
  110. // High nibble = port number (0=A, 1=B, 2=C, 3=D, 4=E, 5=F, 6=G, 7=H)
  111. // Low nibble = pin number
  112. #define STM_PORT(X) (((uint32_t)(X) >> 4) & 0xF)
  113. #define STM_PIN(X) ((uint32_t)(X) & 0xF)
  114. /* Defines to be used by application */
  115. typedef enum {
  116. PIN_INPUT = 0,
  117. PIN_OUTPUT
  118. } PinDirection;
  119. typedef enum {
  120. PullNone = 0,
  121. PullUp = 1,
  122. PullDown = 2,
  123. OpenDrainPullUp = 3,
  124. OpenDrainNoPull = 4,
  125. OpenDrainPullDown = 5,
  126. PushPullNoPull = PullNone,
  127. PushPullPullUp = PullUp,
  128. PushPullPullDown = PullDown,
  129. OpenDrain = OpenDrainPullUp,
  130. PullDefault = PullNone
  131. } PinMode;
  132. #ifdef __cplusplus
  133. }
  134. #endif
  135. #endif