ehrpwm.h 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266
  1. /** ============================================================================
  2. * \file ehrpwm.h
  3. *
  4. * \brief This file contains the Macros and API prototypes for ehrpwm driver
  5. *
  6. * ============================================================================
  7. */
  8. /*
  9. * Copyright (C) 2010 Texas Instruments Incorporated - http://www.ti.com/
  10. */
  11. /*
  12. * Redistribution and use in source and binary forms, with or without
  13. * modification, are permitted provided that the following conditions
  14. * are met:
  15. *
  16. * Redistributions of source code must retain the above copyright
  17. * notice, this list of conditions and the following disclaimer.
  18. *
  19. * Redistributions in binary form must reproduce the above copyright
  20. * notice, this list of conditions and the following disclaimer in the
  21. * documentation and/or other materials provided with the
  22. * distribution.
  23. *
  24. * Neither the name of Texas Instruments Incorporated nor the names of
  25. * its contributors may be used to endorse or promote products derived
  26. * from this software without specific prior written permission.
  27. *
  28. * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
  29. * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
  30. * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
  31. * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
  32. * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  33. * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  34. * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
  35. * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
  36. * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
  37. * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
  38. * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  39. *
  40. */
  41. #ifndef _EHRPWM_H_
  42. #define _EHRPWM_H_
  43. #include "hw_ehrpwm.h"
  44. #ifdef __cplusplus
  45. extern "C" {
  46. #endif
  47. /* TB Period load */
  48. #define EHRPWM_PRD_LOAD_SHADOW_MASK EHRPWM_TBCTL_PRDLD
  49. /* Counter mode */
  50. #define EHRPWM_COUNTER_MODE_MASK EHRPWM_TBCTL_CTRMODE
  51. #define EHRPWM_COUNT_UP (EHRPWM_TBCTL_CTRMODE_UP << \
  52. EHRPWM_TBCTL_CTRMODE_SHIFT)
  53. #define EHRPWM_COUNT_DOWN (EHRPWM_TBCTL_CTRMODE_DOWN << \
  54. EHRPWM_TBCTL_CTRMODE_SHIFT)
  55. #define EHRPWM_COUNT_UP_DOWN (EHRPWM_TBCTL_CTRMODE_UPDOWN << \
  56. EHRPWM_TBCTL_CTRMODE_SHIFT)
  57. #define EHRPWM_COUNT_STOP (EHRPWM_TBCTL_CTRMODE_STOPFREEZE << \
  58. EHRPWM_TBCTL_CTRMODE_SHIFT)
  59. /* Synchronization */
  60. #define EHRPWM_SYNC_ENABLE EHRPWM_TBCTL_PHSEN
  61. //#define EHRPWM_SW_FORCED_SYNC 0x1
  62. #define EHRPWM_SYNCOUT_MASK EHRPWM_TBCTL_SYNCOSEL
  63. #define EHRPWM_SYNCOUT_SYNCIN (EHRPWM_TBCTL_SYNCOSEL_EPWMXSYNCI << \
  64. EHRPWM_TBCTL_SYNCOSEL_SHIFT)
  65. #define EHRPWM_SYNCOUT_COUNTER_EQUAL_ZERO (EHRPWM_TBCTL_SYNCOSEL_TBCTRZERO << \
  66. EHRPWM_TBCTL_SYNCOSEL_SHIFT)
  67. #define EHRPWM_SYNCOUT_COUNTER_EQUAL_COMPAREB (EHRPWM_TBCTL_SYNCOSEL_TBCTRCMPB << \
  68. EHRPWM_TBCTL_SYNCOSEL_SHIFT)
  69. #define EHRPWM_SYNCOUT_DISABLE (EHRPWM_TBCTL_SYNCOSEL_DISABLE << \
  70. EHRPWM_TBCTL_SYNCOSEL_SHIFT)
  71. /* Shadow */
  72. #define EHRPWM_SHADOW_WRITE_ENABLE 0x0
  73. #define EHRPWM_SHADOW_WRITE_DISABLE 0x1
  74. /* Emulation mode */
  75. #define EHRPWM_STOP_AFTER_NEXT_TB_INCREMENT (0x0 << EHRPWM_TBCTL_FREE_SOFT_SHIFT)
  76. #define EHRPWM_STOP_AFTER_A_COMPLETE_CYCLE (0x1 << EHRPWM_TBCTL_FREE_SOFT_SHIFT)
  77. #define EHRPWM_FREE_RUN (0x2 << EHRPWM_TBCTL_FREE_SOFT_SHIFT)
  78. /* Time base clock */
  79. #define EHRPWM_TBCTL_CLKDIV_1 (0x0001u)
  80. #define EHRPWM_TBCTL_CLKDIV_2 (0x0002u)
  81. #define EHRPWM_TBCTL_CLKDIV_4 (0x0004u)
  82. #define EHRPWM_TBCTL_CLKDIV_8 (0x0008u)
  83. #define EHRPWM_TBCTL_CLKDIV_16 (0x0010u)
  84. #define EHRPWM_TBCTL_CLKDIV_32 (0x0020u)
  85. #define EHRPWM_TBCTL_CLKDIV_64 (0x0040u)
  86. #define EHRPWM_TBCTL_CLKDIV_128 (0x0080u)
  87. #define EHRPWM_TBCTL_HSPCLKDIV_1 (0x0001u)
  88. #define EHRPWM_TBCTL_HSPCLKDIV_2 (0x0002u)
  89. #define EHRPWM_TBCTL_HSPCLKDIV_4 (0x0004u)
  90. #define EHRPWM_TBCTL_HSPCLKDIV_6 (0x0006u)
  91. #define EHRPWM_TBCTL_HSPCLKDIV_8 (0x0008u)
  92. #define EHRPWM_TBCTL_HSPCLKDIV_10 (0x000Au)
  93. #define EHRPWM_TBCTL_HSPCLKDIV_12 (0x000Cu)
  94. #define EHRPWM_TBCTL_HSPCLKDIV_14 (0x000Eu)
  95. /* Count direction after sync */
  96. #define EHRPWM_COUNT_DOWN_AFTER_SYNC 0x0
  97. #define EHRPWM_COUNT_UP_AFTER_SYNC 0x1
  98. /* Counter Compare */
  99. #define EHRPWM_SHADOW_A_EMPTY (0x0 << EHRPWM_CMPCTL_SHDWAFULL_SHIFT)
  100. #define EHRPWM_SHADOW_A_FULL (EHRPWM_CMPCTL_SHDWAFULL)
  101. #define EHRPWM_SHADOW_B_EMPTY (0x0 << EHRPWM_CMPCTL_SHDWBFULL_SHIFT)
  102. #define EHRPWM_SHADOW_B_FULL (EHRPWM_CMPCTL_SHDWBFULL)
  103. #define EHRPWM_CMPCTL_NOT_OVERWR_SH_FL 0x0
  104. #define EHRPWM_CMPCTL_OVERWR_SH_FL 0x1
  105. /* Compare register load */
  106. #define EHRPWM_COMPB_LOAD_MASK EHRPWM_CMPCTL_LOADBMODE
  107. #define EHRPWM_COMPB_LOAD_COUNT_EQUAL_ZERO (EHRPWM_CMPCTL_LOADBMODE_TBCTRZERO << \
  108. EHRPWM_CMPCTL_LOADBMODE_SHIFT)
  109. #define EHRPWM_COMPB_LOAD_COUNT_EQUAL_PERIOD (EHRPWM_CMPCTL_LOADBMODE_TBCTRPRD << \
  110. EHRPWM_CMPCTL_LOADBMODE_SHIFT)
  111. #define EHRPWM_COMPB_LOAD_COUNT_EQUAL_ZERO_OR_PERIOD \
  112. (EHRPWM_CMPCTL_LOADBMODE_ZEROORPRD << \
  113. EHRPWM_CMPCTL_LOADBMODE_SHIFT)
  114. #define EHRPWM_COMPB_NO_LOAD (EHRPWM_CMPCTL_LOADBMODE_FREEZE << \
  115. EHRPWM_CMPCTL_LOADBMODE_SHIFT)
  116. #define EHRPWM_COMPA_LOAD_MASK EHRPWM_CMPCTL_LOADAMODE
  117. #define EHRPWM_COMPA_LOAD_COUNT_EQUAL_ZERO (EHRPWM_CMPCTL_LOADAMODE_TBCTRZERO << \
  118. EHRPWM_CMPCTL_LOADAMODE_SHIFT)
  119. #define EHRPWM_COMPA_LOAD_COUNT_EQUAL_PERIOD (EHRPWM_CMPCTL_LOADAMODE_TBCTRPRD << \
  120. EHRPWM_CMPCTL_LOADAMODE_SHIFT)
  121. #define EHRPWM_COMPA_LOAD_COUNT_EQUAL_ZERO_OR_PERIOD \
  122. (EHRPWM_CMPCTL_LOADAMODE_ZEROORPRD << \
  123. EHRPWM_CMPCTL_LOADAMODE_SHIFT)
  124. #define EHRPWM_COMPA_NO_LOAD (EHRPWM_CMPCTL_LOADAMODE_FREEZE << \
  125. EHRPWM_CMPCTL_LOADAMODE_SHIFT)
  126. /* Chopper */
  127. #define EHRPWM_CHP_DUTY_12_5_PER EHRPWM_PCCTL_CHPDUTY_1DIV8
  128. #define EHRPWM_CHP_DUTY_25_PER EHRPWM_PCCTL_CHPDUTY_2DIV8
  129. #define EHRPWM_CHP_DUTY_37_5_PER EHRPWM_PCCTL_CHPDUTY_3DIV8
  130. #define EHRPWM_CHP_DUTY_50_PER EHRPWM_PCCTL_CHPDUTY_4DIV8
  131. #define EHRPWM_CHP_DUTY_62_5_PER EHRPWM_PCCTL_CHPDUTY_5DIV8
  132. #define EHRPWM_CHP_DUTY_75_PER EHRPWM_PCCTL_CHPDUTY_6DIV8
  133. #define EHRPWM_CHP_DUTY_87_5_PER EHRPWM_PCCTL_CHPDUTY_7DIV8
  134. /* TZ */
  135. #define EHRPWM_TZ_ONESHOT 0x0
  136. #define EHRPWM_TZ_CYCLEBYCYCLE 0x1
  137. #define EHRPWM_TZ_ONESHOT_CLEAR (EHRPWM_TZCLR_OST | EHRPWM_TZCLR_INT)
  138. #define EHRPWM_TZ_CYCLEBYCYCLE_CLEAR (EHRPWM_TZCLR_CBC | EHRPWM_TZCLR_INT)
  139. #define ECAP 0x01
  140. #define EPWM 0x02
  141. #define EQEP 0x03
  142. typedef char bool;
  143. //**********************************************************************
  144. // API FUNCTION PROTOTYPES
  145. //**********************************************************************/
  146. /* Timebase sub-module */
  147. void EHRPWMTimebaseClkConfig(unsigned int baseAddr, unsigned int tbClk,
  148. unsigned int moduleClk);
  149. void EHRPWMPWMOpFreqSet(unsigned int baseAddr, unsigned int tbClk,
  150. unsigned int pwmFreq,unsigned int counterDir,
  151. bool enableShadowWrite);
  152. void EHRPWMTBEmulationModeSet(unsigned int baseAddr, unsigned int mode);
  153. void EHRPWMTimebaseSyncEnable(unsigned int baseAddr, unsigned int tbPhsValue,
  154. unsigned int phsCountDir);
  155. void EHRPWMTimebaseSyncDisable(unsigned int baseAddr);
  156. void EHRPWMTriggerSWSync(unsigned int baseAddr);
  157. void EHRPWMSyncOutModeSet(unsigned int baseAddr, unsigned int syncOutMode);
  158. void EHRPWMWriteTBCount(unsigned int baseAddr, unsigned int tbCount);
  159. unsigned int EHRPWMReadTBCount(unsigned int baseAddr);
  160. unsigned int EHRPWMTBStatusGet(unsigned int baseAddr, unsigned int tbStatusMask);
  161. void EHRPWMTBClearStatus(unsigned int baseAddr, unsigned int tbStatusMask);
  162. /* Counter compare sub-module */
  163. bool EHRPWMLoadCMPA(unsigned int baseAddr, unsigned int CMPAVal,
  164. bool enableShadowWrite, unsigned int ShadowToActiveLoadTrigger,
  165. bool OverwriteShadowFull);
  166. bool EHRPWMLoadCMPB(unsigned int baseAddr, unsigned int CMPBVal,
  167. bool enableShadowWrite, unsigned int ShadowToActiveLoadTrigger,
  168. bool OverwriteShadowFull);
  169. /* Action Qualifier sub-module */
  170. void EHRPWMConfigureAQActionOnA(unsigned int baseAddr, unsigned int zero,
  171. unsigned int period,
  172. unsigned int CAUp, unsigned int CADown, unsigned int CBUp,
  173. unsigned int CBDown, unsigned int SWForced);
  174. void EHRPWMConfigureAQActionOnB(unsigned int baseAddr, unsigned int zero,
  175. unsigned int period,
  176. unsigned int CAUp, unsigned int CADown, unsigned int CBUp,
  177. unsigned int CBDown, unsigned int SWForced);
  178. void EHRPWMSWForceA(unsigned int baseAddr);
  179. void EHRPWMSWForceB(unsigned int baseAddr);
  180. void EHRPWMAQContSWForceOnA(unsigned int baseAddr, unsigned int forceVal,
  181. unsigned int activeRegReloadMode);
  182. void EHRPWMAQContSWForceOnB(unsigned int baseAddr, unsigned int forceVal,
  183. unsigned int activeRegReloadMode);
  184. /* Dead Band Generator */
  185. void EHRPWMDBSourceSelect(unsigned int baseAddr, unsigned int DBgenSource);
  186. void EHRPWMDBPolaritySelect(unsigned int baseAddr, unsigned int DBgenPol);
  187. void EHRPWMDBOutput(unsigned int baseAddr, unsigned int DBgenOpMode);
  188. void EHRPWMDBConfigureRED(unsigned int baseAddr, unsigned int raisingEdgeDelay);
  189. void EHRPWMDBConfigureFED(unsigned int baseAddr, unsigned int fallingEdgeDelay);
  190. /* Chopper sub-module */
  191. void EHRPWMConfigureChopperDuty(unsigned int baseAddr, unsigned int dutyCycle);
  192. void EHRPWMConfigureChopperFreq(unsigned int baseAddr, unsigned int freqDiv);
  193. void EHRPWMConfigureChopperOSPW(unsigned int baseAddr, unsigned int OSPWCycles);
  194. void EHRPWMChopperEnable(unsigned int baseAddr);
  195. void EHRPWMChopperDisable(unsigned int baseAddr);
  196. /* Trip-Zone sub-module */
  197. void EHRPWMTZTripEventEnable(unsigned int baseAddr, bool osht_CBC);
  198. void EHRPWMTZTripEventDisable(unsigned int baseAddr, bool osht_CBC);
  199. void EHRPWMTZForceAOnTrip(unsigned int baseAddr, unsigned int opValue);
  200. void EHRPWMTZForceBOnTrip(unsigned int baseAddr, unsigned int opValue);
  201. void EHRPWMTZIntEnable(unsigned int baseAddr, bool osht_CBC);
  202. void EHRPWMTZIntDisable(unsigned int baseAddr, bool osht_CBC);
  203. unsigned int EHRPWMTZFlagGet(unsigned int baseAddr, unsigned int flagToRead);
  204. void EHRPWMTZFlagClear(unsigned int baseAddr, unsigned int flagToClear);
  205. void EHRPWMTZSWFrcEvent(unsigned int baseAddr, bool osht_CBC);
  206. /* Event Trigger sub-module */
  207. void EHRPWMETIntDisable(unsigned int baseAddr);
  208. void EHRPWMETIntEnable(unsigned int baseAddr);
  209. void EHRPWMETIntSourceSelect(unsigned int baseAddr, unsigned int selectInt);
  210. void EHRPWMETIntPrescale(unsigned int baseAddr, unsigned int prescale);
  211. bool EHRPWMETEventCount(unsigned int baseAddr);
  212. bool EHRPWMETIntStatus(unsigned int baseAddr);
  213. void EHRPWMETIntClear(unsigned int baseAddr);
  214. void EHRPWMETIntSWForce(unsigned int baseAddr);
  215. /* HEPWM sub-module */
  216. void EHRPWMLoadTBPHSHR(unsigned int baseAddr, unsigned int TBPHSHRVal);
  217. void EHRPWMLoadCMPAHR(unsigned int baseAddr, unsigned int CMPAHRVal,
  218. unsigned int ShadowToActiveLoadTrigger);
  219. void EHRPWMConfigHR(unsigned int baseAddr,unsigned int ctrlMode,
  220. unsigned int MEPCtrlEdge); /* also enables */
  221. void EHRPWMHRDisable(unsigned int baseAddr);
  222. void EHRPWMClockEnable(unsigned int baseAdd);
  223. void EHRPWMClockDisable(unsigned int baseAdd);
  224. unsigned int EHRPWMClockEnableStatusGet(unsigned int baseAdd);
  225. unsigned int EHRPWMClockDisableStatusGet(unsigned int baseAdd);
  226. #ifdef __cplusplus
  227. }
  228. #endif
  229. #endif