Estoy intentando conectar un chip dsPIC33EP con un dispositivo RS232 a una velocidad de baudios = 460800. Mi código funciona bien, pero creo que debe haber una mejor manera de hacerlo. Aquí está el código:
void getData(unsigned char *Data) {
int i=3;//EDIT: unsigned was removed
UART1_Write(0x00);
UART1_Write(0x86); //send two bytes of command to request data(4 bytes) back
while (1) {
if (U1STA.URXDA) { // check if there is a byte available
Data[i--]=U1RXREG; // shift a byte from UART1 internal receive buffer
}
if (i == -1) break;
}
}
Sondea el nuevo bit de byte disponible constantemente hasta que lee los cuatro bytes. La velocidad en baudios es muy rápida, así que creo que no hay problema para que esta función sea una llamada de bloqueo.
Aquí hay otra versión:
void getData(unsigned char *Data){
UART1_Write(0x00);UART1_Write(0x86);//send two bytes of command to request data(4 bytes) back
*(Data+3)=U1RXREG;
*(Data+2)=U1RXREG;
*(Data+1)=U1RXREG;
*(Data)=U1RXREG;
}
Debido a que espero que ingresen exactamente cuatro bytes, y el búfer FIFO en el chip dsPic es cuatro, no tengo que preocuparme por la saturación. El chip se ejecuta a 120MHZ.
Según las pruebas, ambos funcionan pero mi aplicación es sensible al tiempo y quiero evitar cualquier posible error. ¿Qué camino es mejor? ¿O hay una mejor manera de hacer esto?