/******************************************************************************************文件名称:MSReader.c摘要:此文件主要是针对magtek21006541磁条读卡芯片的驱动解码程序,读数据时工作在NewMode,初始版本在数据处理时没有对所读到的数据进行校验,同时在判断正向还是反向刷卡操作时,可能存在bug,移植时,需要注意10ms定时,需要加到工程定时中断中if(MSR_Tmr_count10ms){MSR_Tmr_count10ms--;}当前版本:1.0作者:完成日期:2011-3-30取代版本:原作者:完成日期:*********************************************************************************************//*磁条卡简介:分3个磁道,第一磁道可以存储79个字符,其中开始字符为%,结束字符为?,最后字节为LRC,第二,第三磁道分别40个和107个字符,开始字符为;,结束字符为?,最后字节为LRC,详细信息请参阅磁条信息格式和使用规范*///具体移植时请更改路径#include./System/GPL162002.h#include./System/MSReader.h.h#includestring.hstaticUINT8MSR_CardDataAcquisitionState;//状态机标志staticUINT8ryubCardMsg[MSR_ASIC_PREAMBLE_AND_ALL_3_TKACKS_LEN_IN_BYTES];//保存原始数据staticUINT8decodeCardMsg[MSR_CDAS_MAX_CHAR];//保存解码后数据staticUINT8MSR_in=0,MSR_out=0;//解码数据指针intMSR_fCardDataReady=FALSE;intMSR_Tmr_count10ms=0;intMSR_decodeReady=0;/******************************************************************************************函数功能:250ns延时,不准确,但必须保证延时大于250ns主要思路:入口参数:无出口参数:无全局变量:无静态变量:无日期:创建:2011-3-30修改:********************************************************************************************/voidTMR_v250nsDelay(){UINT16i=0;for(i=0;i1;i++){//NOP();}}/******************************************************************************************函数功能:us延时函数。主要思路:入口参数:延时us数出口参数:无全局变量:无静态变量:无日期:创建:2011-3-30修改:********************************************************************************************/voidTMR_vDelayus(UINT16Num){UINT16i=0;while(Num){for(i=0;i1;i++){//NOP();}Num--;}}/******************************************************************************************函数功能:ms延时函数主要思路:入口参数:延时数出口参数:无全局变量:无静态变量:无日期:创建:2011-3-30修改:********************************************************************************************/voidTMR_vDelayms(UINT16Num){while(Num){TMR_vDelayus(1);Num--;}}/******************************************************************************************函数功能:解码芯片复位操作主要思路:入口参数:出口参数:全局变量:静态变量:日期:创建:2011-3-30修改:********************************************************************************************/voidMSR_vReset(void){/*needaminimumof250ns(TstbL)delayhere*/TMR_v250nsDelay();IO_set_MagStrobeHigh();/*needaminimumof170ns(Tsu1_rst)delayhere*/*P_IOC_Dir|=0x0002;*P_IOC_Attrib|=0x0002;//*P_IOC_Data|=0x0002;TMR_v250nsDelay();IO_set_MagDataLow();/*needaminimumof4.5us(Tsu2_rst)delayhere*/TMR_vDelayus(5);IO_set_MagStrobeLow();/*needaminimumof250ns(TstbL)delayhere*/TMR_v250nsDelay();IO_set_MagStrobeHigh();/*needaminimumof250ns(TstbH)delayhere*/TMR_v250nsDelay();IO_set_MagStrobeLow();/*needaminimumof20ns(Tsu_mode)delayhere*/TMR_v250nsDelay();IO_set_MagDataHighZ();*P_IOC_Dir&=~0x0002;/*needaminimumof250ns(TstbL)delayhere*//*needaminimumof20ns(Th_mode)delayhere*/TMR_v250nsDelay();IO_set_MagStrobeHigh();/*needaminimumof12.75us(TstbH2)delayhere*/TMR_vDelayus(130);IO_set_MagStrobeLow();}/******************************************************************************************函数功能:准备读卡信号主要思路:入口参数:出口参数:全局变量:静态变量:日期:创建:2011-3-30修改:********************************************************************************************/voidMSR_vArm(void){/*needaminimumof250ns(TstbL)delayhere*/TMR_v250nsDelay();IO_set_MagStrobeHigh();/*needaminimumof250ns(TstbH)delayhere*/TMR_v250nsDelay();IO_set_MagStrobeLow();}/******************************************************************************************函数功能:清除芯片缓存主要思路:入口参数:出口参数:全局变量:静态变量:日期:创建:2011-3-30修改:********************************************************************************************/voidMSR_vClearCardData(void){if(MSR_fCardDataReady){MSR_fCardDataReady=FALSE;MSR_vReset();MSR_vArm();}}/******************************************************************************************函数功能:解码芯片初始化主要思路:入口参数:出口参数:全局变量:静态变量:日期:创建:2011-3-30修改:********************************************************************************************/voidMSR_vInit(void){/*thisroutineshouldbecalledonceafterpowerupduringinitialization*/MSR_CardDataAcquisitionState=MSR_CDAS_WAIT_FOR_CARD_PRESENT;/*设置data和strobe为输出高*/*P_IOC_Dir|=0x0003;*P_IOC_Attrib|=0x0003;*P_IOC_Data|=0x0003;IO_set_MagDataHighZ();IO_set_MagStrobeHigh();/*Waitfor3voltASICtocompletepowerupreset.*//*needaminimumof10ms(Trdy)delayhere*/TMR_vDelayms(10);/*Put3voltASICinnewmode.*/MSR_vReset();MSR_vArm();MSR_Tmr_count10ms=0;MSR_out=0;MSR_in=0;}/******************************************************************************************函数功能:清除数据准好信号主要思路:入口参数:出口参数:全局变量:静态变量:日期:创建:2011-3-30修改:********************************************************************************************/voidMSR_vClearCardPresent(void){/*needaminimumof20ns(Tsu_stbH)delayhere*/TMR_v250nsDelay();IO_set_MagStrobeHigh();/*needaminimumof1.1us(TstbH_CP)delayhere*/TMR_vDelayus(2);IO_set_MagStrobeLow();}/******************************************************************************************函数功能:读取芯片缓存数据主要思路:入口参数:pryubTkData-目标缓存,uwCntInBits-读取位数出口参数:全局变量:静态变量:日期:创建:2011-3-30修改:******************************************