I'm trying to run the example scia_loopback_interrupts as an guide line for my application on SCIA and SCIB. I created two sifferent applications, and each of them is for SCIA and SCIB, respectively. Both applications worked perfectly well. However, when I have them joint together, only SCIA worked, and SCIB did not work at all. I understood that SCIA has higher priority than SCIB, but when SCIA (TX/RX) does not interrupt, SCIB interrupt should run when the SCIB port receive a character. Is there any other setting in the initilization that I missed?
Here is my code
////////////////////////////////////// SCIA Port /////////////////////////////////////////////////
interrupt void sciaTxFifoIsr(void)
{
SciaRegs.SCIFFTX.bit.TXFFINTCLR=1; // Clear SCI Interrupt flag
PieCtrlRegs.PIEACK.all|=0x100; // Issue PIE ACK
}
interrupt void sciaRxFifoIsr(void)
{
SciaRegs.SCITXBUF = 0x41; // send an "A"
SciaRegs.SCIFFRX.bit.RXFFOVRCLR=1; // Clear Overflow flag
SciaRegs.SCIFFRX.bit.RXFFINTCLR=1; // Clear Interrupt flag
PieCtrlRegs.PIEACK.all|=0x100; // Issue PIE ack
}
void scia_fifo_init()
{
SciaRegs.SCICCR.bit.SCICHAR = 7; // 1 stop bit, No loopback
// No parity,8 char bits,
SciaRegs.SCICCR.bit.LOOPBKENA = 1; // Disable loop back test mode
// async mode, idle-line protocol
SciaRegs.SCICTL1.all =0x0000; // disenable TX, RX, internal SCICLK,
// Disable RX ERR, SLEEP, TXWAKE
// Issue software reset
SciaRegs.SCICTL2.bit.TXINTENA =1; // Enable TXRDY interrupt
SciaRegs.SCICTL2.bit.RXBKINTENA =1; // Enable RXRYD/BRKDT interrupt
SciaRegs.SCIHBAUD = 0x0001;
SciaRegs.SCILBAUD = 0x0044;
SciaRegs.SCIFFTX.bit.SCIRST = 1; // Resume SCI FIFO TX/RX
SciaRegs.SCIFFTX.bit.SCIFFENA = 1; // Enable SCI FIFO enhancement
SciaRegs.SCIFFTX.bit.TXFFIENA = 1; // TX FIFO interrupt based on TXFFIVL match
SciaRegs.SCIFFTX.bit.TXFFIL = 8; // TX FIFO interrupt level bits
SciaRegs.SCIFFRX.bit.RXFFIENA = 1; // RX FIFO interrupt based on RXFFIVL match
SciaRegs.SCIFFRX.bit.RXFFIL = 8; // RX FIFO interrupt leval bits
SciaRegs.SCIFFCT.all=0x00;
SciaRegs.SCICTL1.bit.SWRESET = 1; // Re-eable SCI from Reset above
SciaRegs.SCICTL1.bit.RXENA = 1; // Enable RX SCI and send character to SCIRXEMUa nd SCIRXBUF
SciaRegs.SCICTL1.bit.TXENA = 1; // TX enable
SciaRegs.SCIFFTX.bit.TXFIFOXRESET=1; // Re-enable TX FIFO operation
SciaRegs.SCIFFRX.bit.RXFIFORESET=1; // Re-enable RX FIFO operation
SciaRegs.SCICCR.bit.LOOPBKENA = 0; // Disable loop back test mode
}
////////////////////////////////////// SCIB Port /////////////////////////////////////////////////
interrupt void scibTxFifoIsr(void)
{
ScibRegs.SCIFFTX.bit.TXFFINTCLR=1; // Clear Interrupt flag
PieCtrlRegs.PIEACK.all|=0x100; // Issue PIE ACK
}
interrupt void scibRxFifoIsr(void)
{
ScibRegs.SCITXBUF = 0x42; // send a "B"
ScibRegs.SCIFFRX.bit.RXFFOVRCLR=1; // Clear Overflow flag
ScibRegs.SCIFFRX.bit.RXFFINTCLR=1; // Clear Interrupt flag
PieCtrlRegs.PIEACK.all|=0x100; // Issue PIE ack
}
void scib_fifo_init()
{
ScibRegs.SCICCR.bit.SCICHAR =7; // 1 stop bit, No loopback
// No parity,8 char bits,
// async mode, idle-line protocol
ScibRegs.SCICCR.bit.LOOPBKENA = 1; // Enable loop back test mode
ScibRegs.SCICTL1.all =0x0000; // SCI software reset
ScibRegs.SCICTL2.bit.TXINTENA = 1; // Enable TXRDY interrupt
ScibRegs.SCICTL2.bit.RXBKINTENA = 1; // Enable RXRYD/BRKDT interrupt
ScibRegs.SCIHBAUD =0x0001;
ScibRegs.SCILBAUD =0x0044;
ScibRegs.SCIFFTX.bit.SCIRST = 1; // Resume SCI FIFO TX/RX
ScibRegs.SCIFFTX.bit.SCIFFENA = 1; // Enable SCI FIFO enhancement
ScibRegs.SCIFFTX.bit.TXFFIENA = 1; // TX FIFO interrupt based on TXFFIVL match
ScibRegs.SCIFFTX.bit.TXFFIL = 8; // TX FIFO interrupt level bits
ScibRegs.SCIFFRX.bit.RXFFIENA = 1; // RX FIFO interrupt based on RXFFIVL match
ScibRegs.SCIFFRX.bit.RXFFIL = 8; // RX FIFO interrupt leval bits
ScibRegs.SCIFFCT.all=0x00; // FIFO delay
ScibRegs.SCICTL1.bit.SWRESET = 1; // Re-eable SCI from Reset above
ScibRegs.SCICTL1.bit.RXENA = 1; // Enable RX SCI and send character to SCIRXEMUa nd SCIRXBUF
ScibRegs.SCICTL1.bit.TXENA = 1; // TX enable
ScibRegs.SCIFFTX.bit.TXFIFOXRESET=1; // Re-enable TX FIFO operation
ScibRegs.SCIFFRX.bit.RXFIFORESET=1; // Re-enable RX FIFO operation
ScibRegs.SCICCR.bit.LOOPBKENA = 0; // Disable loop back test mode
}