|
我最近在玩TI的TRF7960,读到卡的UID了,但是看了看文档,读块写块说的简单,我直接把代码写过去,读取中断状态不太对。
我还看了看文档说的也很简单。想问问论坛里面有没有谁也玩过这个的。
//*************************************************************************************************
// 功能描述 : 获取单块数据,无地址的读
// 输入参数 : 起始块
// 返回参数 : 无
// 说 明 :
//*************************************************************************************************
void ReadSingleBlock(unsigned char Block)
{
unsigned char command, found = 0;
unsigned int size; // 请求命令数据帧大小
//unsigned char cBuf[20]; // 时隙总数,默认1 时隙(NoSlots = 时隙数 + 1)
size=3;
cBuf[0] = 0x8f; // Reset FIFO command
cBuf[1] = 0x91; // send with CRC
cBuf[2] = 0x3d; // write continuous from register 1D
cBuf[3] = (char)(size>>8);// Data for register 1D, data length
cBuf[4] = (char)(size<<4);// Data for register 1E
cBuf[5] = 0x00;// ISO15693 flag with Option flag set
cBuf[6] = 0x20; // Read mul Blocks command code
cBuf[7] = Block; // First Block Number
RAWwrite(&cBuf[0], 8); // 写 FIFO
CounterSet(); // TimerA设置
countValue = count1ms * 10; // 20ms
i_reg = 0x01; // 当前状态为RX状态
startCounter; //开启时钟A,增计数模式
irqCLR; // 清除已经存在的IRQ中断标志
irqON;
LPM0; //等待发送完成
RXTXstate = 1; // 接收数据保存从buf[1]开始
while(i_reg == 0x01)
{
}
i_reg = 0x01;
CounterSet();
countValue = 0x2000; /* 10ms for TIMEOUT */
//startCounter; /* start timer up mode */
while(i_reg == 0x01)
{
}
if(i_reg == 0xFF)
{ //接收到 UID
found = 1;
}
command = Reset; // FIFO 在下个时隙前必须复位
DirectCommand(&command);
if(found)
{
LED15693ON;
for(char i = 0;i <4;i++) //提取接收缓存中的数据
{
Data = buf[5-i];
}
}
else
{
LED15693OFF;
for(char i = 0;i < 8;i++)
{
Data = 0x01;
}
}
irqOFF;
} |
|