diff options
author | Christina Quast <chrysh.ng+git@gmail.com> | 2015-04-16 11:08:32 +0200 |
---|---|---|
committer | Christina Quast <chrysh.ng+git@gmail.com> | 2015-04-16 11:08:32 +0200 |
commit | 68cc85987003f518d999a032be95252d538ff617 (patch) | |
tree | fab90dcb10e1f12ab1ce8721572aef80bf287925 /firmware | |
parent | ec9c09e9b9e06b1293dd9806aa7559a1b45adf11 (diff) |
iso7816_4.c: Moved around lines, only sniffer works
Diffstat (limited to 'firmware')
-rw-r--r-- | firmware/src_board/iso7816_4.c | 35 |
1 files changed, 27 insertions, 8 deletions
diff --git a/firmware/src_board/iso7816_4.c b/firmware/src_board/iso7816_4.c index 59598ca..0f27657 100644 --- a/firmware/src_board/iso7816_4.c +++ b/firmware/src_board/iso7816_4.c @@ -137,7 +137,16 @@ uint32_t ISO7816_SendChar( uint8_t CharToSend, Usart_info *usart ) } /* Wait USART ready for transmit */ - while((us_base->US_CSR & US_CSR_TXRDY) == 0) {} + int i = 0; + while((us_base->US_CSR & (US_CSR_TXRDY)) == 0) { + i++; + if (!(i%1000000)) { + printf("s: %x\n", us_base->US_CSR); + printf("s: %x\n", us_base->US_RHR & 0xFF); + us_base->US_CR = US_CR_RSTTX; + us_base->US_CR = US_CR_RSTRX; + } + } /* There is no character in the US_THR */ /* Transmit a char */ @@ -148,12 +157,12 @@ uint32_t ISO7816_SendChar( uint8_t CharToSend, Usart_info *usart ) (1<<10))); if (status != 0 ) { - TRACE_DEBUG("******* status: 0x%" PRIX32 " (Overrun: %" PRIX32 + TRACE_INFO("******* status: 0x%" PRIX32 " (Overrun: %" PRIX32 ", NACK: %" PRIX32 ", Timeout: %" PRIX32 ", underrun: %" PRIX32 ")\n\r", status, ((status & US_CSR_OVRE)>> 5), ((status & US_CSR_NACK) >> 13), ((status & US_CSR_TIMEOUT) >> 8), ((status & (1 << 10)) >> 10)); - TRACE_DEBUG("E (USART CSR reg):0x%" PRIX32 "\n\r", us_base->US_CSR); - TRACE_DEBUG("Nb (Number of errors):0x%" PRIX32 "\n\r", us_base->US_NER ); + TRACE_INFO("E (USART CSR reg):0x%" PRIX32 "\n\r", us_base->US_CSR); + TRACE_INFO("Nb (Number of errors):0x%" PRIX32 "\n\r", us_base->US_NER ); us_base->US_CR = US_CR_RSTSTA; } @@ -640,6 +649,11 @@ void ISO7816_Init( Usart_info *usart, bool master_clock ) Usart *us_base = usart->base; uint32_t us_id = usart->id; + us_base->US_CR = US_CR_RSTRX + | US_CR_RSTTX + | US_CR_RXDIS + | US_CR_TXDIS; + if (master_clock == true) { clk = US_MR_USCLKS_MCK; } else { @@ -653,28 +667,33 @@ void ISO7816_Init( Usart_info *usart, bool master_clock ) | US_MR_PAR_EVEN | US_MR_CHRL_8_BIT | US_MR_CLKO - | (0<<24), /* MAX_ITERATION */ + | US_MR_INACK /* Inhibit errors */ + | (3<<24), /* MAX_ITERATION */ 1, 0); - /* Configure USART */ - PMC_EnablePeripheral(us_id); /* Disable interrupts */ us_base->US_IDR = (uint32_t) -1; + /* Configure USART */ + PMC_EnablePeripheral(us_id); + us_base->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 */ - us_base->US_BRGR = BOARD_MCK / (372*9600); + us_base->US_BRGR = US_BRGR_CD(1); +// us_base->US_BRGR = BOARD_MCK / (372*9150); /* Write the Timeguard Register */ +// us_base->US_RTOR = 0; us_base->US_TTGR = 5; USART_SetTransmitterEnabled(us_base, 1); USART_SetReceiverEnabled(us_base, 1); + us_base->US_RHR; } |