Your UART initialisation code should look like this, unless you are using Harmony framework in which case you need to check Harmony configuration, and harmony is quite buggy.
In either case you can reinit the uart after Harmony finished its own init.
void initU1ART(void) {
U1MODE = 0x0000;
U1STAbits.URXEN = 1; // Enable RX
U1STAbits.UTXEN = 1; // Enable TX
U1BRG = ((_PBCLK / _UARTspeed) / 16) - 1;
IPC9bits.U1RXIP = 3; // set IPL 3
IPC9bits.U1RXIS = 2; // sub-priority 2
IFS1bits.U1RXIF = 0; //!< Clear the Recieve Interrupt Flag
IEC1bits.U1RXIE = 1; //!< Enable Recieve Interrupts
U1STAbits.URXISEL = 0; //!where receive one character
U1MODEbits.ON = 1; //!< U1ART ON
U1STASET = 0x1400;
}
The important bit is IEC1bits.U1RXIE = 1; to enable the interrupt.
The IECxx register (as well as the others) might change from one chip to another, search "U1RXIE" on the datasheet to find the correct register for your chip.
EDIT:
Your interrupt is not enabled as IEC0 = 0x08000010; which makes bit 27 for the uart rx interrupt enable at 0.
You can add this after the your init: IEC0bits.U1ARXIE = 1;
U1BRG = 0x0A; // baud rate 115200
U1MODE = 0x8080; // set the ON bit and
U1STA = 0x5400; // set the transmit bit and
IEC0 = 0x08000010; // interrupt receive bit
IEC0bits.U1ARXIE = 1;
IFS0 = 0x18000010; // interrupt receive flag
IPC6 = 0x0000001F;
EDIT:
Don't forget reseting the errors from the main loop:
if (U2STAbits.OERR) U2STAbits.OERR = 0;
if (U2STAbits.PERR) U2STAbits.PERR = 0;
if (U2STAbits.FERR) U2STAbits.FERR = 0;