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

📄 psgdrv.h

📁 SIM卡的驱动程序,有利于开发一些与SIM相通的一些工具,或者手机软件SIM驱动的开发
💻 H
📖 第 1 页 / 共 2 页
字号:
#define PSDataIODisable()    *(UINT16 *)SIM_CTRL_LO_REG &= ~(SIM_DATA_ACT)

#define PSPowerUpClockOn()    PSSetClockSpeed(); \
                              *(UINT16 *)SIM_CTRL_LO_REG |= (SIM_DATA_RTX); \
                              *(UINT16 *)SIM_IER_REG |= (SIM_INB_FULL_IE) ; \
                              SetTimer (TIMERA_BASE ,TMR_STOP|TMR_LOAD_WHOLE|TMR_INTEN|TMR_CLOCK_IN1|INTERVAL_TIMER, 7800) ; \
                              DEVICE_SPEC_ClearPendingInterrupts(eIRQ1_TIMERA, eIRQ2_NONE); \
                              DEVICE_SPEC_EnableInterrupts(eIRQ1_TIMERA, eIRQ2_NONE, eIRQ1_NONE, eIRQ2_NONE) ; \
                              ResumeTimer (TIMERA_BASE)
#define PSSetTxDMADelay(x)      *(UINT16 *)SIM_DLY_REG = (x)

#define PSTxDelayEnable()  	   *(UINT16 *)SIM_CTRL_HI_REG |= SIM_DELAY_EN
#define PSTxDelayDisable()  	   *(UINT16 *)SIM_CTRL_HI_REG &= ~(SIM_DELAY_EN)

#define PSSetSIMResetLow()    *(UINT16 *)SIM_CTRL_LO_REG &= ~(SIM_RESET_ACT) 
#define PSSetSIMResetHigh()   *(UINT16 *)SIM_CTRL_LO_REG |= SIM_RESET_ACT


//for power down
#define PSPowerDownClockOff() *(UINT16 *)SIM_CTRL_LO_REG &= ~(SIM_CLK_STP_H); \
										*(UINT16 *)SIM_CTRL_LO_REG |= 0; \
                              *(UINT16 *)SIM_CTRL_LO_REG &= ~(SIM_CLK_ACT);

#define PSChangeIdletoTX()	  

#define PSChangeRXtoTX()      *(UINT16 *)SIM_IER_REG &= ~(SIM_INB_FULL_IE)

#define PSChangeTXtoRX()      *(UINT16 *)SIM_IER_REG &= ~(SIM_OUTB_EMP_IE);\
                              *(UINT16 *)SIM_IER_REG |= SIM_INB_FULL_IE  

#define PSChangeRXtoIdle()	  *(UINT16 *)SIM_IER_REG &= ~(SIM_INB_FULL_IE)

#define PSChangeIdleToDeact() *(UINT16 *)SIM_CTRL_LO_REG &= ~(SIM_CLK_STP_H); \
                              *(UINT16 *)SIM_CTRL_LO_REG &= ~(SIM_CLK_ACT); \
                              *(UINT16 *)SIM_CTRL_LO_REG &= ~(SIM_RESET_ACT);\
							  *(UINT16 *)SIM_IER_REG &= ~(SIM_INB_FULL_IE)

#define PSChangeToNull()        *(UINT16 *)SIM_CTRL_LO_REG &= ~(SIM_RESET_ACT)
                                                   
#define PSChangeDeactToRX()   *(UINT16 *)SIM_CTRL_LO_REG &= ~(SIM_CONVENTION); \
                              *(UINT16 *)SIM_CTRL_HI_REG |= SIM_CLK_DIV ; \
                              *(UINT16 *)SIM_CTRL_LO_REG |= (SIM_VCC_ACT|SIM_DATA_RTX|SIM_DATA_ACT); \
                              *(UINT16 *)SIM_IER_REG |= (SIM_INB_FULL_IE) ; \
                              SetTimer (TIMERA_BASE ,TMR_STOP|TMR_LOAD_WHOLE|TMR_INTEN|TMR_CLOCK_IN1|INTERVAL_TIMER, 7800) ; \
                              DEVICE_SPEC_ClearPendingInterrupts(eIRQ1_TIMERA, eIRQ2_NONE) ; \
                              DEVICE_SPEC_EnableInterrupts(eIRQ1_TIMERA, eIRQ2_NONE, eIRQ1_NONE, eIRQ2_NONE);\
                              ResumeTimer (TIMERA_BASE)

