mphalport.h 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155
  1. /*
  2. * This file is part of the MicroPython project, http://micropython.org/
  3. *
  4. * The MIT License (MIT)
  5. *
  6. * Copyright (c) 2017-2018 Damien P. George
  7. *
  8. * Permission is hereby granted, free of charge, to any person obtaining a copy
  9. * of this software and associated documentation files (the "Software"), to deal
  10. * in the Software without restriction, including without limitation the rights
  11. * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
  12. * copies of the Software, and to permit persons to whom the Software is
  13. * furnished to do so, subject to the following conditions:
  14. *
  15. * The above copyright notice and this permission notice shall be included in
  16. * all copies or substantial portions of the Software.
  17. *
  18. * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  19. * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  20. * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
  21. * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
  22. * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
  23. * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
  24. * THE SOFTWARE.
  25. */
  26. #include <stdbool.h>
  27. #define mp_hal_delay_us_fast(us) mp_hal_delay_us(us)
  28. #define MP_HAL_PIN_MODE_INPUT (0)
  29. #define MP_HAL_PIN_MODE_OUTPUT (1)
  30. #define MP_HAL_PIN_MODE_ALT (2)
  31. #define MP_HAL_PIN_MODE_ANALOG (3)
  32. #define MP_HAL_PIN_MODE_OPEN_DRAIN (5)
  33. #define MP_HAL_PIN_MODE_ALT_OPEN_DRAIN (6)
  34. #define MP_HAL_PIN_PULL_NONE (GPIO_NOPULL)
  35. #define MP_HAL_PIN_PULL_UP (GPIO_PULLUP)
  36. #define MP_HAL_PIN_PULL_DOWN (GPIO_PULLDOWN)
  37. #define mp_hal_pin_obj_t uint32_t
  38. #define mp_hal_pin_input(p) mp_hal_pin_config((p), MP_HAL_PIN_MODE_INPUT, MP_HAL_PIN_PULL_NONE, 0)
  39. #define mp_hal_pin_output(p) mp_hal_pin_config((p), MP_HAL_PIN_MODE_OUTPUT, MP_HAL_PIN_PULL_NONE, 0)
  40. #define mp_hal_pin_open_drain(p) mp_hal_pin_config((p), MP_HAL_PIN_MODE_OPEN_DRAIN, MP_HAL_PIN_PULL_NONE, 0)
  41. #define mp_hal_pin_low(p) (((GPIO_TypeDef*)((p) & ~0xf))->BSRR = 0x10000 << ((p) & 0xf))
  42. #define mp_hal_pin_high(p) (((GPIO_TypeDef*)((p) & ~0xf))->BSRR = 1 << ((p) & 0xf))
  43. #define mp_hal_pin_od_low(p) mp_hal_pin_low(p)
  44. #define mp_hal_pin_od_high(p) mp_hal_pin_high(p)
  45. #define mp_hal_pin_read(p) ((((GPIO_TypeDef*)((p) & ~0xf))->IDR >> ((p) & 0xf)) & 1)
  46. #define mp_hal_pin_write(p, v) do { if (v) { mp_hal_pin_high(p); } else { mp_hal_pin_low(p); } } while (0)
  47. void mp_hal_pin_config(uint32_t port_pin, uint32_t mode, uint32_t pull, uint32_t alt);
  48. void mp_hal_pin_config_speed(uint32_t port_pin, uint32_t speed);
  49. #define pin_A0 (GPIOA_BASE | 0)
  50. #define pin_A1 (GPIOA_BASE | 1)
  51. #define pin_A2 (GPIOA_BASE | 2)
  52. #define pin_A3 (GPIOA_BASE | 3)
  53. #define pin_A4 (GPIOA_BASE | 4)
  54. #define pin_A5 (GPIOA_BASE | 5)
  55. #define pin_A6 (GPIOA_BASE | 6)
  56. #define pin_A7 (GPIOA_BASE | 7)
  57. #define pin_A8 (GPIOA_BASE | 8)
  58. #define pin_A9 (GPIOA_BASE | 9)
  59. #define pin_A10 (GPIOA_BASE | 10)
  60. #define pin_A11 (GPIOA_BASE | 11)
  61. #define pin_A12 (GPIOA_BASE | 12)
  62. #define pin_A13 (GPIOA_BASE | 13)
  63. #define pin_A14 (GPIOA_BASE | 14)
  64. #define pin_A15 (GPIOA_BASE | 15)
  65. #define pin_B0 (GPIOB_BASE | 0)
  66. #define pin_B1 (GPIOB_BASE | 1)
  67. #define pin_B2 (GPIOB_BASE | 2)
  68. #define pin_B3 (GPIOB_BASE | 3)
  69. #define pin_B4 (GPIOB_BASE | 4)
  70. #define pin_B5 (GPIOB_BASE | 5)
  71. #define pin_B6 (GPIOB_BASE | 6)
  72. #define pin_B7 (GPIOB_BASE | 7)
  73. #define pin_B8 (GPIOB_BASE | 8)
  74. #define pin_B9 (GPIOB_BASE | 9)
  75. #define pin_B10 (GPIOB_BASE | 10)
  76. #define pin_B11 (GPIOB_BASE | 11)
  77. #define pin_B12 (GPIOB_BASE | 12)
  78. #define pin_B13 (GPIOB_BASE | 13)
  79. #define pin_B14 (GPIOB_BASE | 14)
  80. #define pin_B15 (GPIOB_BASE | 15)
  81. #define pin_C0 (GPIOC_BASE | 0)
  82. #define pin_C1 (GPIOC_BASE | 1)
  83. #define pin_C2 (GPIOC_BASE | 2)
  84. #define pin_C3 (GPIOC_BASE | 3)
  85. #define pin_C4 (GPIOC_BASE | 4)
  86. #define pin_C5 (GPIOC_BASE | 5)
  87. #define pin_C6 (GPIOC_BASE | 6)
  88. #define pin_C7 (GPIOC_BASE | 7)
  89. #define pin_C8 (GPIOC_BASE | 8)
  90. #define pin_C9 (GPIOC_BASE | 9)
  91. #define pin_C10 (GPIOC_BASE | 10)
  92. #define pin_C11 (GPIOC_BASE | 11)
  93. #define pin_C12 (GPIOC_BASE | 12)
  94. #define pin_C13 (GPIOC_BASE | 13)
  95. #define pin_C14 (GPIOC_BASE | 14)
  96. #define pin_C15 (GPIOC_BASE | 15)
  97. #define pin_D0 (GPIOD_BASE | 0)
  98. #define pin_D1 (GPIOD_BASE | 1)
  99. #define pin_D2 (GPIOD_BASE | 2)
  100. #define pin_D3 (GPIOD_BASE | 3)
  101. #define pin_D4 (GPIOD_BASE | 4)
  102. #define pin_D5 (GPIOD_BASE | 5)
  103. #define pin_D6 (GPIOD_BASE | 6)
  104. #define pin_D7 (GPIOD_BASE | 7)
  105. #define pin_D8 (GPIOD_BASE | 8)
  106. #define pin_D9 (GPIOD_BASE | 9)
  107. #define pin_D10 (GPIOD_BASE | 10)
  108. #define pin_D11 (GPIOD_BASE | 11)
  109. #define pin_D12 (GPIOD_BASE | 12)
  110. #define pin_D13 (GPIOD_BASE | 13)
  111. #define pin_D14 (GPIOD_BASE | 14)
  112. #define pin_D15 (GPIOD_BASE | 15)
  113. #define pin_E0 (GPIOE_BASE | 0)
  114. #define pin_E1 (GPIOE_BASE | 1)
  115. #define pin_E2 (GPIOE_BASE | 2)
  116. #define pin_E3 (GPIOE_BASE | 3)
  117. #define pin_E4 (GPIOE_BASE | 4)
  118. #define pin_E5 (GPIOE_BASE | 5)
  119. #define pin_E6 (GPIOE_BASE | 6)
  120. #define pin_E7 (GPIOE_BASE | 7)
  121. #define pin_E8 (GPIOE_BASE | 8)
  122. #define pin_E9 (GPIOE_BASE | 9)
  123. #define pin_E10 (GPIOE_BASE | 10)
  124. #define pin_E11 (GPIOE_BASE | 11)
  125. #define pin_E12 (GPIOE_BASE | 12)
  126. #define pin_E13 (GPIOE_BASE | 13)
  127. #define pin_E14 (GPIOE_BASE | 14)
  128. #define pin_E15 (GPIOE_BASE | 15)
  129. #define pin_F0 (GPIOF_BASE | 0)
  130. #define pin_F1 (GPIOF_BASE | 1)
  131. #define pin_F2 (GPIOF_BASE | 2)
  132. #define pin_F3 (GPIOF_BASE | 3)
  133. #define pin_F4 (GPIOF_BASE | 4)
  134. #define pin_F5 (GPIOF_BASE | 5)
  135. #define pin_F6 (GPIOF_BASE | 6)
  136. #define pin_F7 (GPIOF_BASE | 7)
  137. #define pin_F8 (GPIOF_BASE | 8)
  138. #define pin_F9 (GPIOF_BASE | 9)
  139. #define pin_F10 (GPIOF_BASE | 10)
  140. #define pin_F11 (GPIOF_BASE | 11)
  141. #define pin_F12 (GPIOF_BASE | 12)
  142. #define pin_F13 (GPIOF_BASE | 13)
  143. #define pin_F14 (GPIOF_BASE | 14)
  144. #define pin_F15 (GPIOF_BASE | 15)