¿Cómo generar una interrupción UART para GPIOs?

0

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!

    
pregunta user46573544

1 respuesta

1

Usar pseudo-código:

if(INPUT1 == HIGH)
{
    //fill Tx FIFO buffer with some data, which causes UART Tx interrupt
}

La interrupción de UART TX se dispara cuando el búfer UART TX FIFO se llena con datos.

    
respondido por el Junior

Lea otras preguntas en las etiquetas