请教MPC5602B UART2遇到的问题

2019-07-15 17:22发布

使用的是MPC5602B 100脚芯片,UART2总是卡在while(LINFLEX_2.UARTSR.B.DTF == 0); 过不去,看了一下LINFLEX_2.LINCR2.B.IOBE为1,请教是什么原因?下面是初始化和UART2发送的代码:
/************************************************************/
/*                       初始化SIU                          */
/************************************************************/
void init_SIU(void)
{
        SIU.PCR[40].R = 0x0600;    // 将PC[8]设置为LINFlex_2.TxDA
        SIU.PCR[41].R = 0x0100;    // 将PC[9]设置为LINFlex_2.RxDA
}

/************************************************************/
/*                       初始化uart2                        */
/************************************************************/
void LINFlex2_init(void)
{
  //配置LINFlex
  LINFLEX_2.LINCR1.B.INIT   = ENABLE;   // 请求初始化
  LINFLEX_2.LINCR1.B.SLEEP  = DISABLE;  // 禁止睡眠模式
  LINFLEX_2.LINCR1.B.BF     = DISABLE;  // 如果ID不匹配不产生中断

  LINFLEX_2.UARTCR.B.UART   = 1;        // 进入UART模式
  //LINFLEX_2.UARTCR.B.RXEN   = ENABLE;   // 允许接收
  LINFLEX_2.UARTCR.B.TXEN   = ENABLE;   // 允许发送
  LINFLEX_2.UARTCR.B.WL     = 1;        // 8位数据位
  //LINFLEX_2.UARTCR.B.OP     = 1;      // 偶校验
  LINFLEX_2.UARTCR.B.PCE    = DISABLE;  // 禁止奇偶校验
  LINFLEX_2.UARTCR.B.TDFL   = 0;        // 发送缓冲区为1个字节
  LINFLEX_2.UARTCR.B.RDFL   = 0;        // 接收缓冲区为1个字节

  //设置波特率为9600
  LINFLEX_2.LINIBRR.B.DIV_M = 416;      // Baud Rate = 9600, In Case fipg_clock_lin = 64 MHz
  LINFLEX_2.LINFBRR.B.DIV_F = 11;       // Baud Rate = 9600, In Case fipg_clock_lin = 64 MHz

  //配置中断,使能中断功能
  //LINFLEX_2.LINIER.B.DRIE   = ENABLE;   // 数据接收完成中断

  //配置中断,禁止中断功能
  LINFLEX_2.UARTSR.B.DRF    = 1;        // 清除接收完成标志
  LINFLEX_2.UARTSR.B.DTF    = 1;        // 清除发送完成标志
  //INTC.PSR[119].R = 0x01;                //设置UART2的中断优先级为1
  LINFLEX_2.LINCR1.B.INIT   = DISABLE;  // 变为正常模式
}


/************************************************************/
/*                    UART2发送一字节                       */
/************************************************************/
void UART2_TX(unsigned char data)
{
  LINFLEX_2.BDRL.B.DATA0 = data;        // 写入需发送的数据

  //while(LINFLEX_2.LINCR2.B.IOBE==1);
  while(LINFLEX_2.UARTSR.B.DTF == 0);   // 等待发送完成
  LINFLEX_2.UARTSR.B.DTF = 1;           // 清除发送完成标志位
}


友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。