#define PSSetInverse()     PSInverseMode = TRUE; \
                           *(UINT16 *)SIM_CTRL_LO_REG |= (SIM_CONVENTION | SIM_DATA_RTX)

#define PSSetDirect()      PSInverseMode = FALSE; \
                           *(UINT16 *)SIM_CTRL_LO_REG &= ~(SIM_CONVENTION); \
                           *(UINT16 *)SIM_CTRL_LO_REG |= SIM_DATA_RTX

#if SIM_DEBUG == SIM_DEBUG_MAX
#define PSEnableClockHighSpeed()  *(UINT16 *)SIM_CTRL_HI_REG &= ~(SIM_CLK_DIV); \
                                  *(UINT16 *)SIM_CTRL_LO_REG |= SIM_CLK_ACT; \
								  HighSpeedClockEnabled_Dbg = TRUE
#else
#define PSEnableClockHighSpeed()  *(UINT16 *)SIM_CTRL_HI_REG &= ~(SIM_CLK_DIV); \
                                  *(UINT16 *)SIM_CTRL_LO_REG |= SIM_CLK_ACT
#endif

#if SIM_DEBUG == SIM_DEBUG_MAX
#define PSEnableClockLowSpeed()   *(UINT16 *)SIM_CTRL_HI_REG |= SIM_CLK_DIV; \
                                  *(UINT16 *)SIM_CTRL_LO_REG |= SIM_CLK_ACT;\
								  HighSpeedClockEnabled_Dbg = FALSE
#else
#define PSEnableClockLowSpeed()   *(UINT16 *)SIM_CTRL_HI_REG |= SIM_CLK_DIV; \
                                  *(UINT16 *)SIM_CTRL_LO_REG |= SIM_CLK_ACT
#endif

#if SIM_DEBUG == SIM_DEBUG_MAX
#define PSDisableClockLow() *(UINT16 *)SIM_CTRL_LO_REG &= ~(SIM_CLK_STP_H); \
                            *(UINT16 *)SIM_CTRL_LO_REG &= ~(SIM_CLK_ACT); \
							DisableClockHigh_Dbg = FALSE
#else
#define PSDisableClockLow() *(UINT16 *)SIM_CTRL_LO_REG &= ~(SIM_CLK_STP_H); \
                            *(UINT16 *)SIM_CTRL_LO_REG &= ~(SIM_CLK_ACT)
#endif
                                                       
#if SIM_DEBUG == SIM_DEBUG_MAX
#define PSDisableClockHigh() *(UINT16 *)SIM_CTRL_LO_REG |= SIM_CLK_STP_H; \
                             *(UINT16 *)SIM_CTRL_LO_REG &= ~(SIM_CLK_ACT); \
							 DisableClockHigh_Dbg = TRUE
#else
#define PSDisableClockHigh() *(UINT16 *)SIM_CTRL_LO_REG |= SIM_CLK_STP_H; \
                             *(UINT16 *)SIM_CTRL_LO_REG &= ~(SIM_CLK_ACT)
#endif

#define PSSend(x )       {t_InterruptSrc1 pending1; t_InterruptSrc2 pending2; \
						 PSTxChar = (x);\
						 *(UINT16 *)SIM_IER_REG &= ~(SIM_OUTB_EMP_IE);\
						 SetTimer (TIMERA_BASE, TMR_STOP|TMR_LOAD_WHOLE|TMR_INTEN|TMR_CLOCK_IN1|INTERVAL_TIMER, 0xffff);\
						 ResumeTimer (TIMERA_BASE); \
						 while (DEVICE_SPEC_GetAllPendingInterrupts(&pending1, &pending2), pending1 & eIRQ1_TIMERA) \
						    DEVICE_SPEC_ClearPendingInterrupts(eIRQ1_TIMERA, eIRQ2_NONE);\
						 SetTimer (TIMERA_BASE, TMR_STOP|TMR_LOAD_WHOLE|TMR_INTEN|TMR_CLOCK_IN2|INTERVAL_TIMER, PSGuardPeriod); \
						 PSGuardPeriod = PS_DEFAULT_GUARD_PERIOD; \
						 DEVICE_SPEC_EnableInterrupts(eIRQ1_TIMERA, eIRQ2_NONE, eIRQ1_NONE, eIRQ2_NONE); \
						 ResumeTimer (TIMERA_BASE);}
 
#define PSGet()          PSInverseData ( *(UINT16 *)SIM_RXBUF_REG )

#define PSEnableOBEInterrrupt()    *(UINT16 *)SIM_IER_REG |= (SIM_OUTB_EMP_IE)

