湖南人文科技学院毕业论文(设计)
}
附 录2
unsignedeharMf5OOCaseAniieoll(unsigned char selectcode,unsigned char bcnt unsigned char*snr)
{
Unsigned char complete; Unsigned char status; complete=0; status=MI_OK;
while((complete=0)&&(status=MI_OK)) {
nBytesReceived=0;
/*禁止RxCRC和TxCRC,校验使能*/ regwrite(RegChannelRedundancy,ox03): nbits=bent%8;//位个数 if(nbits) {
regwrite(RegBitFraming,nbits<<4nbits); nbytes=ben/8+1://字节个数 } else
nbytes=bcnt/8; for(i=0;i NVB=0x20+(bcnt/8)<<4)+nbits;//要发送的字节数 regwrite(ReglntemiptEn,ox7F;//禁止所有中断 regwrite(ReglntemipRq,ox7F);//复位request中断 regwrite(Regcommand,PCD IDLE);//中止可能正在运行的程序 regwrite(RegControl,regread(Regcontrol)}ox0l);//清空FIFO regwrite(RegFIFOData,ox93);//写入SEL命令代码 regwrite(RegFIFOData,NVB);//写入NVB命令代码 for(i=0:i regwrite(RegInterruptEn,ox84);//TimerIRq和IdleIRq使能 regwrite(RegCommand,pcD_CRANscEIVE)://命令开始执行 mrc500_cnt==0x00; while((!(regreed(RegPrimaryStatus)&ox08))&&(mre500secnt<200)) mre500escnt+=1;//超时或命令结束判断 if(mrc500_cnt>=200)//超时时的处理 { regwrite(RegCommand,PCD_DLE);//中止程序 status=MI_ACCESSTIMEOUT: return status; } 36 湖南人文科技学院毕业论文(设计) status=regread(RegErrorFlag)&ox07;//读取错误标志 //错误判断 if(status) { If(status&oxol) status=MI_COLERR;//判断为冲突检测错误 if(status&ox02) status=MI_PARITYERR;//判断为校验错误 if(status&0x04) status=MI_FRAMINGERR;//判断为帧错误 nBytesReceived=regread(RegFIFOLength)://读取数据长度 for (i=0:i coll_data[i]=regread(RegFIFOData); if(regread(RegFIFOLength)>=ox04)//判断接收的数据长度是否正确 {for(status=0:status<4;status++) snr_nr[status]=regread(RegFIFOData); status=MI_OK; } ?? if(status=MI_OK) { memcpy(snr,snr_in,4);//保存snr ?? } else memcpy(snr,”0000”,4); /*冲突禁止后置0*/ regwrite(RegDecderControl,regread(RegDecoderControl)&(}ox20)); regwrite(RegCommand,PCDwe IDLE)://中止程序 retomStatus; } 附 录3 Unsigned char Mf500CaseSelect(unsigned char select code,unsigned char*snr,unsigned char*sak) {?? regwdte(RegInterruptEn,ox7F)://禁止所有中断 regwrite(RegInterruptRq,ox7F)://复位request中断 regwrite(RegCommand,PCD_DLE);//中止可能正在运行的其它程序 regwrite(RegControl,regread(RegControl)|oxol);//清空FIFO regwrite(RegFIFOData,ox93);//写入SEL命令代码 regwrite(RegFIFOData,ox70);//写入NVB命令代码 for(satus=0;status<4;status++) regwrite(RegFIFOData,snr[status]);//写snr到FIFO 37 湖南人文科技学院毕业论文(设计) status=snr[0]^snr[l]^snr[2]^snr[3];//计算BCC regwrite(RegFIFOData,status);//将BCC写入FIFO regwrite(ReglnterruptEn,oxA4)://使能TimerIRq和IdleIRq regwrite(RegCommand,PCD TRANSCEIVE);//命令开始执行 mrc500_cnt=0x00: while((!(regread(RegPrimaryStatus)&0x08))&&(mre500_cnt<100)) mrc500_cnt+=l;//超时或命令结束判断 if(mrc 500_cnt>=100)//超时时的处理 { regwrite(RegCommand,PEDIDLE)://超时时中止程序 status=MI_ACCESSTIMEOUT;//置超时标志 return status; } status=regread(RegErrorFlag)&ox07;//未超时时读取错误标志 if (status) { if(status&oxol) status“MI_COLLERR;//判断为冲突检测错误 if(status&0x02) status=MI_PARITYERR;//判断为校验错误 if(status&0x04) status=MI_FRAMINGERR;//判断为帧错误 }else If (regread(RegFIFOLength)==oxol) {//判断接收数据长度是否正确 if(regread(RegFIFOData)&0x04) status=MI_SAKERR;//判断为SAK错误 else status=MI_OK: }else status=MI BITCOUNTERR;//数据长度不符合则为计数错误 regwrite(RegCommand,PCD_IDLE)://程序终止 return status; } 附 录4 unsignedeharMf500Read(unsigned char block_add,unsigned char value[]) { restart_Watch_Dog;//复位看门狗 regwrite(RegInterruptEn,ox7F);//禁止所有中断 regwrite(RegInterruptRq,ox7F)://复位request中断 rewrite(Regcommand,PCDweIDLE)://中止可能正在运行的其它程序 regwrite(RegControl,regread(RegControl)!ox0l);//清空FIFO regwrite(RegFIFOData,PICCee_READ)://写入read命令 regwrite(RegFIFOData,block_add);//写入block_add参数 regwrite(RegInterruptEn,ox84)://使能IdleIRq中断 38 湖南人文科技学院毕业论文(设计) regwrite(RegCommand,PCD_TRANSCEIVE)://写入命令代码 mrc500_cnt=0; while((!(regread(RegPrimaryStatus)&ox08))&&(mrc500_cnt<200)) mrc500_cnt+=l;//超时或命令结束判断 if(mrc500_cnt>=200) { regwrite(RegCommand,PCD IDLE)://超时时的处理 status=MI_CCESSTIMEOUT; return status; } status=regread(RegErrorFlag)&ox0e;//读取错误标志 if(status) { if(status&ox02) status=MI_ACCESSTYERR;//判断为校验错误 if(status&ox04) status=MI_FRAMINGERR;//判断为帧错误 if(status&ox08) status=MI_CRCERR;//判断为CRC错误 } else { if(regread(RegFIFOLength)==ox10)//判断所接收到的数据长度是否正确州数据长度正确时的处理 for(status=0;status<16;status++) value[status]=regread(RegFIFOData);//读取一个扇区中的1个数据块 statu=MI_OK; } else status=MI_BITCOUNTERR;//置数据长度出错标志 } regwrite(RegCommand,PCD_IDLE)://程序终止 return status; } 39