sensor.c 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588
  1. #include "sensor.h"
  2. #if 1 //def _SC7A20_
  3. /***************���߲���**********************/
  4. INT8 SL_SC7A20_Online_Test(void)
  5. {
  6. UINT8 SL_Read_Reg = 0xff;
  7. GSENSOR_ReadReg(SC7A20_CHIP_ID_ADDRESS, 1, &SL_Read_Reg);
  8. printf("SL_Read_Reg = %#x\r\n", SL_Read_Reg);
  9. if (SL_Read_Reg == SC7A20_CHIP_ID_VALUE)
  10. {
  11. return 1;
  12. }
  13. else
  14. {
  15. return -1;
  16. }
  17. }
  18. /***************BOOT �����ڲ��Ĵ���ֵ*********************/
  19. INT8 SL_SC7A20_BOOT(void)
  20. {
  21. UINT8 SL_Read_Reg = 0xff;
  22. GSENSOR_ReadReg(SL_SC7A20_CTRL_REG5, 1, &SL_Read_Reg);
  23. SL_Read_Reg = SL_SC7A20_BOOT_ENABLE; //|SL_Read_Reg;
  24. GSENSOR_WriteReg(SL_SC7A20_CTRL_REG5, SL_Read_Reg);
  25. return 1;
  26. }
  27. /***************��������������**********************/
  28. INT8 SL_SC7A20_FS_Config(UINT8 Sc7a20_FS_Reg)
  29. {
  30. UINT8 SL_Read_Reg = 0xff, SL_Write_Reg;
  31. GSENSOR_ReadReg(SL_SC7A20_CTRL_REG4, 1, &SL_Read_Reg);
  32. SL_Write_Reg = 0x80 | Sc7a20_FS_Reg | SL_SC7A20_HR_ENABLE;
  33. GSENSOR_WriteReg(SL_SC7A20_CTRL_REG4, SL_Write_Reg);
  34. GSENSOR_ReadReg(SL_SC7A20_CTRL_REG4, 1, &SL_Read_Reg);
  35. if (SL_Read_Reg == SL_Write_Reg)
  36. {
  37. return 1;
  38. }
  39. else
  40. {
  41. return -1;
  42. }
  43. }
  44. #if SL_6D4D2D1D_SEL == 1 //1D
  45. //AOI1_INT1 �˶���⣬�˶������ж� 6D�˶����
  46. //AOI2_INT2 λ�ü�⣬����Ƿ��뿪X+λ�� 1Dλ��ʶ��
  47. /***************�����*************/
  48. INT8 SL_SC7A20_INT_Config(void)
  49. {
  50. UINT8 SL_Read_Reg;
  51. /*******************AOI1 IN INT1********************/
  52. SL_Read_Reg = 0x08; //AOI1 LATCH
  53. GSENSOR_WriteReg(SL_SC7A20_CTRL_REG5, SL_Read_Reg);
  54. SL_Read_Reg = SL_SC7A20_INT_ACTIVE_HIGH_LEVEL;
  55. //interrupt happen,int pin output lower level
  56. GSENSOR_WriteReg(SL_SC7A20_CTRL_REG6, SL_Read_Reg);
  57. //AOI1 CONFIG
  58. SL_Read_Reg = 0x00; //0x7F
  59. SL_Read_Reg = SL_Read_Reg | 0x40; //�����˶�ʶ��ģʽ
  60. SL_Read_Reg = SL_Read_Reg | 0x02; //X ����¼� X�����ݵľ���ֵ������ֵ
  61. GSENSOR_WriteReg(SL_SC7A20_INT1_CFG, SL_Read_Reg);
  62. //HPF SET
  63. // GSENSOR_ReadReg(SL_SC7A20_CTRL_REG2,1, &SL_Read_Reg);
  64. SL_Read_Reg = 0xcf; //SL_Read_Reg|0x81;//Normal HP , HPF TO AOI1
  65. GSENSOR_WriteReg(SL_SC7A20_CTRL_REG2, SL_Read_Reg);
  66. //�ж���ֵ����
  67. GSENSOR_WriteReg(SL_SC7A20_INT1_THS, SL_SC7A20_INT_THS_10PERCENT);
  68. //������ֵ����ʱ�䴥���ж�
  69. GSENSOR_WriteReg(SL_SC7A20_INT1_DURATION, SL_SC7A20_INT_DURATION_2CLK);
  70. //AOI1 TO INT1
  71. // GSENSOR_ReadReg(SL_SC7A20_CTRL_REG3,1, &SL_Read_Reg);
  72. SL_Read_Reg = 0x40; //SL_Read_Reg|0x40; //AOI1 TO INT1
  73. GSENSOR_WriteReg(SL_SC7A20_CTRL_REG3, SL_Read_Reg);
  74. /*******************AOI1 IN INT1********************/
  75. /*******************AOI2 IN INT2********************/
  76. GSENSOR_ReadReg(SL_SC7A20_CTRL_REG5, 1, &SL_Read_Reg);
  77. SL_Read_Reg = SL_Read_Reg | 0x02; //AOI2 LATCH
  78. GSENSOR_WriteReg(SL_SC7A20_CTRL_REG5, SL_Read_Reg);
  79. //AOI2 CONFIG
  80. SL_Read_Reg = 0x00; //0xFF
  81. SL_Read_Reg = SL_Read_Reg | 0xC0; //�����˶�ʶ��ģʽ
  82. SL_Read_Reg = SL_Read_Reg | 0x02; //X ����¼� X�����ݵľ���ֵ������ֵ
  83. GSENSOR_WriteReg(SL_SC7A20_INT2_CFG, SL_Read_Reg);
  84. //HPF SET
  85. // GSENSOR_ReadReg(SL_SC7A20_CTRL_REG2,1, &SL_Read_Reg);
  86. //SL_Read_Reg=SL_Read_Reg&0xFD;//NO HPF TO AOI2
  87. // GSENSOR_WriteReg(SL_SC7A20_CTRL_REG2, SL_Read_Reg);
  88. //�ж���ֵ����
  89. GSENSOR_WriteReg(SL_SC7A20_INT2_THS, SL_SC7A20_INT_THS_10PERCENT);
  90. //������ֵ����ʱ�䴥���ж�
  91. GSENSOR_WriteReg(SL_SC7A20_INT2_DURATION, SL_SC7A20_INT_DURATION_2CLK);
  92. //AOI2 TO INT2
  93. GSENSOR_ReadReg(SL_SC7A20_CTRL_REG6, 1, &SL_Read_Reg);
  94. SL_Read_Reg = SL_Read_Reg | 0x20; //AOI2 TO INT2
  95. GSENSOR_WriteReg(SL_SC7A20_CTRL_REG6, SL_Read_Reg);
  96. /*******************AOI2 IN INT2********************/
  97. return 1;
  98. }
  99. #elif SL_6D4D2D1D_SEL == 2 //2D
  100. //AOI1_INT1 �˶���⣬�˶������ж� ���¼� 3D�˶����
  101. //AOI2_INT2 λ�ü�⣬���X+ �� X- 2Dλ��ʶ��
  102. /***************�����*************/
  103. INT8 SL_SC7A20_INT_Config(void)
  104. {
  105. UINT8 SL_Read_Reg;
  106. /*******************AOI1 IN INT1********************/
  107. SL_Read_Reg = 0x08; //AOI1 LATCH
  108. GSENSOR_WriteReg(SL_SC7A20_CTRL_REG5, SL_Read_Reg);
  109. SL_Read_Reg = SL_SC7A20_INT_ACTIVE_HIGH_LEVEL;
  110. //interrupt happen,int pin output lower level
  111. GSENSOR_WriteReg(SL_SC7A20_CTRL_REG6, SL_Read_Reg);
  112. //AOI1 CONFIG
  113. SL_Read_Reg = 0x00; //0x7F
  114. SL_Read_Reg = SL_Read_Reg | 0x40; //�����˶�ʶ��ģʽ
  115. SL_Read_Reg = SL_Read_Reg | 0x02; //X ����¼� X�����ݵľ���ֵ������ֵ
  116. SL_Read_Reg = SL_Read_Reg | 0x04; //Y ����¼� Y�����ݵľ���ֵ������ֵ
  117. GSENSOR_WriteReg(SL_SC7A20_INT1_CFG, SL_Read_Reg);
  118. //HPF SET
  119. // GSENSOR_ReadReg(SL_SC7A20_CTRL_REG2,1, &SL_Read_Reg);
  120. SL_Read_Reg = 0xcf; //SL_Read_Reg|0x81;//Normal HP , HPF TO AOI1
  121. GSENSOR_WriteReg(SL_SC7A20_CTRL_REG2, SL_Read_Reg);
  122. //�ж���ֵ����
  123. GSENSOR_WriteReg(SL_SC7A20_INT1_THS, SL_SC7A20_INT_THS_10PERCENT);
  124. //������ֵ����ʱ�䴥���ж�
  125. GSENSOR_WriteReg(SL_SC7A20_INT1_DURATION, SL_SC7A20_INT_DURATION_2CLK);
  126. //AOI1 TO INT1
  127. // GSENSOR_ReadReg(SL_SC7A20_CTRL_REG3,1, &SL_Read_Reg);
  128. SL_Read_Reg = 0x40; //SL_Read_Reg|0x40; //AOI1 TO INT1
  129. GSENSOR_WriteReg(SL_SC7A20_CTRL_REG3, SL_Read_Reg);
  130. /*******************AOI1 IN INT1********************/
  131. /*******************AOI2 IN INT2********************/
  132. GSENSOR_ReadReg(SL_SC7A20_CTRL_REG5, 1, &SL_Read_Reg);
  133. SL_Read_Reg = SL_Read_Reg | 0x02; //AOI2 LATCH
  134. GSENSOR_WriteReg(SL_SC7A20_CTRL_REG5, SL_Read_Reg);
  135. //AOI2 CONFIG
  136. SL_Read_Reg = 0x00; //0xFF
  137. SL_Read_Reg = SL_Read_Reg | 0xC0; //�����˶�ʶ��ģʽ
  138. SL_Read_Reg = SL_Read_Reg | 0x02; //X ����¼� X�����ݵľ���ֵ������ֵ
  139. SL_Read_Reg = SL_Read_Reg | 0x04; //Y ����¼� Y�����ݵľ���ֵ������ֵ
  140. GSENSOR_WriteReg(SL_SC7A20_INT2_CFG, SL_Read_Reg);
  141. //HPF SET
  142. //GSENSOR_ReadReg(SL_SC7A20_CTRL_REG2,1, &SL_Read_Reg);
  143. //SL_Read_Reg=SL_Read_Reg&0xFD;//NO HPF TO AOI2
  144. //GSENSOR_WriteReg(SL_SC7A20_CTRL_REG2, SL_Read_Reg);
  145. //�ж���ֵ����
  146. GSENSOR_WriteReg(SL_SC7A20_INT2_THS, SL_SC7A20_INT_THS_10PERCENT);
  147. //������ֵ����ʱ�䴥���ж�
  148. GSENSOR_WriteReg(SL_SC7A20_INT2_DURATION, SL_SC7A20_INT_DURATION_2CLK);
  149. //AOI2 TO INT2
  150. GSENSOR_ReadReg(SL_SC7A20_CTRL_REG6, 1, &SL_Read_Reg);
  151. SL_Read_Reg = SL_Read_Reg | 0x20; //AOI2 TO INT2
  152. GSENSOR_WriteReg(SL_SC7A20_CTRL_REG6, SL_Read_Reg);
  153. /*******************AOI2 IN INT2********************/
  154. return 1;
  155. }
  156. #elif SL_6D4D2D1D_SEL == 4 //4D
  157. //AOI1_INT1 �˶���⣬�˶������ж� ���¼� 3D�˶����
  158. //AOI2_INT2 λ�ü�⣬���X+ �� X- Y+ �� Y- 4Dλ��ʶ��
  159. /***************�����*************/
  160. INT8 SL_SC7A20_INT_Config(void)
  161. {
  162. UINT8 SL_Read_Reg;
  163. /*******************AOI1 IN INT1********************/
  164. SL_Read_Reg = 0x08; //AOI1 LATCH
  165. GSENSOR_WriteReg(SL_SC7A20_CTRL_REG5, SL_Read_Reg);
  166. SL_Read_Reg = SL_SC7A20_INT_ACTIVE_HIGH_LEVEL;
  167. //interrupt happen,int pin output lower level
  168. GSENSOR_WriteReg(SL_SC7A20_CTRL_REG6, SL_Read_Reg);
  169. //AOI1 CONFIG
  170. SL_Read_Reg = 0x00; //0x7F
  171. SL_Read_Reg = SL_Read_Reg | 0x40; //�����˶�ʶ��ģʽ
  172. SL_Read_Reg = SL_Read_Reg | 0x03; //X ��ߵ��¼� X�����ݵľ���ֵ������ֵ
  173. SL_Read_Reg = SL_Read_Reg | 0x0C; //Y ��ߵ��¼� Y�����ݵľ���ֵ������ֵ
  174. GSENSOR_WriteReg(SL_SC7A20_INT1_CFG, SL_Read_Reg);
  175. //HPF SET
  176. // GSENSOR_ReadReg(SL_SC7A20_CTRL_REG2,1, &SL_Read_Reg);
  177. SL_Read_Reg = 0xcf; //SL_Read_Reg|0x81;//Normal HP , HPF TO AOI1
  178. GSENSOR_WriteReg(SL_SC7A20_CTRL_REG2, SL_Read_Reg);
  179. //�ж���ֵ����
  180. GSENSOR_WriteReg(SL_SC7A20_INT1_THS, SL_SC7A20_INT_THS_10PERCENT);
  181. //������ֵ����ʱ�䴥���ж�
  182. GSENSOR_WriteReg(SL_SC7A20_INT1_DURATION, SL_SC7A20_INT_DURATION_2CLK);
  183. //AOI1 TO INT1
  184. // GSENSOR_ReadReg(SL_SC7A20_CTRL_REG3,1, &SL_Read_Reg);
  185. SL_Read_Reg = 0x40; //SL_Read_Reg|0x40; //AOI1 TO INT1
  186. GSENSOR_WriteReg(SL_SC7A20_CTRL_REG3, SL_Read_Reg);
  187. /*******************AOI1 IN INT1********************/
  188. /*******************AOI2 IN INT2********************/
  189. GSENSOR_ReadReg(SL_SC7A20_CTRL_REG5, 1, &SL_Read_Reg);
  190. SL_Read_Reg = SL_Read_Reg | 0x02; //AOI2 LATCH
  191. GSENSOR_WriteReg(SL_SC7A20_CTRL_REG5, SL_Read_Reg);
  192. //AOI2 CONFIG
  193. SL_Read_Reg = 0x00; //0xFF
  194. SL_Read_Reg = SL_Read_Reg | 0xC0; //�����˶�ʶ��ģʽ
  195. SL_Read_Reg = SL_Read_Reg | 0x03; //X ��ߵ��¼� X�����ݵľ���ֵ������ֵ
  196. SL_Read_Reg = SL_Read_Reg | 0x0C; //Y ��ߵ��¼� Y�����ݵľ���ֵ������ֵ
  197. GSENSOR_WriteReg(SL_SC7A20_INT2_CFG, SL_Read_Reg);
  198. //HPF SET
  199. //GSENSOR_ReadReg(SL_SC7A20_CTRL_REG2,1, &SL_Read_Reg);
  200. // SL_Read_Reg=SL_Read_Reg&0xFD;//NO HPF TO AOI2
  201. // GSENSOR_WriteReg(SL_SC7A20_CTRL_REG2, SL_Read_Reg);
  202. //�ж���ֵ����
  203. GSENSOR_WriteReg(SL_SC7A20_INT2_THS, SL_SC7A20_INT_THS_10PERCENT);
  204. //������ֵ����ʱ�䴥���ж�
  205. GSENSOR_WriteReg(SL_SC7A20_INT2_DURATION, SL_SC7A20_INT_DURATION_2CLK);
  206. //AOI2 TO INT2
  207. GSENSOR_ReadReg(SL_SC7A20_CTRL_REG6, 1, &SL_Read_Reg);
  208. SL_Read_Reg = SL_Read_Reg | 0x20; //AOI2 TO INT2
  209. GSENSOR_WriteReg(SL_SC7A20_CTRL_REG6, SL_Read_Reg);
  210. /*******************AOI2 IN INT2********************/
  211. return 1;
  212. }
  213. #elif SL_6D4D2D1D_SEL == 6 //6D
  214. //AOI1_INT1 �˶���⣬�˶������ж� 6D�˶����
  215. //AOI2_INT2 λ�ü�⣬���X+ �� X- Y+ �� Y- Z+ �� Z- 6Dλ��ʶ��
  216. /***************�����*************/
  217. INT8 SL_SC7A20_INT_Config(void)
  218. {
  219. UINT8 SL_Read_Reg;
  220. /*******************AOI1 IN INT1********************/
  221. SL_Read_Reg = 0x00; //AOI1 LATCH
  222. GSENSOR_WriteReg(SL_SC7A20_CTRL_REG5, SL_Read_Reg);
  223. SL_Read_Reg = SL_SC7A20_INT_ACTIVE_LOWER_LEVEL;
  224. //interrupt happen,int pin output lower level
  225. GSENSOR_WriteReg(SL_SC7A20_CTRL_REG6, SL_Read_Reg);
  226. //AOI1 CONFIG
  227. SL_Read_Reg = 0x00; //0x7F
  228. SL_Read_Reg = SL_Read_Reg | 0x00; //�����˶�ʶ��ģʽ
  229. SL_Read_Reg = SL_Read_Reg | 0x02; //X ��ߵ��¼� X�����ݵľ���ֵ������ֵ
  230. SL_Read_Reg = SL_Read_Reg | 0x08; //Y ��ߵ��¼� Y�����ݵľ���ֵ������ֵ
  231. SL_Read_Reg = SL_Read_Reg | 0x20; //Z ��ߵ��¼� Z�����ݵľ���ֵ������ֵ
  232. GSENSOR_WriteReg(SL_SC7A20_INT1_CFG, SL_Read_Reg);
  233. //HPF SET
  234. // GSENSOR_ReadReg(SL_SC7A20_CTRL_REG2,1, &SL_Read_Reg);
  235. SL_Read_Reg = 0x81; //SL_Read_Reg|0x81;//Normal HP , HPF TO AOI1
  236. GSENSOR_WriteReg(SL_SC7A20_CTRL_REG2, SL_Read_Reg);
  237. //�ж���ֵ����
  238. GSENSOR_WriteReg(SL_SC7A20_INT1_THS, SL_SC7A20_INT_THS_20PERCENT);
  239. //������ֵ����ʱ�䴥���ж�
  240. GSENSOR_WriteReg(SL_SC7A20_INT1_DURATION, SL_SC7A20_INT_DURATION_10CLK);
  241. //AOI1 TO INT1
  242. // GSENSOR_ReadReg(SL_SC7A20_CTRL_REG3,1, &SL_Read_Reg);
  243. SL_Read_Reg = 0x40; //SL_Read_Reg|0x40; //AOI1 TO INT1
  244. GSENSOR_WriteReg(SL_SC7A20_CTRL_REG3, SL_Read_Reg);
  245. /*******************AOI1 IN INT1********************/
  246. /*******************AOI2 IN INT2********************/
  247. GSENSOR_ReadReg(SL_SC7A20_CTRL_REG5, 1, &SL_Read_Reg);
  248. SL_Read_Reg = SL_Read_Reg | 0x02; //AOI2 LATCH
  249. GSENSOR_WriteReg(SL_SC7A20_CTRL_REG5, SL_Read_Reg);
  250. //AOI2 CONFIG
  251. SL_Read_Reg = 0x00; //0xFF
  252. SL_Read_Reg = SL_Read_Reg | 0xc0; //�����˶�ʶ��ģʽ
  253. SL_Read_Reg = SL_Read_Reg | 0x03; //X ��ߵ��¼� X�����ݵľ���ֵ������ֵ
  254. SL_Read_Reg = SL_Read_Reg | 0x0C; //Y ��ߵ��¼� Y�����ݵľ���ֵ������ֵ
  255. SL_Read_Reg = SL_Read_Reg | 0x30; //Z ��ߵ��¼� Z�����ݵľ���ֵ������ֵ
  256. GSENSOR_WriteReg(SL_SC7A20_INT2_CFG, SL_Read_Reg);
  257. //HPF SET
  258. GSENSOR_ReadReg(SL_SC7A20_CTRL_REG2, 1, &SL_Read_Reg);
  259. // SL_Read_Reg=SL_Read_Reg&0xFD;//NO HPF TO AOI2
  260. // GSENSOR_WriteReg(SL_SC7A20_CTRL_REG2, SL_Read_Reg);
  261. //�ж���ֵ����
  262. GSENSOR_WriteReg(SL_SC7A20_INT2_THS, SL_SC7A20_INT_THS_20PERCENT);
  263. //������ֵ����ʱ�䴥���ж�
  264. GSENSOR_WriteReg(SL_SC7A20_INT2_DURATION, SL_SC7A20_INT_DURATION_10CLK);
  265. //AOI2 TO INT2
  266. GSENSOR_ReadReg(SL_SC7A20_CTRL_REG6, 1, &SL_Read_Reg);
  267. SL_Read_Reg = SL_Read_Reg | 0x20; //AOI2 TO INT2
  268. GSENSOR_WriteReg(SL_SC7A20_CTRL_REG6, SL_Read_Reg);
  269. /*******************AOI2 IN INT2********************/
  270. return 1;
  271. }
  272. #endif
  273. /******�ⲿ�жϴ�����������Ҫ���øú���*******/
  274. //retrun_value&0x20=0x20 ZH Z����¼�
  275. //retrun_value&0x20=0x10 ZL Z����¼�
  276. //retrun_value&0x20=0x08 YH Y����¼�
  277. //retrun_value&0x20=0x04 YL Y����¼�
  278. //retrun_value&0x20=0x02 XH X����¼�
  279. //retrun_value&0x20=0x01 XL X����¼�
  280. INT8 SL_SC7A20_INT_RESET(void)
  281. {
  282. UINT8 SL_Read_Reg1;
  283. UINT8 SL_Read_Reg2;
  284. /*****Ϊ�˱����ȡ���ݹ������ֲ����жϣ�������ʱ�ر��ж�*****/
  285. //SL_Read_Reg1 display the int1 type
  286. GSENSOR_ReadReg(SL_SC7A20_INT1_SRC, 1, &SL_Read_Reg1);
  287. //SL_Read_Reg2 display the int2 type
  288. GSENSOR_ReadReg(SL_SC7A20_INT2_SRC, 1, &SL_Read_Reg2);
  289. //close INT1
  290. GSENSOR_WriteReg(SL_SC7A20_INT1_CFG, 0x00);
  291. //close INT2
  292. GSENSOR_WriteReg(SL_SC7A20_INT2_CFG, 0x00);
  293. if ((SL_Read_Reg2 & 0x02) == 0x02)
  294. {
  295. //X+
  296. }
  297. if ((SL_Read_Reg2 & 0x01) == 0x01)
  298. {
  299. //X-
  300. }
  301. if ((SL_Read_Reg2 & 0x08) == 0x08)
  302. {
  303. //Y+
  304. }
  305. if ((SL_Read_Reg2 & 0x04) == 0x04)
  306. {
  307. //Y-
  308. }
  309. if ((SL_Read_Reg2 & 0x20) == 0x20)
  310. {
  311. //Z+
  312. }
  313. if ((SL_Read_Reg2 & 0x10) == 0x10)
  314. {
  315. //Z-
  316. }
  317. if (SL_Read_Reg1 != 0 || SL_Read_Reg2 != 0)
  318. {
  319. return 1;
  320. }
  321. else
  322. {
  323. return 0;
  324. }
  325. }
  326. void SL_SC7A20_AOI1_event(void)
  327. {
  328. UINT8 SL_SRC_Reg1;
  329. UINT8 SL_THS_Reg1;
  330. UINT8 SL_DURATION_Reg1;
  331. //SL_Read_Reg1 display the int1 type
  332. GSENSOR_ReadReg(SL_SC7A20_INT1_SRC, 1, &SL_SRC_Reg1);
  333. GSENSOR_ReadReg(SL_SC7A20_INT1_THS, 1, &SL_THS_Reg1);
  334. GSENSOR_ReadReg(SL_SC7A20_INT1_DURATION, 1, &SL_DURATION_Reg1);
  335. printf("SL_SC7A20_INT1_SRC=%#x\r\n", SL_SRC_Reg1);
  336. // if((SL_SRC_Reg1&0x40)==0x40){
  337. if ((SL_SRC_Reg1 & 0x01) == 0x01)
  338. {
  339. //X-
  340. printf("X1-\r\n");
  341. }
  342. if ((SL_SRC_Reg1 & 0x02) == 0x02)
  343. {
  344. //X+
  345. printf("X1+\r\n");
  346. }
  347. if ((SL_SRC_Reg1 & 0x04) == 0x04)
  348. {
  349. //Y-
  350. printf("Y1-\r\n");
  351. }
  352. if ((SL_SRC_Reg1 & 0x08) == 0x08)
  353. {
  354. //Y+
  355. printf("Y1+\r\n");
  356. }
  357. if ((SL_SRC_Reg1 & 0x10) == 0x10)
  358. {
  359. //Z-
  360. printf("Z1-\r\n");
  361. }
  362. if ((SL_SRC_Reg1 & 0x20) == 0x20)
  363. {
  364. //Z+
  365. printf("Z1+\r\n");
  366. }
  367. // }
  368. }
  369. INT8 SL_SC7A20_AOI2_event(void)
  370. {
  371. UINT8 SL_SRC_Reg2;
  372. UINT8 SL_THS_Reg2;
  373. UINT8 SL_DURATION_Reg2;
  374. //SL_Read_Reg1 display the int1 type
  375. GSENSOR_ReadReg(SL_SC7A20_INT2_SRC, 1, &SL_SRC_Reg2);
  376. GSENSOR_ReadReg(SL_SC7A20_INT2_THS, 1, &SL_THS_Reg2);
  377. GSENSOR_ReadReg(SL_SC7A20_INT2_DURATION, 1, &SL_DURATION_Reg2);
  378. printf("SL_SC7A20_INT2_SRC=%#x\r\n", SL_SRC_Reg2);
  379. // if((SL_SRC_Reg2&0x40)==0x40){
  380. if ((SL_SRC_Reg2 & 0x01) == 0x01)
  381. {
  382. //X-
  383. printf("X2-\r\n");
  384. }
  385. if ((SL_SRC_Reg2 & 0x02) == 0x02)
  386. {
  387. //X+
  388. printf("X2+\r\n");
  389. }
  390. if ((SL_SRC_Reg2 & 0x04) == 0x04)
  391. {
  392. //Y-
  393. printf("Y2-\r\n");
  394. }
  395. if ((SL_SRC_Reg2 & 0x08) == 0x08)
  396. {
  397. //Y+
  398. printf("Y2+\r\n");
  399. }
  400. if ((SL_SRC_Reg2 & 0x10) == 0x10)
  401. {
  402. //Z-
  403. printf("Z2-\r\n");
  404. }
  405. if ((SL_SRC_Reg2 & 0x20) == 0x20)
  406. {
  407. //Z+
  408. printf("Z2+\r\n");
  409. }
  410. // }
  411. }
  412. void SL_SC7A20_Reg_read_all(void)
  413. {
  414. UINT8 SL_Read_Reg;
  415. printf("SL_SC7A20_Reg_readall ++++++++\r\n");
  416. /*******************AOI1 IN INT1********************/
  417. UINT8 adr;
  418. for (adr = 0x20; adr <= 0x3F; adr++)
  419. {
  420. GSENSOR_ReadReg(adr, 1, &SL_Read_Reg);
  421. printf("%#x = %#x, ", adr, SL_Read_Reg);
  422. }
  423. printf("SL_SC7A20_Reg_readall --------\r\n");
  424. }
  425. /***************���ݸ�������**���ٶȼ�ʹ��**********/
  426. INT8 SL_SC7A20_Power_Config(UINT8 Power_Config_Reg)
  427. {
  428. UINT8 SL_Read_Reg;
  429. #if SL_SC7A20_MTP_ENABLE == 1
  430. SL_Read_Reg = 0x00;
  431. GSENSOR_WriteReg(SL_SC7A20_MTP_CFG, SL_SC7A20_MTP_VALUE);
  432. GSENSOR_ReadReg(SL_SC7A20_SDOI2C_PU_CFG, 1, &SL_Read_Reg);
  433. SL_Read_Reg = SL_Read_Reg | SL_SC7A20_SDO_PU_MSK | SL_SC7A20_I2C_PU_MSK;
  434. GSENSOR_WriteReg(SL_SC7A20_SDOI2C_PU_CFG, SL_Read_Reg);
  435. GSENSOR_WriteReg(SL_SC7A20_MTP_CFG, 0);
  436. #endif
  437. SL_Read_Reg = 0xff;
  438. GSENSOR_WriteReg(SL_SC7A20_CTRL_REG1, Power_Config_Reg);
  439. GSENSOR_ReadReg(SL_SC7A20_CTRL_REG1, 1, &SL_Read_Reg);
  440. if (SL_Read_Reg == Power_Config_Reg)
  441. {
  442. return 1;
  443. }
  444. else
  445. {
  446. return -1;
  447. }
  448. }
  449. #if SL_SC7A20_16BIT_8BIT == 0
  450. /***************���ٶȼ����ݶ�ȡ*8bits*********/
  451. INT8 SL_SC7A20_Read_XYZ_Data(INT8 *SL_SC7A20_Data_XYZ_Buf)
  452. {
  453. UINT8 SL_Read_Buf[7];
  454. GSENSOR_ReadReg(SL_SC7A20_STATUS_REG, 1, &SL_Read_Buf[0]);
  455. if ((SL_Read_Buf[0] & 0x0f) == 0x0f)
  456. {
  457. GSENSOR_ReadReg(SL_SC7A20_DATA_OUT, 6, &SL_Read_Buf[1]);
  458. SL_SC7A20_Data_XYZ_Buf[0] = (INT8)SL_Read_Buf[2];
  459. SL_SC7A20_Data_XYZ_Buf[1] = (INT8)SL_Read_Buf[4];
  460. SL_SC7A20_Data_XYZ_Buf[2] = (INT8)SL_Read_Buf[6];
  461. return 1;
  462. }
  463. else
  464. {
  465. return 0;
  466. }
  467. }
  468. #elif SL_SC7A20_16BIT_8BIT == 1
  469. /***************���ٶȼ����ݶ�ȡ*16bits*********/
  470. INT8 SL_SC7A20_Read_XYZ_Data(INT16 *SL_SC7A20_Data_XYZ_Buf)
  471. {
  472. UINT8 SL_Read_Buf[7];
  473. GSENSOR_ReadReg(SL_SC7A20_STATUS_REG, 1, &SL_Read_Buf[0]);
  474. if ((SL_Read_Buf[0] & 0x0f) == 0x0f)
  475. {
  476. for (UINT8 i = 1; i < 7; i++)
  477. {
  478. GSENSOR_ReadReg(SL_SC7A20_STATUS_REG + i, 1, &SL_Read_Buf[i]);
  479. }
  480. SL_SC7A20_Data_XYZ_Buf[0] = (INT16)((SL_Read_Buf[2] << 8) + SL_Read_Buf[1]);
  481. SL_SC7A20_Data_XYZ_Buf[1] = (INT16)((SL_Read_Buf[4] << 8) + SL_Read_Buf[3]);
  482. SL_SC7A20_Data_XYZ_Buf[2] = (INT16)((SL_Read_Buf[6] << 8) + SL_Read_Buf[5]);
  483. SL_SC7A20_Data_XYZ_Buf[0] = SL_SC7A20_Data_XYZ_Buf[0] >> 4;
  484. SL_SC7A20_Data_XYZ_Buf[1] = SL_SC7A20_Data_XYZ_Buf[1] >> 4;
  485. SL_SC7A20_Data_XYZ_Buf[2] = SL_SC7A20_Data_XYZ_Buf[2] >> 4;
  486. SL_SC7A20_Data_XYZ_Buf[0] = SL_SC7A20_Data_XYZ_Buf[0] * 2;
  487. SL_SC7A20_Data_XYZ_Buf[1] = SL_SC7A20_Data_XYZ_Buf[1] * 2;
  488. SL_SC7A20_Data_XYZ_Buf[2] = SL_SC7A20_Data_XYZ_Buf[2] * 2;
  489. return 1;
  490. }
  491. else
  492. {
  493. return 0;
  494. }
  495. }
  496. #endif
  497. void GsensorInit(void)
  498. {
  499. INT8 res = 0;
  500. res = SL_SC7A20_Online_Test();
  501. if (res == 1)
  502. {
  503. SL_SC7A20_BOOT();
  504. SL_SC7A20_FS_Config(SL_SC7A20_FS_4G);
  505. SL_SC7A20_INT_Config();
  506. //SL_SC7A20_INT_RESET();
  507. SL_SC7A20_Power_Config(SL_SC7A20_ODR_400HZ);
  508. }
  509. }
  510. #endif