⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 samcard.c

📁 This sam card sourcecode
💻 C
📖 第 1 页 / 共 3 页
字号:
/************************************************************************/
/*                                                                      */
/*      Project title:          InformationTerminal                     */
/*                                                                      */
/*                                                                      */
/*      Author:                 Yesy                                    */
/*      Date:                   2005-05-21                              */
/*      Reviewed by:                                                    */
/*      Date:                                                           */
/*                                                                      */
/*      Contents:                                                       */
/*                                                                      */
/*      Last changed by:                                                */
/*      Date:                                                           */
/*      Change report:                                                  */
/*      Change description:                                             */
/*                                                                      */
/*                                                                      */
/************************************************************************/
#include <msp430x14x.h>
#include <string.h>

#include "..\..\mod\lib\easyc.h"
#include "..\..\mod\lib\mess_882.exp"
#include "..\..\mod\lib\errordef.h"
#include "..\..\mod\lib\data_def.h"
#include "..\..\mod\lib\def.h"
#include "..\..\mod\lib\clib.h"
#include "..\..\mod\eemanagr\eemanagr.h"

/* Publics for this module */
#include "..\..\mod\lib\hwsubr.h"

/* LTC 1955   yesy 2005.5.20 */
#define LTC1955_DIN0   P3OUT &=~BIT1
#define LTC1955_DIN1   P3OUT |=BIT1
#define LTC1955_LD0    P3OUT &=~BIT0
#define LTC1955_LD1    P3OUT |=BIT0
#define LTC1955_DOUT0  P3OUT &=~BIT2
#define LTC1955_DOUT1  P3OUT |=BIT2
#define LTC1955_SCLK0  P3OUT &=~BIT3
#define LTC1955_SCLK1  P3OUT |=BIT3
#define LTC1955_DATA0  P6OUT &=~BIT4
#define LTC1955_DATA1  P6OUT |=BIT4
#define LTC1955_RIN0   P6OUT &=~BIT5
#define LTC1955_RIN1   P6OUT |=BIT5
#define LTC1955_SYNC0  P6OUT &=~BIT6
#define LTC1955_SYNC1  P6OUT |=BIT6
#define LTC1955_ASYNC0 P5OUT &=~BIT5
#define LTC1955_ASYNC1 P5OUT |=BIT5

// ABOUT 20 US PER UNIT
#define	LTC1955_tDS	1	//Min 8 us
#define LTC1955_tDH	4       //Min 8
#define LTC1955_tDD	1	//15-60
#define LTC1955_tL	3	//50-
#define LTC1955_tH	3	//50-
#define LTC1955_tLW	3	//50-
#define LTC1955_tCL	3	//50-
#define LTC1955_tLC	1	//Min 0 us

#define OUTCARDDATA0   P6OUT &=~BIT1
#define OUTCARDDATA1   P6OUT |=BIT1

/* IC CARD SIGNAL INPUT--READ */
#define INCARDDATA1    (P6IN&BIT1)


/* IC CARD SIGNAL OUTPUT--WRITE */
#define OUTSAMCARDCLOCK0  P5OUT &=~BIT5   //ASYNC 
#define OUTSAMCARDCLOCK1  P5OUT |=BIT5    
#define OUTSAMCARDRESET0  P6OUT &=~BIT5   //RIN
#define OUTSAMCARDRESET1  P6OUT |=BIT5    
#define OUTSAMCARDDATA0   P6OUT &=~BIT4   //DATA
#define OUTSAMCARDDATA1   P6OUT |=BIT4

/* IC CARD SIGNAL INPUT--READ */
#define INSAMCARDDATA1    (P6IN&BIT4)          //DATA



//define  int Timer B use-mode
#define         BAUDTATE                        372
#define		DEF_T0_NONE			0x00
#define		DEF_T0_ICREC			0x01
#define		DEF_T0_ICSEND			0x02

#define		DEF_T0_SAMREC			0x03
#define		DEF_T0_SAMSEND			0x04


