ISO7816_Init with more parameters, slave/master clock
diff --git a/firmware/include_board/iso7816_4.h b/firmware/include_board/iso7816_4.h
index a1dbdf0..662a280 100644
--- a/firmware/include_board/iso7816_4.h
+++ b/firmware/include_board/iso7816_4.h
@@ -26,7 +26,7 @@
* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
* ----------------------------------------------------------------------------
*/
-
+#include <stdbool.h>
//------------------------------------------------------------------------------
/** \file
*
@@ -67,7 +67,7 @@
/*------------------------------------------------------------------------------
* Exported functions
*----------------------------------------------------------------------------*/
-extern void ISO7816_Init( const Pin *pPinIso7816RstMC );
+extern void ISO7816_Init( const Pin *pPinIso7816RstMC, Usart *base_usart, bool master_clock );
extern void ISO7816_IccPowerOff(void);
extern uint32_t ISO7816_XfrBlockTPDU_T0(const uint8_t *pAPDU,
uint8_t *pMessage,
diff --git a/firmware/src_board/iso7816_4.c b/firmware/src_board/iso7816_4.c
index 2bfe578..077d24c 100644
--- a/firmware/src_board/iso7816_4.c
+++ b/firmware/src_board/iso7816_4.c
@@ -57,11 +57,6 @@
#define USART_SEND 0
#define USART_RCV 1
-#if !defined(BOARD_ISO7816_BASE_USART)
- #define BOARD_ISO7816_BASE_USART USART1
- #define BOARD_ISO7816_ID_USART ID_USART1
-#endif
-
/*-----------------------------------------------------------------------------
* Internal variables
*-----------------------------------------------------------------------------*/
@@ -619,16 +614,23 @@
/** Initializes a ISO driver
* \param pPinIso7816RstMC Pin ISO 7816 Rst MC
*/
-void ISO7816_Init( const Pin *pPinIso7816RstMC )
+void ISO7816_Init( const Pin *pPinIso7816RstMC, Usart *base_usart, bool master_clock )
{
+ uint32_t clk;
TRACE_DEBUG("ISO_Init\n\r");
/* Pin ISO7816 initialize */
st_pinIso7816RstMC = (Pin *)pPinIso7816RstMC;
- USART_Configure( BOARD_ISO7816_BASE_USART,
+ if (master_clock == true) {
+ clk = US_MR_USCLKS_MCK;
+ } else {
+ clk = US_MR_USCLKS_SCK;
+ }
+
+ USART_Configure( base_usart,
US_MR_USART_MODE_IS07816_T_0
- | US_MR_USCLKS_MCK
+ | clk
| US_MR_NBSTOP_1_BIT
| US_MR_PAR_EVEN
| US_MR_CHRL_8_BIT
@@ -640,21 +642,21 @@
/* Configure USART */
PMC_EnablePeripheral(BOARD_ISO7816_ID_USART);
/* Disable interrupts */
- BOARD_ISO7816_BASE_USART->US_IDR = (uint32_t) -1;
+ base_usart->US_IDR = (uint32_t) -1;
- BOARD_ISO7816_BASE_USART->US_FIDI = 372; /* by default */
+ base_usart->US_FIDI = 372; /* by default */
/* Define the baud rate divisor register */
/* CD = MCK / SCK */
/* SCK = FIDI x BAUD = 372 x 9600 */
/* BOARD_MCK */
/* CD = MCK/(FIDI x BAUD) = 48000000 / (372x9600) = 13 */
- BOARD_ISO7816_BASE_USART->US_BRGR = BOARD_MCK / (372*9600);
+ base_usart->US_BRGR = BOARD_MCK / (372*9600);
/* Write the Timeguard Register */
- BOARD_ISO7816_BASE_USART->US_TTGR = 5;
+ base_usart->US_TTGR = 5;
- USART_SetTransmitterEnabled(BOARD_ISO7816_BASE_USART, 1);
- USART_SetReceiverEnabled(BOARD_ISO7816_BASE_USART, 1);
+ USART_SetTransmitterEnabled(base_usart, 1);
+ USART_SetReceiverEnabled(base_usart, 1);
}
diff --git a/firmware/src_simtrace/ccid.c b/firmware/src_simtrace/ccid.c
index 3cc1311..5ddd7fb 100644
--- a/firmware/src_simtrace/ccid.c
+++ b/firmware/src_simtrace/ccid.c
@@ -162,7 +162,7 @@
/* power up the card */
// PIO_Set(&pinsPower[0]);
- ISO7816_Init( &pinIso7816RstMC ) ;
+ ISO7816_Init( &pinIso7816RstMC, USART_SIM, CLK_MASTER ) ;
/* Read ATR */
ISO7816_warm_reset() ;
diff --git a/firmware/src_simtrace/simtrace.h b/firmware/src_simtrace/simtrace.h
index 249a55b..8f689da 100644
--- a/firmware/src_simtrace/simtrace.h
+++ b/firmware/src_simtrace/simtrace.h
@@ -12,6 +12,9 @@
#define PHONE_DATAIN 5
#define PHONE_INT 6
+#define CLK_MASTER 1
+#define CLK_SLAVE 0
+
typedef struct ring_buffer
{
uint8_t buf[BUFLEN*2]; // data buffer