Tengo un problema al intentar probar enviar y recibir líneas en la comunicación RS485, ¿alguien sabe qué puede causar un problema aquí? Funciona sin interrupción pero con interrupción no funcionará. Estoy trabajando en NXP LPC1788, y tratando de hacer un programa de eco de interrupción para RS485 (lo que envío, me envía de vuelta al terminal). Gracias de antemano.
int main(void) {
uart2()
NVIC_EnableIRQ(UART2_IRQn);
while(1) {
} //while
} //main
void receive(void) {
SMR_485RECEIVE; //Receive data flow
delay_1_ms();
delay_1_ms();
receive_byte = LPC_UART2->RBR;
}
void send(void) {
SMR_485TRANSMIT; //Transmit data flow
delay_1_ms();
delay_1_ms();
LPC_UART2->THR = receive_byte;
}
void UART2_IRQHandler(void) __irq {
BYTE tip = LPC_UART2->IIR & 0x06;
if((tip == 0x04) && !(LPC_UART2->RBR == 'void receive(void) {
SMR_485RECEIVE;
delay_1_micro();
receive_byte = LPC_UART2->RBR;
}
void send(void) {
SMR_485TRANSMIT;//Transmit data flow
delay_1_micro();
LPC_UART2->THR = receive_byte;
}
void UART2_IRQHandler(void) __irq {
BYTE tip = LPC_UART2->IIR & 0x06;
if(tip == 0x04){
receive();
delay_1_micro();
send();
}
}
')){
receive();
delay_1_ms();
send();
}
}
Si tengo razón antes de enviar necesito llamar a SMR_485TRANSMIT y luego almacenar BYTE en el registro de datos de salida THR, cuando deseo recibir el byte, llamo a SMR_485RECEIVE y luego almacenar datos del registro de datos de entrada RBR a la variable receive_byte Eliminé los retrasos de 1 ms y mi código se ve así ahora mismo:
int main(void) {
uart2()
NVIC_EnableIRQ(UART2_IRQn);
while(1) {
} //while
} //main
void receive(void) {
SMR_485RECEIVE; //Receive data flow
delay_1_ms();
delay_1_ms();
receive_byte = LPC_UART2->RBR;
}
void send(void) {
SMR_485TRANSMIT; //Transmit data flow
delay_1_ms();
delay_1_ms();
LPC_UART2->THR = receive_byte;
}
void UART2_IRQHandler(void) __irq {
BYTE tip = LPC_UART2->IIR & 0x06;
if((tip == 0x04) && !(LPC_UART2->RBR == 'void receive(void) {
SMR_485RECEIVE;
delay_1_micro();
receive_byte = LPC_UART2->RBR;
}
void send(void) {
SMR_485TRANSMIT;//Transmit data flow
delay_1_micro();
LPC_UART2->THR = receive_byte;
}
void UART2_IRQHandler(void) __irq {
BYTE tip = LPC_UART2->IIR & 0x06;
if(tip == 0x04){
receive();
delay_1_micro();
send();
}
}
')){
receive();
delay_1_ms();
send();
}
}
Pero no funciona, no entiendo cuál es el problema en mi código al cambiar la dirección del flujo de datos.