driver_qdec.h 7.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171
  1. #ifndef __DRIVER_QDEC_H__
  2. #define __DRIVER_QDEC_H__
  3. #include "driver_com.h"
  4. //int qdec_init(void);
  5. #define QDECX_DISABLE() (QDECXCON &= ~(0x1))
  6. #define QDECY_DISABLE() (QDECYCON &= ~(0x1))
  7. #define QDECZ_DISABLE() (QDECZCON &= ~(0x1))
  8. #define QDECX_ENABLB() (QDECXCON |= 0x1)
  9. #define QDECY_ENABLB() (QDECYCON |= 0x1)
  10. #define QDECZ_ENABLB() (QDECZCON |= 0x1)
  11. #define QDECX_INTERRUPT_REVERSE_ENABLE() (QDECXCON |= 1 << 2)
  12. #define QDECX_INTERRUPT_REVERSE_DISABLE() (QDECXCON &= ~(1 << 2))
  13. #define QDECY_INTERRUPT_REVERSE_ENABLE() (QDECYCON |= 1 << 2)
  14. #define QDECY_INTERRUPT_REVERSE_DISABLE() (QDECYCON &= ~(1 << 2))
  15. #define QDECZ_INTERRUPT_REVERSE_ENABLE() (QDECZCON |= 1 << 2)
  16. #define QDECZ_INTERRUPT_REVERSE_DISABLE() (QDECZCON &= ~(1 << 2))
  17. #define QDECX_INTERRUPT_FORWARD_ENABLE() (QDECXCON |= 1 << 1)
  18. #define QDECX_INTERRUPT_FORWARD_DISABLE() (QDECXCON &= ~(1 << 1))
  19. #define QDECY_INTERRUPT_FORWARD_ENABLE() (QDECYCON |= 1 << 1)
  20. #define QDECY_INTERRUPT_FORWARD_DISABLE() (QDECYCON &= ~(1 << 1))
  21. #define QDECZ_INTERRUPT_FORWARD_ENABLE() (QDECZCON |= 1 << 1)
  22. #define QDECZ_INTERRUPT_FORWARD_DISABLE() (QDECZCON &= ~(1 << 1))
  23. #define QDECX_INTERRUPT_SMPIE_ENABLE (QDECXCON |= 1 << 3)
  24. #define QDECX_INTERRUPT_SMPIE_DISABLE (QDECXCON &= ~(1 << 3))
  25. #define QDECY_INTERRUPT_SMPIE_ENABLE (QDECYCON |= 1 << 3)
  26. #define QDECY_INTERRUPT_SMPIE_DISABLE (QDECYCON &= ~(1 << 3))
  27. #define QDECZ_INTERRUPT_SMPIE_ENABLE (QDECZCON |= 1 << 3)
  28. #define QDECZ_INTERRUPT_SMPIE_DISABLE (QDECZCON &= ~(1 << 3))
  29. #define QDECX_WKUP_ENABLE() (QDECXCON |= 1 << 4)
  30. #define QDECX_WKUP_DISABLE() (QDECXCON &= ~(1 << 4))
  31. #define QDECY_WKUP_ENABLE() (QDECYCON |= 1 << 4)
  32. #define QDECY_WKUP_DISABLE() (QDECYCON &= ~(1 << 4))
  33. #define QDECZ_WKUP_ENABLE() (QDECZCON |= 1 << 4)
  34. #define QDECZ_WKUP_DISABLE() (QDECZCON &= ~(1 << 4))
  35. /*5~11BIT*/
  36. #define QDECX_FILTER(x) (QDECXCON &= ~(0x7f << 5),QDECXCON |= ((x & 0x7f) << 5))
  37. #define QDECY_FILTER(x) (QDECYCON &= ~(0x7f << 5),QDECYCON |= ((x & 0x7f) << 5))
  38. #define QDECZ_FILTER(x) (QDECZCON &= ~(0x7f << 5),QDECZCON |= ((x & 0x7f) << 5))
  39. #define QDECX_FILTER_CLEAR (QDECXCON &= ~(0x7f << 5))
  40. #define QDECY_FILTER_CLEAR (QDECYCON &= ~(0x7f << 5))
  41. #define QDECZ_FILTER_CLEAR (QDECZCON &= ~(0x7f << 5))
  42. /*bit 12~13
  43. select mode cap1/2/4 edge*/
  44. #define QDECX_MODE_CAP1() (QDECXCON &= ~(3 << 12))
  45. #define QDECX_MODE_CAP2() (QDECXCON |= (2 << 12))
  46. #define QDECX_MODE_CAP4() (QDECXCON |= (3 << 12))
  47. #define QDECY_MODE_CAP1() (QDECYCON &= ~(3 << 12))
  48. #define QDECY_MODE_CAP2() (QDECYCON |= (2 << 12))
  49. #define QDECY_MODE_CAP4() (QDECYCON |= (3 << 12))
  50. #define QDECZ_MODE_CAP1() (QDECZCON &= ~(3 << 12))
  51. #define QDECZ_MODE_CAP2() (QDECZCON |= (2 << 12))
  52. #define QDECZ_MODE_CAP4() (QDECZCON |= (3 << 12))
  53. #define QDECX_ERROR_PENDING_GET (QDECXCON & (1 << 14))
  54. #define QDECY_ERROR_PENDING_GET (QDECYCON & (1 << 14))
  55. #define QDECZ_ERROR_PENDING_GET (QDECZCON & (1 << 14))
  56. //#define QDECX_MODE_WHEEL (QDECXCON |= 1 << 15)
  57. //#define QDECX_MODE_NORMAL (QDECXCON &= ~(1 << 15))
  58. //#define QDECY_MODE_WHEEL (QDECYCON |= 1 << 15)
  59. //#define QDECY_MODE_NORMAL (QDECYCON &= ~(1 << 15))
  60. //#define QDECZ_MODE_WHEEL (QDECZCON |= 1 << 15)
  61. //#define QDECZ_MODE_NORMAL (QDECZCON &= ~(1 << 15))
  62. #define QDECX_TIME_MODE_ENABLE (QDECXCON |= 1 << 15)
  63. #define QDECX_TIME_MODE_DISABLE (QDECXCON &= ~(1 << 15))
  64. #define QDECY_TIME_MODE_ENABLE (QDECYCON |= 1 << 15)
  65. #define QDECY_TIME_MODE_DISABLE (QDECYCON &= ~(1 << 15))
  66. #define QDECZ_TIME_MODE_ENABLE (QDECZCON |= 1 << 15)
  67. #define QDECZ_TIME_MODE_DISABLE (QDECZCON &= ~(1 << 15))
  68. /*bit 16~19*/
  69. #define QDECX_SMP(x) (QDECXCON |= (x & 0x0f) << 16)
  70. #define QDECY_SMP(x) (QDECYCON |= (x & 0x0f) << 16)
  71. #define QDECZ_SMP(x) (QDECZCON |= (x & 0x0f) << 16)
  72. #define QDECX_SMP_PND (QDECXCON & (1 << 20))
  73. #define QDECY_SMP_PND (QDECYCON & (1 << 20))
  74. #define QDECZ_SMP_PND (QDECZCON & (1 << 20))
  75. #define QDECX_OV_PNDING_GET (QDECXCON & (1 << 21))
  76. #define QDECY_OV_PNDING_GET (QDECYCON & (1 << 21))
  77. #define QDECZ_OV_PNDING_GET (QDECZCON & (1 << 21))
  78. #define QDECX_DAT_CLR (QDECXCON |= (1 << 22))
  79. #define QDECY_DAT_CLR (QDECYCON |= (1 << 22))
  80. #define QDECZ_DAT_CLR (QDECZCON |= (1 << 22))
  81. #define QDECX_REVERSE_PENDING_GET (QDECXCON & (1 << 31))
  82. #define QDECX_FORWARD_PENDING_GET (QDECXCON & (1 << 30))
  83. #define QDECY_REVERSE_PENDING_GET (QDECYCON & (1 << 31))
  84. #define QDECY_FORWARD_PENDING_GET (QDECYCON & (1 << 30))
  85. #define QDECZ_REVERSE_PENDING_GET (QDECZCON & (1 << 31))
  86. #define QDECZ_FORWARD_PENDING_GET (QDECZCON & (1 << 30))
  87. #define QDECX_REVERSE_PENDING_CLEAR() (QDECXCPND = 1 << 31)
  88. #define QDECX_FORWARD_PENDING_CLEAR() (QDECXCPND = 1 << 30)
  89. //#define QDECX_REOV_PNDING_CLEAR (QDECXCPND = 1 << 22)
  90. #define QDECX_OV_PNDING_CLEAR() (QDECXCPND = 1 << 21)
  91. #define QDECX_SMP_PENDING_CLEAR() (QDECXCPND = 1 << 20)
  92. #define QDECX_ERROR_PENDING_CLEAR() (QDECXCPND = 1 << 14)
  93. #define QDECY_REVERSE_PENDING_CLEAR() (QDECYCPND = 1 << 31)
  94. #define QDECY_FORWARD_PENDING_CLEAR() (QDECYCPND = 1 << 30)
  95. //#define QDECY_REOV_PNDING_CLEAR (QDECYCPND = 1 << 22)
  96. #define QDECY_OV_PNDING_CLEAR() (QDECYCPND = 1 << 21)
  97. #define QDECY_SMP_PENDING_CLEAR (QDECYCPND = 1 << 20)
  98. #define QDECY_ERROR_PENDING_CLEAR() (QDECYCPND = 1 << 14)
  99. #define QDECZ_REVERSE_PENDING_CLEAR() (QDECZCPND = 1 << 31)
  100. #define QDECZ_FORWARD_PENDING_CLEAR() (QDECZCPND = 1 << 30)
  101. //#define QDECZ_REOV_PNDING_CLEAR (QDECZCPND = 1 << 22)
  102. #define QDECZ_OV_PNDING_CLEAR() (QDECZCPND = 1 << 21)
  103. #define QDECZ_SMP_PENDING_CLEAR() (QDECZCPND = 1 << 20)
  104. #define QDECZ_ERROR_PENDING_CLEAR() (QDECZCPND = 1 << 14)
  105. #define QDECXDATA_VALUE_GET(x) (x = (QDECXDAT & 0X00000fff))
  106. #define QDECXDATA_SYMBOL_GET(x) (x = ((QDECXDAT & 0x00000800) >> 11))
  107. #define QDECYDATA_VALUE_GET(x) (x = (QDECYDAT & 0X00000fff))
  108. #define QDECYDATA_SYMBOL_GET(x) (x = ((QDECYDAT & 0x00000800) >> 11))
  109. #define QDECZDATA_VALUE_GET(x) (x = (QDECZDAT & 0X00000fff))
  110. #define QDECZDATA_SYMBOL_GET(x) (x = ((QDECZDAT & 0x00000800) >> 11))
  111. #define QDECX_FROV_PNDING_CLEAR (QDECXCPND = 1 << 21)
  112. #define QDECX_FROV_PNDING_GET (QDECXCON & (1 << 21))
  113. //QDEC clk
  114. #define XOSCCON_DI_EN_XOSC 10
  115. #define XOSCCON_DI_EN_CKOUT3 26
  116. #define XOSCCON_DI_EN_LDO 12
  117. typedef enum{
  118. QDEC_X_AXIS,
  119. QDEC_Y_AXIS,
  120. QDEC_Z_AXIS,
  121. }QDEC_AXIS_SEL;
  122. typedef struct{
  123. QDEC_AXIS_SEL qdec_asis_sel;
  124. u8 number_samples_sel;
  125. u8 qdec_cm_sel;
  126. }qdec_init_typedef;
  127. enum{
  128. QDEC_SMP_NUM_SAMPLES_64 = 0x0,
  129. QDEC_SMP_NUM_SAMPLES_640 = 0x1,
  130. QDEC_SMP_NUM_SAMPLES_2560 = 0x2,
  131. QDEC_SMP_NUM_SAMPLES_5120 = 0x3,
  132. QDEC_SMP_NUM_SAMPLES_7680 = 0x4,
  133. QDEC_SMP_NUM_SAMPLES_10240 = 0x5,
  134. QDEC_SMP_NUM_SAMPLES_12800 = 0x6,
  135. QDEC_SMP_NUM_SAMPLES_16360 = 0x7,
  136. QDEC_SMP_NUM_SAMPLES_17920 = 0x8,
  137. };
  138. enum{
  139. QDEC_CM_1_MODE = 0x1,
  140. QDEC_CM_2_MODE = 0x2,
  141. QDEC_CM_4_MODE = 0x3
  142. };
  143. void qdec_init(qdec_init_typedef *qdec_cfg);
  144. #endif // __DRIVER_QDEC_H__