static  void  _SamCardSetPower(byte Level);
static  void  _SamCardSetReset(byte Leval);
static  void  _SamCardSetClock(byte Leval);
static  void  _SamCardSetCLK4(byte Level);
static  void  _DisableSamRec(void);
static  void  _EnableSamRec(void);
static  void  _EnableSamSend(void);
static  void  _SamCardPutByte(byte IOData);
static  byte  _SamCheckStartBit(void);
byte    _SamCardOpen(void);
void    _SamCardClose(void);
void    _SamCardApduSend(byte *SendBuff,byte SendLen,byte FlagReverse);
byte    _SamCardApdu(APDU_COMM *apducom,APDU_RESP *apduresp);
byte	_SamCardReadIOLimit(byte *recdata,byte Reverse);

byte    CheckSum;

//From smartcard.c
extern void   _Delay(uint mSec);
extern byte  _CardReadByte(void);
extern void _InitSmartCard(void);
extern byte  _ReverseData(byte SouData);
extern byte  _Chck_Parity(byte InData);

extern byte	PUB_Card_Counter;
extern byte	PUB_Card_RecData;
extern byte	PUB_Card_RecBuff;
extern uint	PUB_Card_SendBuff;
extern byte	PUB_Card_RecData;
extern byte	PUB_Card_ICNO;
extern uint	PUB_Card_RecLimit;
extern uint	PUB_Card_GuardTime;
extern byte	PUB_Card_TI;
extern byte	PUB_Card_RI;
extern byte	PUB_Card_ICReverse[8];
extern byte	PUB_Card_ICPCB[8];
extern byte	PUB_Card_ICT01[8];

extern byte	PUB_T0Type;



/************************************************************************/
/*                                                                      */
/*      Module title:           IC/SAM Card opration functions          */
/*                                          / _CardSetPower             */
/*                                          / _CardSetReset             */
/*                                          /_CardSetClock              */
/*                                          /_CardSetCLK4               */
/*                                          /_CardPutBit                */
/*      Author:                 JPA                                     */
/*      Date:                   2005-03-08                              */
/*      Reviewed by:                                                    */
/*      Date:                                                           */
/*                                                                      */
/*                                                                      */
/*      Functional Description:                                         */
/*                                                                      */
/*              CPU Card basic opration functions                       */
/************************************************************************/
static  void   _SamCardSetPower(byte Level)
{
    if ( Level == 0 )
		P4OUT &=~BIT4;
    else
		P4OUT |=BIT4;
    return;
}


static  void   _SamCardSetReset(byte Level)
{
    P6DIR |=BIT5;                //P6.5(RIN) OUTPUT MODE

    if (Level) OUTSAMCARDRESET1;

    else OUTSAMCARDRESET0;

    return;
}

static  void   _SamCardSetClock(byte Level)
{
	if ( Level == 0 )
		{ P5SEL &=~BIT5;
		  P5OUT &=~BIT5;
		}
	else
		P5SEL |=BIT5;
	return;
}

static  void   _SamCardPutBit(byte IOBit)
{

    P6DIR |=BIT4;                //P6.4(Data) OUTPUT MODE

    if (IOBit)  OUTSAMCARDDATA1;    //OUT PUT HIGH LEVEL ON I/O

    else  OUTSAMCARDDATA0;

    return;
}

/************************************************************************
*                                                                       *
*       Module title:           _DelaynSec                              *
*       Module type:            subprogram                              *
*                                                                       *
*       Author:                 Yesy                                    *
*       Date:                   2005-05-21                              *
*       Reviewed by:                                                    *
*       Date:                                                           *
*                                                                       *
*       Last changed by:                                                *
*       Date:                                                           *
*                                                                       *
*       Functional Description: delay for 20 nsec per unit, but not accurately  *
************************************************************************/
void	_DelaynSec(uint nSec) //20ns
{
	byte j;

	for(j=0;j<nSec;j++)
	{
	  _NOP();
	};
	
	return;
}




