Estoy buscando un buen tutorial o ayuda para trabajar con dos UART al mismo tiempo. Tengo UART1 conectado a un módem BT y UART0 conectado a un módem celular. Quiero poder tener una buena comunicación bidireccional entre los dos módems.
Aquí está mi código de ejemplo:
int main()
{
UART0_Init(19200); // Cell Modem
UART1_Init(19200); // Bluetooth Modem
while(1)
{
UART1_TxString("Please choose a menu option.\n\n");
UART1_TxString("1. Get Cell Modem Baud Rate\n");
do
{
option = UART1_RxChar();
}while((option<'1') || (option>'4'));
UART1_TxChar(option); // Echo option selected
UART1_TxString("\n\n");
switch(option)
{
case '1':
UART1_TxString("Sending AT#TCPATCONSER=?"); // Echo command sent
UART0_TxString("AT#TCPATCONSER=?"); // Send AT command to Modem
break;
// other menu options ...
}
while(1)
{
UART1_TxString(UART0_RxString()); // Receive response from cell modem and send to BT modem
}
}
}
UART TX y RX
char UART_RxChar(uint8_t var_uartChannel_u8)
{
char ch = 0;
switch(var_uartChannel_u8)
{
case 0:
while(util_IsBitCleared(UCSR0A,RXC0));
ch = UDR0;
break;
case 1:
while(util_IsBitCleared(UCSR1A,RXC1));
ch = UDR1;
break;
}
return ch;
}
void UART_TxChar(uint8_t v_uartChannel_u8, char v_uartData_u8)
{
if(v_uartChannel_u8 == C_UartZero_U8)
{
while(util_IsBitCleared(UCSR0A,UDRE0));
UDR0 =v_uartData_u8;
}
else if(v_uartChannel_u8 == C_UartOne_U8)
{
while(util_IsBitCleared(UCSR1A,UDRE1));
UDR1 =v_uartData_u8;
}
}