Add portable NFC module
This commit is contained in:
227
nfc/vendor/dp1312ea/LPCD.c
vendored
Normal file
227
nfc/vendor/dp1312ea/LPCD.c
vendored
Normal file
@@ -0,0 +1,227 @@
|
||||
/***********************************************************************************************
|
||||
*LPCD<43><44><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>
|
||||
***********************************************************************************************/
|
||||
#include <stdio.h>
|
||||
#include "DP1312EA_Config.h"
|
||||
#include "DP1312EA.h"
|
||||
#include "LPCD.h"
|
||||
#include "nfc_platform.h"
|
||||
|
||||
|
||||
extern u8 Status_INT;
|
||||
|
||||
/***********************************************************************************************
|
||||
*дLPCD<43>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7>Ҫд<D2AA><D0B4>ֵ
|
||||
***********************************************************************************************/
|
||||
void write_Lpcd_reg(u8 reg,u8 value)
|
||||
{
|
||||
DP1312EA_WriteRawRC(0x37,0xa0);
|
||||
DP1312EA_WriteRawRC(0x0f,reg);
|
||||
DP1312EA_WriteRawRC(0x37,0xa1);
|
||||
DP1312EA_WriteRawRC(0x0f,value);
|
||||
}
|
||||
/***********************************************************************************************
|
||||
*<2A><>ȡLPCD<43>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD>ַ,<2C><><EFBFBD>ض<EFBFBD>ȡ<EFBFBD><C8A1>ֵ
|
||||
***********************************************************************************************/
|
||||
u8 read_Lpcd_reg(u8 reg)
|
||||
{
|
||||
u8 value;
|
||||
DP1312EA_WriteRawRC(0x37,0xa0);
|
||||
DP1312EA_WriteRawRC(0x0f,reg);
|
||||
DP1312EA_WriteRawRC(0x37,0xa1);
|
||||
value = DP1312EA_ReadRawRC(0x0f);
|
||||
return value;
|
||||
|
||||
}
|
||||
|
||||
/***********************************************************************************************
|
||||
*<2A><>ȡLPCD Iͨ<49><CDA8><EFBFBD>Ĵ<EFBFBD><C4B4><EFBFBD>ֵ
|
||||
***********************************************************************************************/
|
||||
u8 Read_I_Channel(void)
|
||||
{
|
||||
u8 i;
|
||||
DP1312EA_WriteRawRC(0x37,0xa0);
|
||||
DP1312EA_WriteRawRC(0x0f,0x05);
|
||||
DP1312EA_WriteRawRC(0x37,0xa1);
|
||||
i = DP1312EA_ReadRawRC(0x0f); //LPCD_RI
|
||||
return i;
|
||||
}
|
||||
/***********************************************************************************************
|
||||
*<2A><>ȡLPCD Qͨ<51><CDA8><EFBFBD>Ĵ<EFBFBD><C4B4><EFBFBD>ֵ
|
||||
***********************************************************************************************/
|
||||
u8 Read_Q_Channel(void)
|
||||
{
|
||||
u8 q;
|
||||
DP1312EA_WriteRawRC(0x37,0xa0);
|
||||
DP1312EA_WriteRawRC(0x0f,0x06);
|
||||
DP1312EA_WriteRawRC(0x37,0xa1);
|
||||
q = DP1312EA_ReadRawRC(0x0f); //LPCD_RQ
|
||||
return q;
|
||||
}
|
||||
|
||||
/***********************************************************************************************
|
||||
*<2A><><EFBFBD><EFBFBD>LPCD I/Qͨ<51><CDA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ
|
||||
***********************************************************************************************/
|
||||
void set_I_Q_threshold(u8 I_value,u8 Q_value)
|
||||
{
|
||||
u8 I_MIN,I_MAX;
|
||||
u8 Q_MIN,Q_MAX;
|
||||
if((I_value>=LPCD_Sensitive_Value)&&(Q_value>=LPCD_Sensitive_Value))
|
||||
{
|
||||
I_MIN = I_value - LPCD_Sensitive_Value;
|
||||
I_MAX = I_value + LPCD_Sensitive_Value;
|
||||
Q_MIN = Q_value - LPCD_Sensitive_Value;
|
||||
Q_MAX = Q_value + LPCD_Sensitive_Value;
|
||||
}
|
||||
else
|
||||
{
|
||||
I_MIN = 0x9c;
|
||||
I_MAX = 0x9c;
|
||||
Q_MIN = 0x7c;
|
||||
Q_MAX = 0x7c;
|
||||
}
|
||||
|
||||
write_Lpcd_reg(0x01,I_MAX);
|
||||
|
||||
write_Lpcd_reg(0x02,I_MIN);
|
||||
|
||||
write_Lpcd_reg(0x03,Q_MAX);
|
||||
|
||||
write_Lpcd_reg(0x04,Q_MIN);
|
||||
|
||||
}
|
||||
/***********************************************************************************************
|
||||
*<2A><>ֹLPCD<43><44><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ѻ<EFBFBD><D1BA><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD>и<EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD>оƬ<D0BE><C6AC><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>ǰ<EFBFBD>Ƚ<EFBFBD>ֹLPCD<43><44><EFBFBD><EFBFBD>
|
||||
***********************************************************************************************/
|
||||
void DP1312EA_LPCD_Stop(void)
|
||||
{
|
||||
DP1312EA_WriteRawRC(0x37,0xa0);
|
||||
DP1312EA_WriteRawRC(0x0f,0x00);
|
||||
DP1312EA_WriteRawRC(0x37,0xa1);
|
||||
DP1312EA_WriteRawRC(0x0f,0x00);
|
||||
}
|
||||
|
||||
/***********************************************************************************************
|
||||
*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>оƬLPCD<43>жϱ<D0B6>־λ
|
||||
***********************************************************************************************/
|
||||
void Clear_lpcd_irq(void)
|
||||
{
|
||||
DP1312EA_WriteRawRC(DivIrqReg,0x20); //<2F><><EFBFBD>жϱ<D0B6><CFB1><EFBFBD>
|
||||
}
|
||||
/**********************************************************************************************************
|
||||
*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƣ<EFBFBD>void DP1312EA_LPCD_Enter(u16 cycle,u16 duration )
|
||||
*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
<20><><EFBFBD>ò<EFBFBD><C3B2><EFBFBD><EFBFBD><EFBFBD>LPCDģʽ<C4A3><CABD><EFBFBD>в<EFBFBD><D0B2><EFBFBD>˳<EFBFBD><CBB3>Ҫ<EFBFBD><EFBFBD>Ҫ<EFBFBD>Ķ<EFBFBD><C4B6><EFBFBD><EFBFBD><EFBFBD>˳<EFBFBD><CBB3><EFBFBD><EFBFBD>
|
||||
*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
cycle<6C><65><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڣ<EFBFBD>16λ<36><CEBB>Ĭ<EFBFBD><C4AC>0x22ff<66><66>380ms<6D><73><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Լ10%<25><>
|
||||
duration<6F><6E><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>16λ<36><CEBB>Ĭ<EFBFBD><C4AC>0x001f<31><66>2.5us<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѡ0x003f=5us,0x007f=10us<75><73>
|
||||
*<2A><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD><EFBFBD><EFBFBD>
|
||||
<20><>
|
||||
*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
IRQ<52>жϣ<D0B6>1)<29><>ѡCMOS<4F><53><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>©<EFBFBD><C2A9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>©<EFBFBD><C2A9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>裻2)<29><>ѡ<EFBFBD>ߵ<EFBFBD>ƽ<EFBFBD>жϻ<D0B6><CFBB>͵<EFBFBD>ƽ<EFBFBD>жϣ<D0B6>
|
||||
|
||||
**********************************************************************************************************/
|
||||
void DP1312EA_LPCD_Enter(u16 cycle,u16 duration )
|
||||
{
|
||||
u8 i,q,n;
|
||||
|
||||
n = DP1312EA_ReadRawRC(0x0c);
|
||||
DP1312EA_WriteRawRC(0x0c, n|0x10);
|
||||
|
||||
//DP1312EA_WriteRawRC(0x28,0x02); //<2F>Ӳ<EFBFBD><D3B2><EFBFBD>Ч<EFBFBD><D0A7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
/*set IRQ int level*/
|
||||
#if (IRQ_LEVEL_SET == IRQ_HIGH_LEVEL)
|
||||
DP1312EA_WriteRawRC(ComIEnReg,0x00); //ComIEnReg<65><67>bit7 <20><>0<EFBFBD><30><EFBFBD>ߵ<EFBFBD>ƽ<EFBFBD>ж<EFBFBD>
|
||||
#else
|
||||
DP1312EA_WriteRawRC(ComIEnReg,0x80); //ComIEnReg<65><67>bit7 <20><>1<EFBFBD><31><EFBFBD>͵<EFBFBD>ƽ<EFBFBD>ж<EFBFBD>
|
||||
#endif
|
||||
|
||||
/*set IRQ Output Mode*/
|
||||
#if (IRQ_OUT_MODE == IRQ_OUT_PP)
|
||||
DP1312EA_WriteRawRC(DivlEnReg,0xE0); //bit7=1<><31><EFBFBD><EFBFBD>ΪCMOS<4F><53><EFBFBD><EFBFBD><EFBFBD><EFBFBD>bit5=1 LPCD<43>ж<EFBFBD>ʹ<EFBFBD><CAB9>
|
||||
#else
|
||||
DP1312EA_WriteRawRC(DivlEnReg,0x60); //bit7=0<><30><EFBFBD><EFBFBD>ΪOPEN DRAIN<49><4E><EFBFBD><EFBFBD><EFBFBD><EFBFBD>bit5=1 LPCD<43>ж<EFBFBD>ʹ<EFBFBD><CAB9>
|
||||
#endif
|
||||
|
||||
DP1312EA_WriteRawRC(DivIrqReg,0x7F); //<2F><><EFBFBD>жϱ<D0B6><CFB1><EFBFBD>
|
||||
|
||||
//<2F><><EFBFBD>ü<EFBFBD><C3BC><EFBFBD>ʱ<EFBFBD><CAB1>
|
||||
write_Lpcd_reg(0x08,(u8)(duration>>8)); //ʱ<><CAB1><EFBFBD><EFBFBD>λ<EFBFBD>Ĵ<EFBFBD><C4B4><EFBFBD>
|
||||
write_Lpcd_reg(0x09,(u8)duration); //ʱ<><CAB1><EFBFBD><EFBFBD>λ<EFBFBD>Ĵ<EFBFBD><C4B4><EFBFBD>
|
||||
|
||||
//<2F><><EFBFBD>ü<EFBFBD><C3BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
write_Lpcd_reg(0x0a,0x00); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڸ<EFBFBD>λ<EFBFBD>Ĵ<EFBFBD><C4B4><EFBFBD>
|
||||
write_Lpcd_reg(0x0b,0xff); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڵ<EFBFBD>λ<EFBFBD>Ĵ<EFBFBD><C4B4><EFBFBD>
|
||||
|
||||
//<><D7BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>1
|
||||
write_Lpcd_reg(0x01,0xf0); //LPCD<43><44><EFBFBD><EFBFBD><EFBFBD>Ĵ<EFBFBD><C4B4><EFBFBD>
|
||||
write_Lpcd_reg(0x02,0x00);
|
||||
write_Lpcd_reg(0x03,0xf0); //LPCD<43><44><EFBFBD><EFBFBD><EFBFBD>Ĵ<EFBFBD><C4B4><EFBFBD>
|
||||
write_Lpcd_reg(0x04,0x00);
|
||||
|
||||
//ʹ<><CAB9>LPCD<43><44><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD>ֿ<EFBFBD>
|
||||
write_Lpcd_reg(0x00,0x50); //enable LPCD
|
||||
|
||||
//<2F><><EFBFBD><EFBFBD>LPCD
|
||||
write_Lpcd_reg(0x00,0xd0); //start LPCD
|
||||
|
||||
//<2F><>ȡ<EFBFBD><C8A1><EFBFBD>ƼĴ<C6BC><C4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>DZ<EFBFBD><C7B1><EFBFBD><EFBFBD>ģ<EFBFBD>Ϊ<EFBFBD>˹۲<CBB9>
|
||||
n=read_Lpcd_reg(0x00);
|
||||
|
||||
#ifdef UART_DEBUG
|
||||
nfc_platform_log("lpcd_00reg = %02x \n",n);
|
||||
#endif
|
||||
nfc_platform_sleep_ms(5);
|
||||
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD>ز<EFBFBD><D8B2><EFBFBD><EFBFBD>ȴ<EFBFBD>һ<EFBFBD><D2BB>У<D0A3><D7BC><EFBFBD><EFBFBD>
|
||||
DP1312EA_WriteRawRC(TxControlReg,0x83);
|
||||
nfc_platform_sleep_ms(20);
|
||||
|
||||
//<2F><>ȡI/Qֵ
|
||||
i = Read_I_Channel();
|
||||
q = Read_Q_Channel();
|
||||
|
||||
#ifdef UART_DEBUG
|
||||
nfc_platform_log("lpcd_: I:%02X ,Q:%02X\n",i,q);
|
||||
#endif
|
||||
//<2F><><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD>ֵ
|
||||
set_I_Q_threshold(i,q);
|
||||
|
||||
//<2F>趨<EFBFBD><E8B6A8><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>
|
||||
write_Lpcd_reg(0x08,(u8)(duration>>8)); //ʱ<><CAB1><EFBFBD><EFBFBD>λ<EFBFBD>Ĵ<EFBFBD><C4B4><EFBFBD>
|
||||
write_Lpcd_reg(0x09,(u8)duration); //ʱ<><CAB1><EFBFBD><EFBFBD>λ<EFBFBD>Ĵ<EFBFBD><C4B4><EFBFBD>
|
||||
|
||||
//<2F>趨<EFBFBD><E8B6A8><EFBFBD>ռ<EFBFBD><D5BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
write_Lpcd_reg(0x0a,(u8)(cycle>>8));
|
||||
write_Lpcd_reg(0x0b,(u8)(cycle));
|
||||
|
||||
DP1312EA_WriteRawRC(DivIrqReg,0x7F); //<2F><><EFBFBD>жϱ<D0B6><CFB1><EFBFBD>
|
||||
|
||||
}
|
||||
|
||||
|
||||
/***********************************************************************************************
|
||||
*<2A>ȴ<EFBFBD><C8B4><EFBFBD><EFBFBD>ж<EFBFBD>
|
||||
***********************************************************************************************/
|
||||
u8 DP1312EA_CLEAR_IRQ(void)
|
||||
{
|
||||
Clear_lpcd_irq();
|
||||
return MI_OK;
|
||||
}
|
||||
|
||||
/***********************************************************************************************
|
||||
*<2A><><EFBFBD><EFBFBD>LPCD<43><44><EFBFBD>ȴ<EFBFBD><C8B4>ж<EFBFBD>
|
||||
***********************************************************************************************/
|
||||
void DP1312EA_LPCD_Start(void)
|
||||
{
|
||||
DP1312EA_Reset();
|
||||
nfc_platform_sleep_ms(5);
|
||||
DP1312EA_LPCD_Enter(LPCD_Cycle_Time,LPCD_Duration_Time);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
/**************************************************END*****************************************/
|
||||
|
||||
Reference in New Issue
Block a user