Soy muy nuevo en los chips PIC32 (o en cualquier chip PIC) y estoy tratando de crear un controlador de interrupciones para que se llame el UART cuando el UART recibe un byte. Estoy utilizando el procesador PIC32MX695F512L PIC32 con compilador C32 2.00 en una placa de desarrollo.
Encontré este código de ejemplo en otro proyecto en línea. Los comentarios me llevaron a creer que esta interrupción se llamaría cada vez que el UART recibe un byte. Agregué un punto de interrupción a esta función y un contador estático para contar cuántas veces se ha ejecutado esta función.
En otras partes del código fuente, puedo enviar BYTES fuera de la UART y mi PC los está reactivando. He intentado enviar BYTES a la UART desde mi PC, pero esta función nunca se activa y el contador de funciones ( UART1Info_count
) nunca aumenta.
Código fuente
static BYTE UART1Info_LastByteRXed ;
static UINT32 UART1Info_count ; // Init elsewhere
BOOL Uart_Connect ( ) {
UART1Info_count = 0 ;
UART1Init();
UARTConfigure (UART1, UART_ENABLE_PINS_TX_RX_ONLY);
UARTSetFifoMode (UART1, UART_INTERRUPT_ON_RX_NOT_EMPTY);
UARTSetLineControl (UART1, UART_DATA_SIZE_8_BITS | UART_PARITY_NONE | UART_STOP_BITS_1 );
UARTSetDataRate (UART1, GetPeripheralClock(), 9600) ;
UARTEnable (UART1, UART_ENABLE_FLAGS(UART_PERIPHERAL | UART_RX | UART_TX));
INTEnable (INT_SOURCE_UART_RX(UART1), INT_ENABLED);
INTEnable (INT_SOURCE_UART_TX(UART1), INT_ENABLED);
// Set Interrupt priorities
INTSetVectorPriority (INT_VECTOR_UART(UART1), INT_PRIORITY_LEVEL_2);
INTSetVectorSubPriority (INT_VECTOR_UART(UART1), INT_SUB_PRIORITY_LEVEL_0);
// configure for multi-vectored mode
INTConfigureSystem (INT_SYSTEM_CONFIG_MULT_VECTOR);
INTEnableInterrupts ();
Rs485RxLineConfig();
Rs485TxLineConfig();
Rs485TxDisable();
Rs485RxEnable();
return TRUE ;
}
#define __UART_1_ISR __ISR(_UART_1_VECTOR, ipl4)
void __UART_1_ISR UART_1_InterruptRoutine(void)
{
UART1Info_count++ ;
IFS0CLR = _IFS0_U1RXIF_MASK;
UART1Info_LastByteRXed = UART1ReceivedValue();
UART1TransmitTestASCIICharacters( (UART1Info_LastByteRXed+1), 1); //reflect back character, incremented by 1
}
Otra información
- Procesador: PIC32MX695F512L
- Compilador: C32 v2.00
- IDE: MPLAB X IDE
Mi pregunta
¿Cómo creo un manejador de interrupciones al recibir BYTE a través de UART en PIC32 con el compilador C32 v2.00?
Nota: Ejemplo de código fuente actualizado con UART init ()