微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 请教MPC5602B UART2遇到的问题

请教MPC5602B UART2遇到的问题

时间:10-02 整理:3721RD 点击:
使用的是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;           // 清除发送完成标志位
}

搞定了,系统初始化里面ME.PCTL[48].R = 0x01;
要改成ME.PCTL[50].R = 0x01;
原来ME.PCTL[50].R = 0x01;是参考LIN0的代码,忘记改了

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top