使用的是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[50].R = 0x01;
原来ME.PCTL[50].R = 0x01;是参考LIN0的代码,忘记改了
一周热门 更多>