sensor.c 19 KB

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