查看: 2800|回复: 1

[MPC] 请教MPC5602B UART2遇到的问题

[复制链接]

该用户从未签到

2

主题

4

帖子

0

新手上路

Rank: 1

积分
28
最后登录
2017-9-1
发表于 2017-4-5 17:50:24 | 显示全部楼层 |阅读模式
用的是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;           // 清除发送完成标志位
}
我知道答案 目前已有1人回答
回复

使用道具 举报

该用户从未签到

2

主题

4

帖子

0

新手上路

Rank: 1

积分
28
最后登录
2017-9-1
 楼主| 发表于 2017-4-5 19:07:20 | 显示全部楼层
搞定了,系统初始化里面ME.PCTL[48].R = 0x01;
要改成ME.PCTL[50].R = 0x01;
原来ME.PCTL[50].R = 0x01;是参考LIN0的代码,忘记改了
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 注册/登录

本版积分规则

关闭

站长推荐上一条 /3 下一条

Archiver|手机版|小黑屋|恩智浦技术社区

GMT+8, 2025-9-11 10:51 , Processed in 0.089854 second(s), 22 queries , MemCache On.

Powered by Discuz! X3.4

Copyright © 2001-2024, Tencent Cloud.

快速回复 返回顶部 返回列表