本项目提供基于TRF7970A芯片实现ISO14443A标准卡模拟功能的代码。适合进行Mifare通讯、门禁系统和移动支付等应用开发研究。
```c
NFC_state_t NFCTarget_statemachine(void)
{
switch (NFC_State) {
case POWER_OFF_STATE:
Trf797xInitialSettings();
NFC_State = SENSE_STATE;
break;
case SENSE_STATE:
CLEAR_DEBUG_PIN_1;
CLEAR_DEBUG_PIN_2;
NFC_State = SENSE_STATE;
u8InterruptFlags = INT_BUSY;
do {
Radio_Wait_IRQ();
} while (u8InterruptFlags != INT_RX_COMPLETE && NFC_State == SENSE_STATE);
if (u8InterruptFlags == INT_RX_COMPLETE) {
NFC_State = EMULATION_STATE;
}
else if (NFC_State != EMULATION_STATE)
{
break;
}
case EMULATION_STATE:
SET_DEBUG_PIN_1;
// Now wait until the part is selected
// restart the pointer and wait for a message
do {
if ((u8InterruptFlags & (INT_RX_COMPLETE | INT_CRITICAL_ERROR | INT_COMM_ERROR))
== INT_RX_COMPLETE)
{
NFC_ProcessReceivedData(&buf[0]); // Check if the message was an ATR_REQ
}
else if ((u8InterruptFlags & INT_CRITICAL_ERROR))
{
NFC_State = POWER_OFF_STATE; // Timeout Error
do {
Wait for RX Complete interrupt;
Radio_Wait_IRQ();
} while (u8InterruptFlags != INT_RX_COMPLETE && (NFC_State == EMULATION_STATE));
}
} while (NFC_State == EMULATION_STATE);
__no_operation();
break;
}
return NFC_State;
}
```
请注意,代码中的注释部分“// Now wait until the part is selected”和“// restart the pointer and wait for a message”是原文中保留的说明性文本,并非实际执行语句。此外,在EMULATION_STATE段落中有两条未完成的操作描述:“Wait for RX Complete interrupt”,这是根据原始代码中的注释翻译而来,可能需要进一步具体化或移除以保持清晰度。