Estoy usando PIC32 y tengo pocas entradas. Quiero que se dispare un UART Tx Interrupt
cada vez que cualquier entrada se convierta en ALTO. De alguna manera he logrado escribir código para UART tx y rx interrupt y está funcionando, pero no tengo idea de cómo implementarlo para mi aplicación.
int main()
{
//configure UART
UARTConfigure(UART1, UART_ENABLE_PINS_TX_RX_ONLY);
UARTSetFifoMode(UART1, UART_INTERRUPT_ON_TX_NOT_FULL | UART_INTERRUPT_ON_RX_NOT_EMPTY);
UARTSetLineControl(UART1, UART_DATA_SIZE_8_BITS | UART_PARITY_NONE | UART_STOP_BITS_1);
UARTSetDataRate(UART1, FPB, 115200);
UARTEnable(UART1, UART_ENABLE_FLAGS(UART_PERIPHERAL | UART_RX | UART_TX));
// Configure UART Interrupt
INTEnable(INT_SOURCE_UART_RX(UART1), INT_ENABLED);
INTSetVectorPriority(INT_VECTOR_UART(UART1), INT_PRIORITY_LEVEL_2);
INTSetVectorSubPriority(INT_VECTOR_UART(UART1), INT_SUB_PRIORITY_LEVEL_0);
// Enable multi-vector interrupts
INTConfigureSystem(INT_SYSTEM_CONFIG_MULT_VECTOR);
INTEnableInterrupts();
while(1)
{
//main code
}
}
void __ISR(_UART1_VECTOR, ipl2) IntUart1Handler(void)
{
// RX interrupt
if(INTGetFlag(INT_SOURCE_UART_RX(UART1)))
{
// Clear the RX interrupt Flag
INTClearFlag(INT_SOURCE_UART_RX(UART1));
// Echo what we just received.
char RxBuffer[5];
if((U1STAbits.URXDA)!=0)
{
getsUART1(5,RxBuffer , 123);
U1STAbits.URXDA = 0;
U1STAbits.OERR = 0;
putsUART1(RxBuffer);
putsUART1("\n");
memset(RxBuffer,0,5*sizeof(char));
}
}
// TX interrupt
if ( INTGetFlag(INT_SOURCE_UART_TX(UART1)) )
{
INTClearFlag(INT_SOURCE_UART_TX(UART1));
}
}
No sé qué lógica debo hacer para que, si alguna entrada se convierte en ALTA, digamos
if(INPUT1 == HIGH)
{
//generate UART tx interrupt
}
Por favor ayuda. Gracias!