/************************************************************************
*                                                                       *
*       Module title:           _SamCheckStartBit                         *
*       Module type:            subprogram                              *
*                                                                       *
*       Author:                 Yesy                                     *
*       Date:                   2005-05-21                              *
*       Reviewed by:                                                    *
*       Date:                                                           *
*                                                                       *
*       Last changed by:                                                *
*       Date:                                                           *
*                                                                       *
*       Functional Description:  Checks the start Bit when communicates *
************************************************************************/
static  byte  _SamCheckStartBit(void)
{

    P6DIR &=~BIT4;
    if(INSAMCARDDATA1) return (FALSE);

    else            
    {
        PUB_Card_Counter = 0;
        PUB_Card_RecBuff = 0;//yesy add 2005.06.22
        CheckSum=0;//yesy add 2005.06.22
        
        PUB_T0Type = DEF_T0_SAMREC;
        PUB_Card_RI = 0x00;
        _NOP();                    // etu/2 = 192us/2
        _NOP();                    // etu/2 = 192us/2
        _NOP();                    // etu/2 = 192us/2
        _NOP();                    // etu/2 = 192us/2
        _NOP();                    // etu/2 = 192us/2
        TBCTL = TBSSEL_2 + MC_1; //Enable Interrupt
        return (TRUE);
    }
}
/************************************************************************
*                                                                       *
*       Module title:           _CardSetRecLimit                         *
*       Module type:            subprogram                              *
*                                                                       *
*       Author:                 JPA                                     *
*       Date:                   2005-03-08                                    *
*       Reviewed by:                                                    *
*       Date:                                                           *
*                                                                       *
*       Last changed by:                                                *
*       Date:                                                           *
*                                                                       *
*       Functional Description:  The deadline time when Received        *
************************************************************************/
static  void   _CardSetRecLimit(uint RecLimit)
{
    PUB_Card_RecLimit = RecLimit;
    return;
}

/************************************************************************
*                                                                       *
*       Module title:           _InitSmartCard                         *
*       Module type:            subprogram                              *
*                                                                       *
*       Author:                 JPA                                     *
*       Date:                   2005-03-09                              *
*       Reviewed by:                                                    *
*       Date:                                                           *
*                                                                       *
*       Last changed by:                                                *
*       Date:                                                           *
*                                                                       *
*       Functional Description:                                         *
************************************************************************/




/************************************************************************
*                                                                       *
*       Module title:           _SamCardReset                           *
*       Module type:            subprogram                              *
*                                                                       *
*       Author:                 Yesy                                    *
*       Date:                   2005-05-21                              *
*       Reviewed by:                                                    *
*       Date:                                                           *
*                                                                       *
*       Last changed by:                                                *
*       Date:                                                           *
*                                                                       *
*       Functional Description:                                         *
*                                do a reset operation on the Card       *
*       Output:    Faulse --failure                                     *
*                  Other  --sucess                                      *
************************************************************************/
byte  _SamCardReset(byte *ResetData)
{
    byte ResetLen;
    byte i;
    byte loop;

    
    _CardSetRecLimit(500);
    _SamCardSetReset(0);
    _SamCardSetReset(1);
    _EnableSamRec();

    ResetLen = 0;
    loop = 1;
    while(loop)
    {
        loop = _SamCardReadIOLimit(ResetData+ResetLen,0);
        ResetLen = ResetLen + loop;
        _CardSetRecLimit(100);
    }
    _CardSetRecLimit(2500);
    if ( ResetData[0] == 0x3B )
        PUB_Card_ICReverse[PUB_Card_ICNO] = 0;
    else if ( ResetData[0] == 0x03)
    {
            PUB_Card_ICReverse[PUB_Card_ICNO] = 1;
            for (i=0;i<ResetLen;i++)
				*(ResetData+i) = _ReverseData(*(ResetData+i));

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -