pit.c 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213
  1. /******************************************************************************
  2. * @brief Periodic Interrupt ETMer (PIT) source code.
  3. *
  4. ******************************************************************************/
  5. #include "common.h"
  6. #include "pit.h"
  7. /******************************************************************************
  8. * Global variables
  9. ******************************************************************************/
  10. /******************************************************************************
  11. * Constants and macros
  12. ******************************************************************************/
  13. /******************************************************************************
  14. * Local types
  15. ******************************************************************************/
  16. /******************************************************************************
  17. * Local function prototypes
  18. ******************************************************************************/
  19. /******************************************************************************
  20. * Local variables
  21. ******************************************************************************/
  22. /*!
  23. * @brief global variable to store PIT callbacks.
  24. *
  25. */
  26. PIT_CallbackType PIT_Callback[2] = {(PIT_CallbackType)NULL}; /*!< PIT initial callback */
  27. /******************************************************************************
  28. * Local functions
  29. ******************************************************************************/
  30. void PIT_Ch0Isr(void);
  31. void PIT_Ch1Isr(void);
  32. /******************************************************************************
  33. * Global functions
  34. ******************************************************************************/
  35. /******************************************************************************
  36. * define PIT APIs
  37. *
  38. *//*! @addtogroup pit_api_list
  39. * @{
  40. *******************************************************************************/
  41. /*****************************************************************************//*!
  42. *
  43. * @brief initialize pit module.
  44. *
  45. * @param[in] u8Channel_No channel number
  46. * @param[in] pConfig point to configuration
  47. *
  48. * @return none
  49. *
  50. * @ Pass/ Fail criteria: none
  51. *****************************************************************************/
  52. void PIT_Init(uint8_t u8Channel_No, PIT_ConfigType *pConfig)
  53. {
  54. SIM->SCGC |= SIM_SCGC_PIT_MASK; /*!< enable clock to PIT */
  55. if (pConfig->bFreeze)
  56. {
  57. PIT_SetDebugFreeze();
  58. }
  59. if (pConfig->bModuleDis == 0)
  60. {
  61. PIT_Enable(); /*!< enable pit module */
  62. }
  63. PIT_SetLoadVal(u8Channel_No, pConfig->u32LoadValue);
  64. if (pConfig->bInterruptEn)
  65. {
  66. if (u8Channel_No)
  67. {
  68. NVIC_EnableIRQ(PIT_CH1_IRQn);
  69. }
  70. else
  71. {
  72. NVIC_EnableIRQ(PIT_CH0_IRQn);
  73. }
  74. PIT_ChannelEnableInt(u8Channel_No);
  75. }
  76. else
  77. {
  78. NVIC_DisableIRQ(PIT_CH0_IRQn);
  79. }
  80. if (pConfig->bChainMode)
  81. {
  82. PIT_ChannelEnableChain(u8Channel_No);
  83. }
  84. if (pConfig->bETMerEn)
  85. {
  86. PIT_ChannelEnable(u8Channel_No);
  87. }
  88. }
  89. /*****************************************************************************//*!
  90. *
  91. * @brief initialize pit module.
  92. *
  93. * @param[in] u8Channel_No channel number
  94. * @param[in] u32loadvalue load value for pit register
  95. *
  96. * @return none
  97. *
  98. * @ Pass/ Fail criteria: none
  99. *****************************************************************************/
  100. void PIT_SetLoadVal(uint8_t u8Channel, uint32_t u32loadvalue)
  101. {
  102. PIT->CHANNEL[u8Channel].LDVAL = u32loadvalue;
  103. }
  104. /*****************************************************************************//*!
  105. *
  106. * @brief pit module set call back.
  107. *
  108. * @param[in] u8Channel_No channel number.
  109. * @param[in] pfnCallback point to call back.
  110. *
  111. * @return none
  112. *
  113. * @ Pass/ Fail criteria: none
  114. *****************************************************************************/
  115. void PIT_SetCallback(uint8_t u8Channel_No, PIT_CallbackType pfnCallback)
  116. {
  117. PIT_Callback[u8Channel_No] = pfnCallback;
  118. }
  119. /*****************************************************************************//*!
  120. *
  121. * @brief pit module de-initialize, reset pit register
  122. *
  123. * @param none
  124. *
  125. * @return none
  126. *
  127. * @ Pass/ Fail criteria: none
  128. *****************************************************************************/
  129. void PIT_DeInit(void)
  130. {
  131. NVIC_DisableIRQ(PIT_CH0_IRQn);
  132. NVIC_DisableIRQ(PIT_CH1_IRQn);
  133. PIT_SetLoadVal(0,0);
  134. PIT_SetLoadVal(1,0);
  135. PIT_ChannelDisable(0);
  136. PIT_ChannelDisable(1);
  137. PIT_ChannelDisableInt(0);
  138. PIT_ChannelDisableInt(1);
  139. PIT_ChannelDisableChain(0);
  140. PIT_ChannelDisableChain(1);
  141. PIT_ChannelClrFlags(0);
  142. PIT_ChannelClrFlags(1);
  143. PIT_SetDebugOn();
  144. PIT_Disable();
  145. SIM->SCGC &= ~SIM_SCGC_PIT_MASK;
  146. }
  147. /*! @} End of pit_api_list */
  148. /*****************************************************************************//*!
  149. *
  150. * @brief pit module channel 0 isr.
  151. *
  152. * @param none
  153. *
  154. * @return none
  155. *
  156. * @ Pass/ Fail criteria: none
  157. *****************************************************************************/
  158. void PIT_Ch0Isr(void)
  159. {
  160. PIT_ChannelClrFlags(0);
  161. if (PIT_Callback[0])
  162. {
  163. PIT_Callback[0]();
  164. }
  165. }
  166. /*****************************************************************************//*!
  167. *
  168. * @brief pit module channel 1 isr.
  169. *
  170. * @param none
  171. *
  172. * @return none
  173. *
  174. * @ Pass/ Fail criteria: none
  175. *****************************************************************************/
  176. void PIT_Ch1Isr(void)
  177. {
  178. PIT_ChannelClrFlags(1);
  179. if (PIT_Callback[1])
  180. {
  181. PIT_Callback[1]();
  182. }
  183. }