SWM341_qei.c 6.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146
  1. /******************************************************************************************************************************************
  2. * 文件名称: SWM341_qei.c
  3. * 功能说明: SWM341单片机的正交编码器接口QEI功能驱动库
  4. * 技术支持: http://www.synwit.com.cn/e/tool/gbook/?bid=1
  5. * 注意事项:
  6. * 版本日期: V1.0.0 2013年06月30日
  7. * 升级记录:
  8. *
  9. *
  10. *******************************************************************************************************************************************
  11. * @attention
  12. *
  13. * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS WITH CODING INFORMATION
  14. * REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE TIME. AS A RESULT, SYNWIT SHALL NOT BE HELD LIABLE
  15. * FOR ANY DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE CONTENT
  16. * OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING INFORMATION CONTAINED HEREIN IN CONN-
  17. * -ECTION WITH THEIR PRODUCTS.
  18. *
  19. * COPYRIGHT 2012 Synwit Technology
  20. *******************************************************************************************************************************************/
  21. #include "SWM341.h"
  22. #include "SWM341_qei.h"
  23. /******************************************************************************************************************************************
  24. * 函数名称: QEI_Init()
  25. * 功能说明: 正交编码器接口QEI初始化
  26. * 输 入: QEI_TypeDef * QEIx 指定要被设置的正交编码器接口,有效值包括QEI
  27. * QEI_InitStructure * initStruct 包含正交编码器接口相关设定值的结构体
  28. * 输 出: 无
  29. * 注意事项: 无
  30. ******************************************************************************************************************************************/
  31. void QEI_Init(QEI_TypeDef * QEIx,QEI_InitStructure * initStruct)
  32. {
  33. switch((uint32_t)QEIx)
  34. {
  35. case ((uint32_t)QEI):
  36. SYS->CLKEN1 |= (1 << SYS_CLKEN1_QEI_Pos);
  37. break;
  38. }
  39. QEI_Stop(QEIx); //配置前关闭QEI模块
  40. QEIx->CR = (initStruct->swapAB << QEI_CR_ABSWAP_Pos) |
  41. (initStruct->mode << QEI_CR_X2X4_Pos) |
  42. (1 << QEI_CR_RSTSRC_Pos) |
  43. (1 << QEI_CR_MODE_Pos);
  44. QEIx->POSCNT = 0;
  45. QEIx->MAXCNT = initStruct->maxcnt;
  46. QEIx->IC = 0x0F;
  47. QEIx->IE = 0x0F;
  48. QEIx->IM = (initStruct->intINDEXEn << QEI_IM_INDEX_Pos) |
  49. (initStruct->intMATCHEn << QEI_IM_MATCH_Pos) |
  50. (initStruct->intCNTOVEn << QEI_IM_CNTOV_Pos) |
  51. (initStruct->intERROREn << QEI_IM_ERROR_Pos);
  52. if(initStruct->intINDEXEn | initStruct->intMATCHEn | initStruct->intCNTOVEn | initStruct->intERROREn)
  53. {
  54. NVIC_EnableIRQ(QEI_IRQn);
  55. }
  56. }
  57. /******************************************************************************************************************************************
  58. * 函数名称: QEI_Start()
  59. * 功能说明: 启动指定QEI
  60. * 输 入: QEI_TypeDef * QEIx 指定要被设置的正交编码器接口,有效值包括QEI
  61. * 输 出: 无
  62. * 注意事项: 无
  63. ******************************************************************************************************************************************/
  64. void QEI_Start(QEI_TypeDef * QEIx)
  65. {
  66. QEIx->CR |= (1 << QEI_CR_ENA_Pos);
  67. }
  68. /******************************************************************************************************************************************
  69. * 函数名称: QEI_Stop()
  70. * 功能说明: 关闭指定QEI
  71. * 输 入: QEI_TypeDef * QEIx 指定要被设置的正交编码器接口,有效值包括QEI
  72. * 输 出: 无
  73. * 注意事项: 无
  74. ******************************************************************************************************************************************/
  75. void QEI_Stop(QEI_TypeDef * QEIx)
  76. {
  77. QEIx->CR &= ~(1 << QEI_CR_ENA_Pos);
  78. }
  79. /******************************************************************************************************************************************
  80. * 函数名称: QEI_IntEn()
  81. * 功能说明: QEI中断使能
  82. * 输 入: QEI_TypeDef * QEIx 指定要被设置的正交编码器接口,有效值包括QEI
  83. * uint32_t it interrupt type,取值QEI_INT_INDEX、QEI_INT_MATCH、QEI_INT_CNTOV、QEI_INT_ERROR 及其或
  84. * 输 出: 无
  85. * 注意事项: 无
  86. ******************************************************************************************************************************************/
  87. void QEI_IntEn(QEI_TypeDef * QEIx, uint32_t it)
  88. {
  89. QEIx->IM |= it;
  90. switch((uint32_t)QEIx)
  91. {
  92. case ((uint32_t)QEI):
  93. NVIC_EnableIRQ(QEI_IRQn);
  94. break;
  95. }
  96. }
  97. /******************************************************************************************************************************************
  98. * 函数名称: QEI_IntDis()
  99. * 功能说明: QEI中断关闭
  100. * 输 入: QEI_TypeDef * QEIx 指定要被设置的正交编码器接口,有效值包括QEI
  101. * uint32_t it interrupt type,取值QEI_INT_INDEX、QEI_INT_MATCH、QEI_INT_CNTOV、QEI_INT_ERROR 及其或
  102. * 输 出: 无
  103. * 注意事项: 无
  104. ******************************************************************************************************************************************/
  105. void QEI_IntDis(QEI_TypeDef * QEIx, uint32_t it)
  106. {
  107. QEIx->IM &= ~it;
  108. }
  109. /******************************************************************************************************************************************
  110. * 函数名称: QEI_IntClr()
  111. * 功能说明: QEI中断标志清除
  112. * 输 入: QEI_TypeDef * QEIx 指定要被设置的正交编码器接口,有效值包括QEI
  113. * uint32_t it interrupt type,取值QEI_INT_INDEX、QEI_INT_MATCH、QEI_INT_CNTOV、QEI_INT_ERROR 及其或
  114. * 输 出: 无
  115. * 注意事项: 无
  116. ******************************************************************************************************************************************/
  117. void QEI_IntClr(QEI_TypeDef * QEIx, uint32_t it)
  118. {
  119. QEIx->IC = it;
  120. }
  121. /******************************************************************************************************************************************
  122. * 函数名称: QEI_IntStat()
  123. * 功能说明: QEI中断状态查询
  124. * 输 入: QEI_TypeDef * QEIx 指定要被设置的正交编码器接口,有效值包括QEI
  125. * uint32_t it interrupt type,取值QEI_INT_INDEX、QEI_INT_MATCH、QEI_INT_CNTOV、QEI_INT_ERROR 及其或
  126. * 输 出: uint32_t 0 没有中断发生 非0值 有中断发生
  127. * 注意事项: 无
  128. ******************************************************************************************************************************************/
  129. uint32_t QEI_IntStat(QEI_TypeDef * QEIx, uint32_t it)
  130. {
  131. return (QEIx->IF & it);
  132. }