求指点--我读出来RFID-RC522寄存器值为“0”
本帖最后由 and001 于 2014-4-24 15:38 编辑最近调试一个RFID软件:发现一个问题---就是读出来的值是“0”
我明明是将某个位已经置“1”了可是读出来还是“0”
为了简洁列出 主要函数
主要函数如下:
//初始化函数:
void MC522_Initial(void)
{
PcdReset();
PcdAntennaOff();
Delay_us(10000);
PcdAntennaOn();
Delay_us(10000);
M500PcdConfigISOType( 'A' );
}
/////////////////////////////////////////////////////////////////////
//复位RC522
//成功返回: MI_OK
/////////////////////////////////////////////////////////////////////
char PcdReset(void)
{
MF522_RST_H()
__NOP;
Delay_us(1);
MF522_RST_L()
__NOP;
Delay_us(1); MF522_RST_H()
__NOP;
Delay_us(1);
WriteRawRC(CommandReg,PCD_RESETPHASE); __NOP;
WriteRawRC(ModeReg,0x3D);
WriteRawRC(TReloadRegL,30);
WriteRawRC(TReloadRegH,0);
WriteRawRC(TModeReg,0x8D);
WriteRawRC(TPrescalerReg,0x3E);
WriteRawRC(TxAutoReg,0x40);
return MI_OK;
}
/////////////////////////////////////////////////////////////////////
//开启天线
//每次开启天线或者关闭天线时间间隔大于1mS
/////////////////////////////////////////////////////////////////////
void PcdAntennaOn()
{
unsigned char i;
i = ReadRawRC(TxControlReg);
printf("\n 先确认txcontrolreg= %d. \r\n", i );
if (!(i & 0x03))
{
SetBitMask(TxControlReg, 0x03);
i = ReadRawRC(TxControlReg);//add by chen jian
printf("\n 再读出txcontrolreg= %d: \r\n", i );
//问题点:刚写进去第三位为“1”,可是读出来还是“0”
}
}
/////////////////////////////////////////////////////////////////////
//读RC632寄存器的值
//返回读出值
/////////////////////////////////////////////////////////////////////
unsigned char ReadRawRC(unsigned char Address)
{
unsigned char i, ucAddr;
unsigned char ucResult=0;
MF522_SCK_L()
MF522_NSS_L()
Delay_us(1);//add by chen ji an
ucAddr = Address|0x80; // ucAddr = ((Address<<1)&0x7E)|0x80;//我自己修改部分,其实后面是没有改的语句也是不行
//特别说明下:我是认为第一个地址左移一次后值改变了,好像有点矛盾,所有自己改了下同时也满足读的时候第一个字节高位为“1”
for(i=8;i>0;i--)
{
// MF522_SI = ((ucAddr&0x80)==0x80);// 从51移植过来的,现在MCU是STM32
if ((ucAddr&0x80)==0x80)
MF522_SI_H()
else
MF522_SI_L()
MF522_SCK_H()
Delay_us(1);//add by chen ji an
ucAddr <<= 1;
MF522_SCK_L()
Delay_us(1);//add by chen ji an
}
for(i=8;i>0;i--)
{
MF522_SCK_H()
Delay_us(1);//add by chen ji an
ucResult <<= 1;
// ucResult|=MF522_SO; // ucResult|=(bit)MF522_SO; // 从51移植过来的,现在MCU是STM32
if( GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_8))ucResult|=0x01;
else ucResult&=~0x01;
MF522_SCK_L()
Delay_us(1);
}
MF522_NSS_H()
MF522_SCK_H()
return ucResult;
}
/////////////////////////////////////////////////////////////////////
//些RC632寄存器
//
/////////////////////////////////////////////////////////////////////
void WriteRawRC(unsigned char Address, unsigned char value)
{
unsigned char i, ucAddr;
MF522_SCK_L()
MF522_NSS_L()
Delay_us(1);//add by chen ji an
ucAddr = (Address&0x7F); // ucAddr = ((Address<<1)&0x7E);//我自己修改部分,其实后面是没有改的语句也是不行
//特别说明下:我是认为第一个地址左移一次后值改变了,好像有点矛盾,所有自己改了下同时也满足写的时候第一个字节高位为“0”
for(i=8;i>0;i--)
{
// MF522_SI = ((ucAddr&0x80)==0x80);// 从51移植过来的,现在MCU是STM32
if ((ucAddr&0x80)==0x80)
MF522_SI_H()
else
MF522_SI_L()
MF522_SCK_H()
Delay_us(1);//add by chen ji an
ucAddr <<= 1;
MF522_SCK_L()
Delay_us(1);//add by chen ji an
}
for(i=8;i>0;i--)
{
// MF522_SI = ((value&0x80)==0x80);// 从51移植过来的,现在MCU是STM32
if ((value&0x80)==0x80)
MF522_SI_H()
else
MF522_SI_L()
MF522_SCK_H()
Delay_us(1);//add by chen ji an
value <<= 1;
MF522_SCK_L()
Delay_us(1);//add by chen ji an
}
MF522_NSS_H()
MF522_SCK_H()
}
请有做过这个的高人帮忙指点!求救。。。
自己发现的问题并且解决了!
是自己定义的GPIO弄错了脚号,所有读出来的全是“0”,自己的粗心!见笑了!
如果有出现同样的问题,可以和我一起学习!
谢谢大家! 感觉读写不成功
页:
[1]