Receiver interrupt enabled
Serial smartcard reader sends data which should be processed.
In the USART1 IRQ a status variable is set to show that data has
arrived, which should be checked for in the main function.
diff --git a/sam3s_example/mains/phone_test.c b/sam3s_example/mains/phone_test.c
index 137fcb9..2a88dbe 100644
--- a/sam3s_example/mains/phone_test.c
+++ b/sam3s_example/mains/phone_test.c
@@ -113,9 +113,7 @@
void USART1_IrqHandler( void )
{
uint32_t stat;
-// printf(":>");
char_stat = 0;
- return;
// Rcv buf full
/* if((stat & US_CSR_RXBUFF) == US_CSR_RXBUFF) {
TRACE_DEBUG("Rcv buf full");
@@ -124,19 +122,22 @@
*/
uint32_t csr = USART_PHONE->US_CSR;
+// printf(".\n\r");
+
if (csr & US_CSR_TXRDY) {
/* transmit buffer empty, nothing to transmit */
}
+ if (csr & US_CSR_RXRDY) {
+ stat = (csr&(US_CSR_OVRE|US_CSR_FRAME|
+ US_CSR_PARE|US_CSR_TIMEOUT|US_CSR_NACK|
+ (1<<10)));
- stat = (csr&(US_CSR_OVRE|US_CSR_FRAME|
- US_CSR_PARE|US_CSR_TIMEOUT|US_CSR_NACK|
- (1<<10)));
-
- if (stat == 0 ) {
- /* Get a char */
- rcvdChar = ((USART_PHONE->US_RHR) & 0xFF);
- } /* else: error occured */
- char_stat = stat;
+ if (stat == 0 ) {
+ /* Get a char */
+ rcvdChar = ((USART_PHONE->US_RHR) & 0xFF);
+ } /* else: error occured */
+ char_stat = stat;
+ }
}
static void ISR_PhoneRST( const Pin *pPin)
@@ -283,14 +284,15 @@
/* Configure USART */
PMC_EnablePeripheral(ID_USART_PHONE);
- // USART_EnableIt( USART1, US_IER_RXRDY|US_IER_TXRDY) ;
+ USART1->US_IDR = 0xffffffff;
+ USART_EnableIt( USART1, US_IER_RXRDY) ;
/* enable USART1 interrupt */
- //NVIC_EnableIRQ( USART1_IRQn ) ;
+ NVIC_EnableIRQ( USART1_IRQn ) ;
// USART_PHONE->US_IER = US_IER_RXRDY | US_IER_OVRE | US_IER_FRAME | US_IER_PARE | US_IER_NACK | US_IER_ITER;
USART_SetTransmitterEnabled(USART_PHONE, 1);
- //USART_SetReceiverEnabled(USART_PHONE, 1);
+ USART_SetReceiverEnabled(USART_PHONE, 1);
}
@@ -377,7 +379,8 @@
// printf("Nothing to do\n\r");
}
if (rcvdChar != 0) {
- printf("Received _%x_ ", rcvdChar);
+ printf("Received _%x_ \n\r", rcvdChar);
+ rcvdChar = 0;
}
}
return 0 ;