📄 mcard.c.bak
字号:
#include<MCARD.H>
#include "config.h"
#include "lpclib.h"
/*******************************************************************************************
void ram_init(void)
描述:标志位清0
********************************************************************************************/
void ram_init(void)
{
unsigned char i;
bitcount3=0;
bitcount2=0;
bitcount1=0;
rnum3=0;
rnum2=0;
rnum1=0;
readdat_num=0;
savdat3=0xff;
savdat2=0xff;
savdat1=0xff;
temp_h_byte=0;
temp_l_byte=0;
for(i=0;i<MAX_TRACK1_LEN;i++)Track1buf[i]=0xff;
for(i=0;i<MAX_TRACK2_LEN;i++)Track2buf[i]=0xff;
for(i=0;i<MAX_TRACK3_LEN;i++)Track3buf[i]=0xff;
}
/******************************************************************************************
void init_mcu (void)
描述:硬件的初始化
******************************************************************************************/
void init_mcu (void)
{
ram_init(); //数据清0
}
//------------------------------------------------------------------------------------------
// 外部中断2
// void IRQ_Eint2 (void)__irq
//------------------------------------------------------------------------------------------
void IRQ_Eint2 (void)__irq
{
savdat1=savdat1&(((unsigned char)((IO1PIN&0x00200000)>>21))|0xfe);
if(bitcount1<7){savdat1<<=1; bitcount1++;}
else {bitcount1=0;Track1buf[rnum1]=~savdat1;
if(rnum1<MAX_TRACK1_LEN)rnum1++;
savdat1=0xff; }
EXTINT = 0x04;
VICVectAddr = 0;
}
//------------------------------------------------------------------------------------------
// 外部中断3
// void IRQ_Eint2 (void)__irq
//------------------------------------------------------------------------------------------
void IRQ_Eint3 (void)__irq
{
savdat3=savdat3&(((unsigned char)((IO1PIN&0x20000000)>>29))|0xfe);
if(bitcount3<7){savdat3<<=1; bitcount3++;}
else {bitcount3=0;Track3buf[rnum3]=~savdat3;
if(rnum3<MAX_TRACK3_LEN)rnum3++;
savdat3=0xff; }
EXTINT = 0x08;
VICVectAddr = 0;
}
//------------------------------------------------------------------------------------------
// 捕获中断1
//void IRQ_TIME1 (void)__irq
//------------------------------------------------------------------------------------------
void IRQ_TIME1 (void)__irq
{
T1IR= 1<<6;
savdat2=savdat2&(((unsigned char)((IO1PIN&0x40000000)>>30))|0xfe);
if(bitcount2<7){savdat2<<=1; bitcount2++;}
else {bitcount2=0;Track2buf[rnum2]=~savdat2;
if(rnum2<MAX_TRACK2_LEN)rnum2++;
savdat2=0xff; }
VICVectAddr = 0;
}
/**********************************************************************************************
void dat_format(void)
描述:将不足7位的数据位格式化成正常数据
*********************************************************************************************/
void dat_format(void)
{
if(bitcount1!=0)
{
bitcount1=(8-bitcount1); //第一磁道
savdat1<<=bitcount1;
Track1buf[rnum1]=~savdat1;//当数据不足8位时则数据的低位补1
rnum1++;
}
if(bitcount2!=0)
{
bitcount2=(8-bitcount2); //第二磁道
savdat2<<=bitcount2;
Track2buf[rnum2]=~bitcount2;//当数据不足8位时则数据的低位补1
rnum2++;
}
if(bitcount3!=0)
{
bitcount3=(8-bitcount3); //第三磁道
savdat3<<=bitcount3;
Track3buf[rnum3]=~savdat3;//当数据不足8位时则数据的低位补1
rnum3++;
}
}
/*******************************************************************************************
函数原型:byte judge_readstatus_tr1(byte *tmprecord,byte tmplength)
功能:对一轨的数据进行解码
参数说明:tmprecord存放未解码的数据的缓冲区首址,tmplength存放未解码的数据的长度
********************************************************************************************/
unsigned char judge_readstatus_tr1 (unsigned char *tmprecord,unsigned char tmplength)
{
static unsigned char tmpnum;
static unsigned char k;
static unsigned char m;
static unsigned char tmpLRC;
static unsigned char byte_num ;
static unsigned char dat_tmp;
tmpnum=tmplength;
byte_num=0;
FLAG_SS=0;
FLAG_ES=0;
FLAG_BRC=1;
FLAG_LRC=0;
/**********************************找包头循环体***************************************/
while(1)
{
if((!FLAG_SS)&&(tmprecord[tmpnum]!=0x00)&&(tmprecord[tmpnum-1]!=0x00))
{
temp_h_byte=tmprecord[tmpnum-1];
temp_l_byte=tmprecord[tmpnum];
for(k=0;k<8;k++)
{
if((temp_l_byte&0x7f)==0x45) //45 is stx.
{
FLAG_SS=1; //STX is ok.
tmpLRC=0x05; //计算LRC
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -