This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

TiM4123 MCU 两串口收发数据奇怪现象,程序出现了什么问题?

您好: 我把lanchpad 的Uart5和Uart7收发短接起来,测试收 发,主要程序如下。

#define MASTERUARTBASE  UART7_BASE
#define SLAVERUARTBASE  UART5_BASE
#define UARTBAUD  115200

unsigned int imasterrevdat[16];
unsigned int iindexm = 0;

unsigned int islaverrevdat[16];
unsigned int iindexs = 0;

void
PortFunctionInit(void)
{
    MAP_SysCtlPeripheralEnable(SYSCTL_PERIPH_UART5);
    MAP_SysCtlPeripheralEnable(SYSCTL_PERIPH_UART7);
    MAP_SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOE);


    MAP_GPIOPinConfigure(GPIO_PE5_U5TX);
    MAP_GPIOPinTypeUART(GPIO_PORTE_BASE, GPIO_PIN_5);

    MAP_GPIOPinConfigure(GPIO_PE4_U5RX);
    MAP_GPIOPinTypeUART(GPIO_PORTE_BASE, GPIO_PIN_4);


    MAP_GPIOPinConfigure(GPIO_PE0_U7RX);
    MAP_GPIOPinTypeUART(GPIO_PORTE_BASE, GPIO_PIN_0);

    MAP_GPIOPinConfigure(GPIO_PE1_U7TX);
    MAP_GPIOPinTypeUART(GPIO_PORTE_BASE, GPIO_PIN_1);
    
    MAP_UARTConfigSetExpClk(MASTERUARTBASE, MAP_SysCtlClockGet(), UARTBAUD,
                            (UART_CONFIG_WLEN_8 | UART_CONFIG_STOP_ONE |
                             UART_CONFIG_PAR_NONE));
    MAP_UARTConfigSetExpClk(SLAVERUARTBASE, MAP_SysCtlClockGet(), UARTBAUD,
                            (UART_CONFIG_WLEN_8 | UART_CONFIG_STOP_ONE |
                             UART_CONFIG_PAR_NONE));

}

int
main(void)
{
    unsigned int i = 0;

    SysCtlClockSet(SYSCTL_SYSDIV_4|SYSCTL_USE_PLL|SYSCTL_XTAL_16MHZ|
                    SYSCTL_OSC_MAIN);

    PortFunctionInit();
    
    MAP_IntMasterEnable();
    
    MAP_IntEnable(INT_UART5);
    MAP_UARTIntEnable(SLAVERUARTBASE  , UART_INT_RX | UART_INT_RT);
    
    MAP_IntEnable(INT_UART7);
    MAP_UARTIntEnable(MASTERUARTBASE  , UART_INT_RX | UART_INT_RT);
    

    while(1)
    {

      for(i = 0;i<=0xF;i++)
      {
          while(!UARTCharPutNonBlocking(MASTERUARTBASE  ,i));
          SysCtlDelay(SysCtlClockGet() / (500 * 3));
      }

      for(i = 0;i<=0xF;i++)
      {
          while(!UARTCharPutNonBlocking(SLAVERUARTBASE  ,i));
          SysCtlDelay(SysCtlClockGet() / (500 * 3));
      }
    }

}


void MasterReceiveIsr(void)
{
    uint32_t ui32Status;

    ui32Status = MAP_UARTIntStatus(MASTERUARTBASE, true);

    MAP_UARTIntClear(MASTERUARTBASE, ui32Status);

    while(MAP_UARTCharsAvail(MASTERUARTBASE))
    {
        imasterrevdat[iindexm++] = MAP_UARTCharGetNonBlocking(MASTERUARTBASE);
    }
}

void SlaverReceiveIsr(void)
{
    uint32_t ui32Status;

    ui32Status = MAP_UARTIntStatus(SLAVERUARTBASE, true);

    MAP_UARTIntClear(SLAVERUARTBASE, ui32Status);

    while(MAP_UARTCharsAvail(SLAVERUARTBASE))
    {
        islaverrevdat[iindexs++] = MAP_UARTCharGetNonBlocking(SLAVERUARTBASE);
    }
}

第一个循环

第二个循环

以后的几次循环

请指点一下,怎么会这样?哪里出现问题了,