lpcd.h 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135
  1. #ifndef __LPCD_H__
  2. #define __LPCD_H__
  3. #ifdef __cplusplus
  4. extern "C" {
  5. #endif
  6. /******************************************************************************/
  7. /* Include files */
  8. /******************************************************************************/
  9. #include <stdio.h>
  10. #include <stdlib.h>
  11. #include <string.h>
  12. #include <stdbool.h>
  13. #include <string.h>
  14. #include <stdint.h>
  15. #define LPCD_TIMER1_CFG 1 //LPCD休眠阶段时间设置
  16. //0=0秒;1=300毫秒;2=400毫秒;3=500毫秒;4=600毫秒;5=700毫秒;6=800毫秒;7=900毫秒;
  17. //8=1秒;9=1.1秒;10=1.2秒;11=1.3秒;12=1.4秒;13=1.5秒;14=1.6秒;15=1.7秒;
  18. #define LPCD_TIMER2_CFG 13//13 //LPCD准备阶段时间设置
  19. //0=0ms;1=0ms;2=0.4ms;3=0.5ms;4=0.6ms;5=0.7ms;6=0.8ms;7=0.9ms;8=1.0ms;
  20. //9=1.1ms;10=1.2ms;11=1.3ms;12=1.4ms;13=1.5ms;14=1.6ms;15=1.7ms;16=1.8ms;
  21. //17=1.9ms;18=2.0ms;19=2.1ms;20=2.2ms;21=2.3ms;22=2.4ms;23=2.5ms;24=2.6ms;
  22. //25=2.7ms;26=2.8ms;27=2.9ms;28=3.0ms;29=3.1ms;30=3.2ms;31=3.3ms;
  23. #define LPCD_TIMER3_CFG 4//4 //LPCD检测阶段时间设置
  24. //0=0us;1=0us;2=4.7us;3=9.4us;4=14.1us;5=18.8us;6=23.5us;7=28.2us;8=32.9us;
  25. //9=37.6us;10=42.3us;11=47us;12=51.7us;13=56.8us;14=61.1us;15=65.8us;16=70.5us;
  26. //17=75.2us;18=79.9us;19=84.6us;20=89.3us;21=94us;22=98.7us;23=103.4us;24=108.1us;
  27. //25=112.8us;26=117.5us;27=122.2us;28=126.9us;29=131.6us;30=136.3us;31=141us;
  28. #define LPCD_TIMER_VMID_CFG 3 //VMID准备时间设置
  29. //0=0ms;1=0ms;2=0.4ms;3=0.5ms;4=0.6ms;5=0.7ms;6=0.8ms;7=0.9ms;8=1.0ms;
  30. //9=1.1ms;10=1.2ms;11=1.3ms;12=1.4ms;13=1.5ms;14=1.6ms;15=1.7ms;16=1.8ms;
  31. //17=1.9ms;18=2.0ms;19=2.1ms;20=2.2ms;21=2.3ms;22=2.4ms;23=2.5ms;24=2.6ms;
  32. //25=2.7ms;26=2.8ms;27=2.9ms;28=3.0ms;29=3.1ms;30=3.2ms;31=3.3ms;
  33. #define LPCD_TX2RF_EN 1 //LPCD功能TX2发射输出使能
  34. //0=Disable;1=Enable
  35. #define LPCD_AUTO_DETECT_TIMES 1 //LPCD检测次数设置
  36. //0 = 3次;1 = 1次
  37. #define LPCD_AUTO_WUP_EN 0 //自动校准使能
  38. //0=Disable;1=Enable
  39. #define LPCD_AUTO_WUP_CFG 3 //自动校准时间设置
  40. //0=6秒;1=12秒;2=15分钟;3=30分钟;4=1小时;5=1.8小时;6==3.6小时;7=7.2小时
  41. #define LPCD_AUX_EN 0 //AUX通道使能
  42. //0=Disbale;1=Enable
  43. #define LPCD_BIAS_CURRENT 3//3 //偏置电流
  44. //0=50nA;1=100nA;2=150nA;3=200nA;4=250nA;5=300nA;6=350nA;7=400nA;
  45. #define LPCD_REFERENCE 6 //0x00~0x7F
  46. #define LPCD_THRESHOLD 4 //4 //LPCD检测灵敏度设置
  47. #define LPCD_DELTA 8 //LPCD检测线性度
  48. #define LPCD_CALIBRA_IRQ_TIMEOUT 255 //LPCD校准中断超时设置 1~255us
  49. #define LPCD_GAIN_INDEX 3
  50. #define LPCD_MODE 0 //LPCD模式
  51. //0=模式0;1=模式1;2=模式2
  52. static const uint8_t LPCD_GAIN[11] = {0x00,0x02,0x01,0x03,0x07,0x0B,0x0F,0x13,0x17,0x1B,0x1F};
  53. //0.4x 0.5x 0.6x 1.0x 1.2x 1.4x 2.0x 2.2x 2.6x 3.2x 4.0x
  54. static const uint8_t LPCD_P_DRIVER[7]={0x01,0x02,0x03,0x04,0x05,0x06,0x07};
  55. static const uint8_t LPCD_N_DRIVER[7]={0x01,0x04,0x06,0x08,0x0A,0x0C,0x0F};
  56. //0=180欧姆;1=90欧姆;2=46欧姆;3=23欧姆;4=12欧姆;5=6欧姆;6=3欧姆;7=1.5欧姆;
  57. //static const uint8_t LPCD_N_DRIVE[7]={0x01,0x02,0x03,0x04,0x05,0x06,0x07};
  58. //static const uint8_t LPCD_P_DRIVE[16]={0x00,0x00,0x01,0x01,0x02,0x02,0x03,0x03,0x04,0x04,0x05,0x05,0x06,0x06,0x07,0x07};
  59. //0=180欧姆;1=90欧姆;2=46欧姆;3=23欧姆;4=12欧姆;5=6欧姆;6=3欧姆;7=1.5欧姆;
  60. //static const uint8_t LPCD_N_DRIVE[16]={0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F};
  61. struct calibration_struct
  62. {
  63. uint8_t Reference;//基准电容
  64. uint8_t Value; //LPCD校准数值
  65. uint8_t Threshold_Max;//LPCD阈值
  66. uint8_t Threshold_Min;//LPCD阈值
  67. uint8_t Gain_Index;//LPCD校准Gain的序号
  68. uint8_t Driver_Index; //LPCD校准Drive的序号
  69. uint8_t Range_L;
  70. uint8_t Range_H;
  71. };
  72. struct calibration_backup_struct
  73. {
  74. uint8_t Reference;//基准电容
  75. uint8_t Gain_Index;//LPCD校准Gain的序号
  76. uint8_t Driver_Index; //LPCD校准Drive的序号
  77. };
  78. struct lpcd_struct
  79. {
  80. uint8_t Timer1;//T1休眠时间
  81. uint8_t Timer2;//T2启动时间
  82. uint8_t Timer3;//T3发射时间
  83. uint8_t Timer3_Div ;//T3分频系数
  84. uint8_t Timer3_Offset;
  85. uint8_t TimerVmid;//VMID启动时间
  86. uint8_t Fullscale_Value; //T3时间的满程数值
  87. uint8_t Value;
  88. uint8_t Irq;//LPCD中断
  89. struct calibration_struct Calibration;
  90. struct calibration_backup_struct Calibration_Backup;
  91. };
  92. extern struct lpcd_struct Lpcd;
  93. bool Lpcd_Init_Register(void);
  94. bool Lpcd_Set_Aux(uint8_t mode);
  95. bool Lpcd_Set_IE(uint8_t mode);
  96. bool Lpcd_Reset_Status(void);//LPCD功能复位
  97. void Lpcd_IRQ_Event(void);
  98. bool Lpcd_Calibration_Event(void);
  99. void Lpcd_Get_IRQ(uint8_t *irq);
  100. void Lpcd_Set_Mode(uint8_t mode);
  101. void Lpcd_Calibration_Backup(void);
  102. void Lpcd_Calibration_Restore(void);
  103. bool Lpcd_Get_Calibration_Value(uint8_t *value);
  104. bool Lpcd_Get_Value(uint8_t *value);
  105. bool TyteA_Read(uint8_t *picc_atqa, uint8_t *picc_uid);
  106. #ifdef __cplusplus
  107. }
  108. #endif
  109. #endif /* __LPCD_H__ */