/**************************************
函数名称:*CPUCardRst
函数功能:CPU卡复位
入口参数:无
出口参数:复位数据
描述:复位过程:先加VCC,200个时钟周期内加CLK,之后,SDA应在CLK加上后的
200个时钟周期内被置于接收状态,CLK加上后,保持RST为低至少400个时
钟周期,之后卡复位RST被置为高,SDA上的应答应在RST信号上升沿后
400-40000个时钟周期内开始,RST为高后,等待400个时钟周期开始接收
应答信号
复位后,卡上反馈13个字节,可以取出这13个字节,但暂时不用这些数据
ErrorResetBIT|iErrorRWrCard:复位不正常
**************************************/
unsigned char *CPUCardRst(void)
{
unsigned int itemp;
unsigned char cResetBuf[13]={0};
unsigned char *pcResetBuf;
//复位错标志清0
iErrorRWrCard=~ErrorResetBIT&iErrorRWrCard;
//卡上电时序
CardPowerUp();
for(itemp=0;itemp<13;itemp++)
{
cResetBuf[itemp]=CardReceChar();
if(ErrorReadWriteBIT&iErrorRWrCard) break;
}
if(ErrorReadWriteBIT&iErrorRWrCard)
{
iErrorRWrCard=ErrorResetBIT|iErrorRWrCard;
iErrorRWrCard=~ErrorReadWriteBIT&iErrorRWrCard;
goto CPUCardRstEnd;
}
delay_ms2M(10);
CPUCardRstEnd:
pcResetBuf=&cResetBuf[5];
return pcResetBuf;
}
/**************************************
函数名称:*EsamRst
函数功能:Esam复位
入口参数:无
出口参数:复位数据
描述:
Esam复位时序跟卡复位时序一样
ErrorResetBIT|iErrorRWrCard:复位不正常
**************************************/
unsigned char *EsamRst(void)
{
unsigned int itemp;
unsigned char cResetBuf[13]={0};
unsigned char *pcResetBuf;
iErrorRWrCard=~ErrorResetBIT&iErrorRWrCard;
EsamPowerUp();
for(itemp=0;itemp<13;itemp++)
{
cResetBuf[itemp]=EsamReceChar();
if(ErrorReadWriteBIT&iErrorRWrCard) break;
}
if(ErrorReadWriteBIT&iErrorRWrCard)
{
iErrorRWrCard=ErrorResetBIT|iErrorRWrCard;
iErrorRWrCard=~ErrorReadWriteBIT&iErrorRWrCard;
goto EsamRstEnd;
}
delay_ms2M(10);
icflag1=~ICSAM&icflag1;
if(cCheckOrRe&icflag1) goto EsamRstEnd;
EsamRstEnd:
pcResetBuf=&cResetBuf[5];
return pcResetBuf;
}