hal_ftm.h 8.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186
  1. /*
  2. * This file is part of the MicroPython project, http://micropython.org/
  3. *
  4. * The MIT License (MIT)
  5. *
  6. * Copyright (c) 2013, 2014 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. #ifndef MICROPY_INCLUDED_TEENSY_HAL_FTM_H
  27. #define MICROPY_INCLUDED_TEENSY_HAL_FTM_H
  28. #define FTM0 ((FTM_TypeDef *)&FTM0_SC)
  29. #define FTM1 ((FTM_TypeDef *)&FTM1_SC)
  30. #define FTM2 ((FTM_TypeDef *)&FTM2_SC)
  31. typedef struct {
  32. volatile uint32_t CSC; // Channel x Status And Control
  33. volatile uint32_t CV; // Channel x Value
  34. } FTM_ChannelTypeDef;
  35. typedef struct {
  36. volatile uint32_t SC; // Status And Control
  37. volatile uint32_t CNT; // Counter
  38. volatile uint32_t MOD; // Modulo
  39. FTM_ChannelTypeDef channel[8];
  40. volatile uint32_t CNTIN; // Counter Initial Value
  41. volatile uint32_t STATUS; // Capture And Compare Status
  42. volatile uint32_t MODE; // Features Mode Selection
  43. volatile uint32_t SYNC; // Synchronization
  44. volatile uint32_t OUTINIT; // Initial State For Channels Output
  45. volatile uint32_t OUTMASK; // Output Mask
  46. volatile uint32_t COMBINE; // Function For Linked Channels
  47. volatile uint32_t DEADTIME; // Deadtime Insertion Control
  48. volatile uint32_t EXTTRIG; // FTM External Trigger
  49. volatile uint32_t POL; // Channels Polarity
  50. volatile uint32_t FMS; // Fault Mode Status
  51. volatile uint32_t FILTER; // Input Capture Filter Control
  52. volatile uint32_t FLTCTRL; // Fault Control
  53. volatile uint32_t QDCTRL; // Quadrature Decoder Control And Status
  54. volatile uint32_t CONF; // Configuration
  55. volatile uint32_t FLTPOL; // FTM Fault Input Polarity
  56. volatile uint32_t SYNCONF; // Synchronization Configuration
  57. volatile uint32_t INVCTRL; // FTM Inverting Control
  58. volatile uint32_t SWOCTRL; // FTM Software Output Control
  59. volatile uint32_t PWMLOAD; // FTM PWM Load
  60. } FTM_TypeDef;
  61. typedef struct {
  62. uint32_t PrescalerShift; // Sets the prescaler to 1 << PrescalerShift
  63. uint32_t CounterMode; // One of FTM_COUNTERMODE_xxx
  64. uint32_t Period; // Specifies the Period for determining timer overflow
  65. } FTM_Base_InitTypeDef;
  66. typedef struct {
  67. uint32_t OCMode; // One of FTM_OCMODE_xxx
  68. uint32_t Pulse; // Specifies initial pulse width (0-0xffff)
  69. uint32_t OCPolarity; // One of FTM_OCPOLRITY_xxx
  70. } FTM_OC_InitTypeDef;
  71. typedef struct {
  72. uint32_t ICPolarity; // Specifies Rising/Falling/Both
  73. } FTM_IC_InitTypeDef;
  74. #define IS_FTM_INSTANCE(INSTANCE) (((INSTANCE) == FTM0) || \
  75. ((INSTANCE) == FTM1) || \
  76. ((INSTANCE) == FTM2))
  77. #define IS_FTM_PRESCALERSHIFT(PRESCALERSHIFT) (((PRESCALERSHIFT) & ~7) == 0)
  78. #define FTM_COUNTERMODE_UP (0)
  79. #define FTM_COUNTERMODE_CENTER (FTM_SC_CPWMS)
  80. #define IS_FTM_COUNTERMODE(MODE) (((MODE) == FTM_COUNTERMODE_UP) ||\
  81. ((MODE) == FTM_COUNTERMODE_CENTER))
  82. #define IS_FTM_PERIOD(PERIOD) (((PERIOD) & 0xFFFF0000) == 0)
  83. #define FTM_CSC_CHF 0x80
  84. #define FTM_CSC_CHIE 0x40
  85. #define FTM_CSC_MSB 0x20
  86. #define FTM_CSC_MSA 0x10
  87. #define FTM_CSC_ELSB 0x08
  88. #define FTM_CSC_ELSA 0x04
  89. #define FTM_CSC_DMA 0x01
  90. #define FTM_OCMODE_TIMING (0)
  91. #define FTM_OCMODE_ACTIVE (FTM_CSC_MSA | FTM_CSC_ELSB | FTM_CSC_ELSA)
  92. #define FTM_OCMODE_INACTIVE (FTM_CSC_MSA | FTM_CSC_ELSB)
  93. #define FTM_OCMODE_TOGGLE (FTM_CSC_MSA | FTM_CSC_ELSA)
  94. #define FTM_OCMODE_PWM1 (FTM_CSC_MSB | FTM_CSC_ELSB)
  95. #define FTM_OCMODE_PWM2 (FTM_CSC_MSB | FTM_CSC_ELSA)
  96. #define IS_FTM_OC_MODE(mode) ((mode) == FTM_OCMODE_TIMING || \
  97. (mode) == FTM_OCMODE_ACTIVE || \
  98. (mode) == FTM_OCMODE_INACTIVE || \
  99. (mode) == FTM_OCMODE_TOGGLE )
  100. #define IS_FTM_PWM_MODE(mode) ((mode) == FTM_OCMODE_PWM1 || \
  101. (mode) == FTM_OCMODE_PWM2)
  102. #define IS_FTM_CHANNEL(channel) (((channel) & ~7) == 0)
  103. #define IS_FTM_PULSE(pulse) (((pulse) & ~0xffff) == 0)
  104. #define FTM_OCPOLARITY_HIGH (0)
  105. #define FTM_OCPOLARITY_LOW (1)
  106. #define IS_FTM_OC_POLARITY(polarity) ((polarity) == FTM_OCPOLARITY_HIGH || \
  107. (polarity) == FTM_OCPOLARITY_LOW)
  108. #define FTM_ICPOLARITY_RISING (FTM_CSC_ELSA)
  109. #define FTM_ICPOLARITY_FALLING (FTM_CSC_ELSB)
  110. #define FTM_ICPOLARITY_BOTH (FTM_CSC_ELSA | FTM_CSC_ELSB)
  111. #define IS_FTM_IC_POLARITY(polarity) ((polarity) == FTM_ICPOLARITY_RISING || \
  112. (polarity) == FTM_ICPOLARITY_FALLING || \
  113. (polarity) == FTM_ICPOLARITY_BOTH)
  114. typedef enum {
  115. HAL_FTM_STATE_RESET = 0x00,
  116. HAL_FTM_STATE_READY = 0x01,
  117. HAL_FTM_STATE_BUSY = 0x02,
  118. } HAL_FTM_State;
  119. typedef struct {
  120. FTM_TypeDef *Instance;
  121. FTM_Base_InitTypeDef Init;
  122. HAL_FTM_State State;
  123. } FTM_HandleTypeDef;
  124. #define __HAL_FTM_GET_TOF_FLAG(HANDLE) (((HANDLE)->Instance->SC & FTM_SC_TOF) != 0)
  125. #define __HAL_FTM_CLEAR_TOF_FLAG(HANDLE) ((HANDLE)->Instance->SC &= ~FTM_SC_TOF)
  126. #define __HAL_FTM_GET_TOF_IT(HANDLE) (((HANDLE)->Instance->SC & FTM_SC_TOIE) != 0)
  127. #define __HAL_FTM_ENABLE_TOF_IT(HANDLE) ((HANDLE)->Instance->SC |= FTM_SC_TOIE)
  128. #define __HAL_FTM_DISABLE_TOF_IT(HANDLE) ((HANDLE)->Instance->SC &= ~FTM_SC_TOIE)
  129. #define __HAL_FTM_GET_CH_FLAG(HANDLE, CH) (((HANDLE)->Instance->channel[CH].CSC & FTM_CSC_CHF) != 0)
  130. #define __HAL_FTM_CLEAR_CH_FLAG(HANDLE, CH) ((HANDLE)->Instance->channel[CH].CSC &= ~FTM_CSC_CHF)
  131. #define __HAL_FTM_GET_CH_IT(HANDLE, CH) (((HANDLE)->Instance->channel[CH].CSC & FTM_CSC_CHIE) != 0)
  132. #define __HAL_FTM_ENABLE_CH_IT(HANDLE, CH) ((HANDLE)->Instance->channel[CH].CSC |= FTM_CSC_CHIE)
  133. #define __HAL_FTM_DISABLE_CH_IT(HANDLE, CH) ((HANDLE)->Instance->channel[CH].CSC &= ~FTM_CSC_CHIE)
  134. void HAL_FTM_Base_Init(FTM_HandleTypeDef *hftm);
  135. void HAL_FTM_Base_Start(FTM_HandleTypeDef *hftm);
  136. void HAL_FTM_Base_Start_IT(FTM_HandleTypeDef *hftm);
  137. void HAL_FTM_Base_DeInit(FTM_HandleTypeDef *hftm);
  138. void HAL_FTM_OC_Init(FTM_HandleTypeDef *hftm);
  139. void HAL_FTM_OC_ConfigChannel(FTM_HandleTypeDef *hftm, FTM_OC_InitTypeDef* sConfig, uint32_t channel);
  140. void HAL_FTM_OC_Start(FTM_HandleTypeDef *hftm, uint32_t channel);
  141. void HAL_FTM_OC_Start_IT(FTM_HandleTypeDef *hftm, uint32_t channel);
  142. void HAL_FTM_OC_DeInit(FTM_HandleTypeDef *hftm);
  143. void HAL_FTM_PWM_Init(FTM_HandleTypeDef *hftm);
  144. void HAL_FTM_PWM_ConfigChannel(FTM_HandleTypeDef *hftm, FTM_OC_InitTypeDef* sConfig, uint32_t channel);
  145. void HAL_FTM_PWM_Start(FTM_HandleTypeDef *hftm, uint32_t channel);
  146. void HAL_FTM_PWM_Start_IT(FTM_HandleTypeDef *hftm, uint32_t channel);
  147. void HAL_FTM_PWM_DeInit(FTM_HandleTypeDef *hftm);
  148. void HAL_FTM_IC_Init(FTM_HandleTypeDef *hftm);
  149. void HAL_FTM_IC_ConfigChannel(FTM_HandleTypeDef *hftm, FTM_IC_InitTypeDef* sConfig, uint32_t channel);
  150. void HAL_FTM_IC_Start(FTM_HandleTypeDef *hftm, uint32_t channel);
  151. void HAL_FTM_IC_Start_IT(FTM_HandleTypeDef *hftm, uint32_t channel);
  152. void HAL_FTM_IC_DeInit(FTM_HandleTypeDef *hftm);
  153. #endif // MICROPY_INCLUDED_TEENSY_HAL_FTM_H