#define PSEnableRxFailInterrupt()   *(UINT16 *)SIM_IER_REG |= (SIM_ME_RX_FAIL)

#define PSDisableRxFailInterrupt()   *(UINT16 *)SIM_IER_REG &= ~(SIM_ME_RX_FAIL)

#define PSSIMPresent()   1

#define PSGetStatus()    *(UINT16 *)SIM_STAT_REG

#define PSEnaSIMInts()  /*  *(UINT16 *)SIM_IER_REG |= SIM_INB_FULL_IE */

#define PSDisSIMInts() /*  IntShadow = *(UINT16 *)SIM_CTRL; \
                         *(UINT16 *)SIM_IER_REG = ~(SIM_OUTB_EMP_IE|SIM_INB_FULL_IE) 
                       */
#define PSSIMReset()   *(UINT16 *)SIM_CTRL_HI_REG &= ~(SIM_BLK_RST)

#define PSEnableSIMClock()	*(UINT16 *)SIM_CTRL_LO_REG |= SIM_CLK_ACT;

// Macro to set ETU clock cycles after PPS based on TA1
#define PSSetETUClockCycles( x )     *(UINT16 *)SIM_CTRL_HI_REG = (*(UINT16 *)SIM_CTRL_HI_REG & 0xFE00) | (x >> 8); \
                                     *(UINT16 *)SIM_CTRL_LO_REG = (*(UINT16 *)SIM_CTRL_LO_REG & 0x00FF) | ((x & 0x0FF) << 8);

#define PS_RESET_LO_TIMEOUT          6	  
#define PS_RESET_HI_TIMEOUT          6		 
#define PS_TRANSFER_ALLOWED_RETRIES  3
#define PS_RESET_ALLOWED_RETRIES     3
#define PS_COMMAND_RETRY_COUNT		 2

// The interval between the leading edge of any character sent by the card and
// the leading edge of the previous character (sent either by the card or by
// the interface device) shall not exceed 960 * WI (TC2 from the card) * (Fi/f).
// This maximum delay is named the "work waiting time".
// The default WI is 10, and default Fi is 372.
// The current f is 1.95 MHz

// #define PS_WORK_WAIT_FACTOR         20 * 10
// The work wait factor is 960 * (Fi/f)(= etu time) in milliseconds
// The default Fi is 372, and the current f is 1.95 MHz
#define PS_WORK_WAIT_FACTOR         183
#define SIMbuffLength               256
#define PS_DEFAULT_WI               10


/*------------------------------------------------------------------------*/


/*---------------------- Global Function Prototypes: ---------------------*/

extern void SimIH(void);
extern void (*TimerAIH)(void);
extern void SimDMAIH(void);      
extern void SIMInitialize(void);
extern void  SimResetTimerAIH( void );
extern void  SimDataTimerAIH( void );
extern void PSSetCommandRetryCount(UINT8 count);



/*------------------------------------------------------------------------*/

/*---------------------------- Global Typedefs: --------------------------*/

// Type for SIM DMA data (character) buffer
typedef struct {
   CHAR    *BaseAddress; // Start of buffer
   CHAR    *EndAddress;  // End of buffer
   CHAR    *pSIM_Src;    // SIM input Data Register
   CHAR    *pSIM_Dest;   // SIM output data buffer 
   USHORT  Length;       // Length of buffer (bytes for Xmit & Receive)
   VOID    *pDMARegs;    // DMA Controller register base address
   USHORT  DMASelect;    // DMA channel selection for the data path
   BOOL    BufferStatus; // Buffer status flag.  For Tx, flag
                         // is TRUE whenever buffer contains data.  For Rx,
                         // flag is set TRUE when data arrives between Reads.
} SIM_DMA_CONFIG_STRUCT; 

/*--------------------------- Global Variables: --------------------------*/

extern void  (*PSIntAction)(void);
extern void  (*PSErrAction)(void);
extern UINT16 PSRemainingWorkTime;
extern UINT16 PSWorkWaitingTime;
extern INT16 PSTransferRemainingRetries;
extern BOOL PSRxDMAEnabled;  /* To keep track if whem SIM receive DMA is active */

extern SIM_DMA_CONFIG_STRUCT *SIMConfigDataPtr;

/*------------------------------------------------------------------------*/
/*--------------------------- Global Variables: --------------------------*/


/*---------------------- Global Function Prototypes: ---------------------*/

//extern void SIMWriteToSIM(void);
//extern void SIMChangePar(void);

/*------------------------------------------------------------------------*/
#endif

⌨️ 快捷键说明

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