teensy_hal.h 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128
  1. #include <mk20dx128.h>
  2. #include "hal_ftm.h"
  3. #ifdef USE_FULL_ASSERT
  4. #define assert_param(expr) ((expr) ? (void)0 : assert_failed((uint8_t *)__FILE__, __LINE__))
  5. void assert_failed(uint8_t* file, uint32_t line);
  6. #else
  7. #define assert_param(expr) ((void)0)
  8. #endif /* USE_FULL_ASSERT */
  9. #define HAL_NVIC_EnableIRQ(irq) NVIC_ENABLE_IRQ(irq)
  10. #define GPIOA ((GPIO_TypeDef *)&GPIOA_PDOR)
  11. #define GPIOB ((GPIO_TypeDef *)&GPIOB_PDOR)
  12. #define GPIOC ((GPIO_TypeDef *)&GPIOC_PDOR)
  13. #define GPIOD ((GPIO_TypeDef *)&GPIOD_PDOR)
  14. #define GPIOE ((GPIO_TypeDef *)&GPIOE_PDOR)
  15. #define GPIOZ ((GPIO_TypeDef *)NULL)
  16. #define I2C0 ((I2C_TypeDef *)0x40066000)
  17. #define I2C1 ((I2C_TypeDef *)0x40067000)
  18. #undef SPI0
  19. #define SPI0 ((SPI_TypeDef *)0x4002C000)
  20. #define SPI1 ((SPI_TypeDef *)0x4002D000)
  21. #define UART0 ((UART_TypeDef *)&UART0_BDH)
  22. #define UART1 ((UART_TypeDef *)&UART1_BDH)
  23. #define UART2 ((UART_TypeDef *)&UART2_BDH)
  24. typedef struct {
  25. uint32_t dummy;
  26. } I2C_TypeDef;
  27. typedef struct {
  28. uint32_t dummy;
  29. } UART_TypeDef;
  30. typedef struct {
  31. uint32_t dummy;
  32. } SPI_TypeDef;
  33. typedef struct {
  34. volatile uint32_t PDOR; // Output register
  35. volatile uint32_t PSOR; // Set output register
  36. volatile uint32_t PCOR; // Clear output register
  37. volatile uint32_t PTOR; // Toggle output register
  38. volatile uint32_t PDIR; // Data Input register
  39. volatile uint32_t PDDR; // Data Direction register
  40. } GPIO_TypeDef;
  41. #define GPIO_OUTPUT_TYPE ((uint32_t)0x00000010) // Indicates OD
  42. #define GPIO_MODE_INPUT ((uint32_t)0x00000000)
  43. #define GPIO_MODE_OUTPUT_PP ((uint32_t)0x00000001)
  44. #define GPIO_MODE_OUTPUT_OD ((uint32_t)0x00000011)
  45. #define GPIO_MODE_AF_PP ((uint32_t)0x00000002)
  46. #define GPIO_MODE_AF_OD ((uint32_t)0x00000012)
  47. #define GPIO_MODE_ANALOG ((uint32_t)0x00000003)
  48. #define GPIO_MODE_IT_RISING ((uint32_t)1)
  49. #define GPIO_MODE_IT_FALLING ((uint32_t)2)
  50. #define IS_GPIO_MODE(MODE) (((MODE) == GPIO_MODE_INPUT) ||\
  51. ((MODE) == GPIO_MODE_OUTPUT_PP) ||\
  52. ((MODE) == GPIO_MODE_OUTPUT_OD) ||\
  53. ((MODE) == GPIO_MODE_AF_PP) ||\
  54. ((MODE) == GPIO_MODE_AF_OD) ||\
  55. ((MODE) == GPIO_MODE_ANALOG))
  56. #define GPIO_NOPULL ((uint32_t)0)
  57. #define GPIO_PULLUP ((uint32_t)1)
  58. #define GPIO_PULLDOWN ((uint32_t)2)
  59. #define IS_GPIO_PULL(PULL) (((PULL) == GPIO_NOPULL) || ((PULL) == GPIO_PULLUP) || \
  60. ((PULL) == GPIO_PULLDOWN))
  61. #define GPIO_SPEED_FREQ_LOW ((uint32_t)0)
  62. #define GPIO_SPEED_FREQ_MEDIUM ((uint32_t)1)
  63. #define GPIO_SPEED_FREQ_HIGH ((uint32_t)2)
  64. #define GPIO_SPEED_FREQ_VERY_HIGH ((uint32_t)3)
  65. #define IS_GPIO_AF(af) ((af) >= 0 && (af) <= 7)
  66. typedef struct {
  67. uint32_t Pin;
  68. uint32_t Mode;
  69. uint32_t Pull;
  70. uint32_t Speed;
  71. uint32_t Alternate;
  72. } GPIO_InitTypeDef;
  73. #define GPIO_PORT_TO_PORT_NUM(GPIOx) \
  74. ((&GPIOx->PDOR - &GPIOA_PDOR) / (&GPIOB_PDOR - &GPIOA_PDOR))
  75. #define GPIO_PIN_TO_PORT_PCR(GPIOx, pin) \
  76. (&PORTA_PCR0 + (GPIO_PORT_TO_PORT_NUM(GPIOx) * 0x400) + (pin))
  77. #define GPIO_AF2_I2C0 2
  78. #define GPIO_AF2_I2C1 2
  79. #define GPIO_AF2_SPI0 2
  80. #define GPIO_AF3_FTM0 3
  81. #define GPIO_AF3_FTM1 3
  82. #define GPIO_AF3_FTM2 3
  83. #define GPIO_AF3_UART0 3
  84. #define GPIO_AF3_UART1 3
  85. #define GPIO_AF3_UART2 3
  86. #define GPIO_AF4_FTM0 4
  87. #define GPIO_AF6_FTM1 6
  88. #define GPIO_AF6_FTM2 6
  89. #define GPIO_AF6_I2C1 6
  90. #define GPIO_AF7_FTM1 7
  91. __attribute__(( always_inline )) static inline void __WFI(void) {
  92. __asm volatile ("wfi");
  93. }
  94. void mp_hal_set_interrupt_char(int c);
  95. void mp_hal_gpio_clock_enable(GPIO_TypeDef *gpio);
  96. void HAL_GPIO_Init(GPIO_TypeDef *GPIOx, GPIO_InitTypeDef *init);
  97. struct _pin_obj_t;
  98. #define mp_hal_pin_obj_t const struct _pin_obj_t*
  99. #define mp_hal_pin_high(p) (((p)->gpio->PSOR) = (p)->pin_mask)
  100. #define mp_hal_pin_low(p) (((p)->gpio->PCOR) = (p)->pin_mask)
  101. #define mp_hal_pin_read(p) (((p)->gpio->PDIR >> (p)->pin) & 1)
  102. #define mp_hal_pin_write(p, v) do { if (v) { mp_hal_pin_high(p); } else { mp_hal_pin_low(p); } } while (0)