Đã fix được lỗi, mình đã cấu hình đươc cả 6 uart chạy, có điều nếu như cấu hình ngắt uart phải chú ý trong hàm ngăt phải xóa bit OERR trong thanh ghi UxSTA.
Nhưng lại gặp một vấn đề là khi dùng các UART 1B,2B,3B,2A,ngắt nhận xảy ra liên tục mặc dùng chân RX không co tín hiệu.
Anh Nam và mọi người giải thích cho mình với ạ
Code:
void initUart(UART_MODULE id,unsigned int baudrate)
{
UARTConfigure(id,UART_ENABLE_PINS_TX_RX_ONLY);
UARTSetFifoMode(id,UART_INTERRUPT_ON_TX_NOT_FULL | UART_INTERRUPT_ON_RX_NOT_EMPTY);
UARTSetLineControl(id, UART_DATA_SIZE_8_BITS | UART_PARITY_NONE | UART_STOP_BITS_1);
UARTSetDataRate (id, 10000000, baudrate); //simple 9600 baud
UARTEnable(id, UART_ENABLE_FLAGS(UART_PERIPHERAL | UART_RX | UART_TX));
// Configure UART2 RX Interrupt
INTEnable(INT_SOURCE_UART_RX(id), INT_ENABLED);
INTSetVectorPriority(INT_VECTOR_UART(id), INT_PRIORITY_LEVEL_3);
INTSetVectorSubPriority(INT_VECTOR_UART(id), INT_SUB_PRIORITY_LEVEL_0);
}
void UART_send_byte(UART_MODULE id,unsigned char byte)
{
while(!UARTTransmitterIsReady(id));
UARTSendDataByte(id, byte);
while(!UARTTransmissionHasCompleted(id));
}
void __ISR(_UART_2B_VECTOR, ipl3) IntUart2bHandle(void)
{
// Is this an RX interrupt?
if(U2BSTAbits.FERR==0)
{
}else U2BSTAbits.FERR=0;
if(IFS2bits.U2BRXIF ==1)
{
IFS2bits.U2BRXIF = 0;
LED = 1;
}
U2BSTAbits.OERR=0;
}