1 /** 2 ****************************************************************************** 3 * @file lib_iso7816.h 4 * @author Application Team 5 * @version V1.1.0 6 * @date 2019-10-28 7 * @brief ISO7816 library. 8 ****************************************************************************** 9 * @attention 10 * 11 ****************************************************************************** 12 */ 13 #ifndef __LIB_ISO7816_H 14 #define __LIB_ISO7816_H 15 16 #ifdef __cplusplus 17 extern "C" { 18 #endif 19 20 #include "target.h" 21 22 typedef struct 23 { 24 uint32_t FirstBit; 25 uint32_t Parity; 26 uint32_t Baudrate; 27 uint32_t TXRetry; 28 uint32_t RXACKLength; 29 uint32_t TXNACKLength; 30 } ISO7816_InitType; 31 //FirstBit 32 #define ISO7816_FIRSTBIT_MSB (0UL) 33 #define ISO7816_FIRSTBIT_LSB ISO7816_CFG_LSB 34 #define IS_ISO7816_FIRSTBIT(__FIRSTBIT__) (((__FIRSTBIT__) == ISO7816_FIRSTBIT_MSB) ||\ 35 ((__FIRSTBIT__) == ISO7816_FIRSTBIT_LSB)) 36 //Parity 37 #define ISO7816_PARITY_EVEN (0UL) 38 #define ISO7816_PARITY_ODD ISO7816_CFG_CHKP 39 #define IS_ISO7816_PARITY(__PARITY__) (((__PARITY__) == ISO7816_PARITY_EVEN) ||\ 40 ((__PARITY__) == ISO7816_PARITY_ODD)) 41 //Baudrate 42 #define IS_ISO7816_BAUDRATE(__BAUDRATE__) ((200UL <= (__BAUDRATE__)) &&\ 43 ((__BAUDRATE__) <= 2625000UL)) 44 //TXRetry 45 #define ISO7816_TXRTY_0 ((0x00U << ISO7816_CFG_TXRTYCNT_Pos) \ 46 | (1U << 10)) 47 #define ISO7816_TXRTY_1 ((0x01U << ISO7816_CFG_TXRTYCNT_Pos) \ 48 | (1U << 10)) 49 #define ISO7816_TXRTY_2 ((0x02U << ISO7816_CFG_TXRTYCNT_Pos) \ 50 | (1U << 10)) 51 #define ISO7816_TXRTY_3 ((0x03U << ISO7816_CFG_TXRTYCNT_Pos) \ 52 | (1U << 10)) 53 #define ISO7816_TXRTY_4 ((0x04U << ISO7816_CFG_TXRTYCNT_Pos) \ 54 | (1U << 10)) 55 #define ISO7816_TXRTY_5 ((0x05U << ISO7816_CFG_TXRTYCNT_Pos) \ 56 | (1U << 10)) 57 #define ISO7816_TXRTY_6 ((0x06U << ISO7816_CFG_TXRTYCNT_Pos) \ 58 | (1U << 10)) 59 #define ISO7816_TXRTY_7 ((0x07U << ISO7816_CFG_TXRTYCNT_Pos) \ 60 | (1U << 10)) 61 #define ISO7816_TXRTY_8 ((0x08U << ISO7816_CFG_TXRTYCNT_Pos) \ 62 | (1U << 10)) 63 #define ISO7816_TXRTY_9 ((0x09U << ISO7816_CFG_TXRTYCNT_Pos) \ 64 | (1U << 10)) 65 #define ISO7816_TXRTY_10 ((0x0AU << ISO7816_CFG_TXRTYCNT_Pos) \ 66 | (1U << 10)) 67 #define ISO7816_TXRTY_11 ((0x0BU << ISO7816_CFG_TXRTYCNT_Pos) \ 68 | (1U << 10)) 69 #define ISO7816_TXRTY_12 ((0x0CU << ISO7816_CFG_TXRTYCNT_Pos) \ 70 | (1U << 10)) 71 #define ISO7816_TXRTY_13 ((0x0DU << ISO7816_CFG_TXRTYCNT_Pos) \ 72 | (1U << 10)) 73 #define ISO7816_TXRTY_14 ((0x0EU << ISO7816_CFG_TXRTYCNT_Pos) \ 74 | (1U << 10)) 75 #define ISO7816_TXRTY_15 ((0x0FU << ISO7816_CFG_TXRTYCNT_Pos) \ 76 | (1U << 10)) 77 #define IS_ISO7816_TXRTY(__TXRTY__) (((__TXRTY__) == ISO7816_TXRTY_0) || \ 78 ((__TXRTY__) == ISO7816_TXRTY_1) || \ 79 ((__TXRTY__) == ISO7816_TXRTY_2) || \ 80 ((__TXRTY__) == ISO7816_TXRTY_3) || \ 81 ((__TXRTY__) == ISO7816_TXRTY_4) || \ 82 ((__TXRTY__) == ISO7816_TXRTY_5) || \ 83 ((__TXRTY__) == ISO7816_TXRTY_6) || \ 84 ((__TXRTY__) == ISO7816_TXRTY_7) || \ 85 ((__TXRTY__) == ISO7816_TXRTY_8) || \ 86 ((__TXRTY__) == ISO7816_TXRTY_9) || \ 87 ((__TXRTY__) == ISO7816_TXRTY_10) || \ 88 ((__TXRTY__) == ISO7816_TXRTY_11) || \ 89 ((__TXRTY__) == ISO7816_TXRTY_12) || \ 90 ((__TXRTY__) == ISO7816_TXRTY_13) || \ 91 ((__TXRTY__) == ISO7816_TXRTY_14) || \ 92 ((__TXRTY__) == ISO7816_TXRTY_15)) 93 //RXACKLength 94 #define ISO7816_RXACKLEN_2 (0UL) 95 #define ISO7816_RXACKLEN_1 (ISO7816_CFG_RXACKSET) 96 #define IS_ISO7816_RXACKLEN(__RXACKLEN__) (((__RXACKLEN__) == ISO7816_RXACKLEN_2) ||\ 97 ((__RXACKLEN__) == ISO7816_RXACKLEN_1)) 98 //TXNACKLength 99 #define ISO7816_TXNACKLEN_0 (0UL) 100 #define ISO7816_TXNACKLEN_1 (ISO7816_CFG_AUTORXACK) 101 #define ISO7816_TXNACKLEN_2 (ISO7816_CFG_AUTORXACK | ISO7816_CFG_ACKLEN) 102 #define IS_ISO7816_TXNACKLEN(__TXNACKLEN__) (((__TXNACKLEN__) == ISO7816_TXNACKLEN_0) ||\ 103 ((__TXNACKLEN__) == ISO7816_TXNACKLEN_1) ||\ 104 ((__TXNACKLEN__) == ISO7816_TXNACKLEN_2)) 105 106 #define IS_ISO7816_PRESCALER(__PRESCALER__) ((__PRESCALER__) <= 0x80) 107 108 //interrupt 109 #define ISO7816_INT_TXRTYERR ISO7816_CFG_TXRTYERRIE 110 #define ISO7816_INT_RXOV ISO7816_CFG_RXOVIE 111 #define ISO7816_INT_TXDONE ISO7816_CFG_TXDONEIE 112 #define ISO7816_INT_RX ISO7816_CFG_RXIE 113 #define ISO7816_INT_RXERR ISO7816_CFG_RXERRIE 114 #define ISO7816_INT_Msk (ISO7816_INT_TXRTYERR \ 115 |ISO7816_INT_RXOV \ 116 |ISO7816_INT_TXDONE \ 117 |ISO7816_INT_RX \ 118 |ISO7816_INT_RXERR) 119 #define IS_ISO7816_INT(__INT__) ((((__INT__) & ISO7816_INT_Msk) != 0U) &&\ 120 (((__INT__) & ~ISO7816_INT_Msk) == 0U)) 121 122 //INTStatus 123 #define ISO7816_INTSTS_TXRTYERR ISO7816_INFO_TXRTYERRIF 124 #define ISO7816_INTSTS_RXOV ISO7816_INFO_RXOVIF 125 #define ISO7816_INTSTS_TXDONE ISO7816_INFO_TXDONEIF 126 #define ISO7816_INTSTS_RX ISO7816_INFO_RXIF 127 #define ISO7816_INTSTS_RXERR ISO7816_INFO_RXERRIF 128 #define ISO7816_INTSTS_Msk (ISO7816_INTSTS_TXRTYERR \ 129 |ISO7816_INTSTS_RXOV \ 130 |ISO7816_INTSTS_TXDONE \ 131 |ISO7816_INTSTS_RX \ 132 |ISO7816_INTSTS_RXERR) 133 #define IS_ISO7816_INTFLAGR(__INTFLAG__) (((__INTFLAG__) == ISO7816_INTSTS_TXRTYERR) ||\ 134 ((__INTFLAG__) == ISO7816_INTSTS_RXOV) ||\ 135 ((__INTFLAG__) == ISO7816_INTSTS_TXDONE) ||\ 136 ((__INTFLAG__) == ISO7816_INTSTS_RX) ||\ 137 ((__INTFLAG__) == ISO7816_INTSTS_RXERR)) 138 139 #define IS_ISO7816_INTFLAGC(__INTFLAG__) ((((__INTFLAG__)&ISO7816_INTSTS_Msk) != 0U) &&\ 140 (((__INTFLAG__)&(~ISO7816_INTSTS_Msk)) == 0U)) 141 //status 142 #define ISO7816_FLAG_DMATXDONE ISO7816_INFO_DMATXDONE 143 #define IS_ISO7816_FLAGR(__FLAG__) ((__FLAG__) == ISO7816_FLAG_DMATXDONE) 144 #define IS_ISO7816_FLAGC(__FLAG__) ((__FLAG__) == ISO7816_FLAG_DMATXDONE) 145 146 /****************************** ISO7816 Instances *****************************/ 147 #define IS_ISO7816_ALL_INSTANCE(INSTANCE) (((INSTANCE) == ISO78160) || \ 148 ((INSTANCE) == ISO78161)) 149 150 /* Exported Functions ------------------------------------------------------- */ 151 void ISO7816_DeInit(ISO7816_Type *ISO7816x); 152 void ISO7816_StructInit(ISO7816_InitType *InitStruct); 153 void ISO7816_Init(ISO7816_Type *ISO7816x, ISO7816_InitType *Init_Struct); 154 void ISO7816_Cmd(ISO7816_Type *ISO7816x, uint32_t NewState); 155 void ISO7816_BaudrateConfig(ISO7816_Type *ISO7816x, uint32_t BaudRate); 156 void ISO7816_CLKDIVConfig(ISO7816_Type *ISO7816x, uint32_t Prescaler); 157 void ISO7816_CLKOutputCmd(ISO7816_Type *ISO7816x, uint32_t NewState); 158 void ISO7816_SendData(ISO7816_Type *ISO7816x, uint8_t ch); 159 uint8_t ISO7816_ReceiveData(ISO7816_Type *ISO7816x); 160 void ISO7816_INTConfig(ISO7816_Type *ISO7816x, uint32_t INTMask, uint8_t NewState); 161 uint8_t ISO7816_GetINTStatus(ISO7816_Type *ISO7816x, uint32_t INTMask); 162 void ISO7816_ClearINTStatus(ISO7816_Type *ISO7816x, uint32_t INTMask); 163 uint8_t ISO7816_GetFlag(ISO7816_Type *ISO7816x, uint32_t FlagMask); 164 void ISO7816_ClearFlag(ISO7816_Type *ISO7816x, uint32_t FlagMask); 165 uint8_t ISO7816_GetLastTransmitACK(ISO7816_Type *ISO7816x); 166 uint8_t ISO7816_GetLastReceiveCHKSUM(ISO7816_Type *ISO7816x); 167 168 #ifdef __cplusplus 169 } 170 #endif 171 172 #endif /* __LIB_ISO7816_H */ 173 174 /*********************************** END OF FILE ******************************/ 175