unsigned char USART_ReadBuffer(AT91S_USART *usart, void *buffer, unsigned int size) { // Check if the first PDC bank is free if ((usart->US_RCR == 0) && (usart->US_RNCR == 0)) { usart->US_RPR = (unsigned int) buffer; usart->US_RCR = size; usart->US_PTCR = AT91C_PDC_RXTEN; return 1; } // Check if the second PDC bank is free else if (usart->US_RNCR == 0) { usart->US_RNPR = (unsigned int) buffer; usart->US_RNCR = size; return 1; } else { return 0; } }