MPC5744P-UART(LIN)模块

本文详细介绍了5744P芯片中UART模式的使用,包括数据帧格式、缓存器格式、波特率计算等内容。提供了配置流程及示例代码,包括发送和接收过程的实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.结构介绍

1、数据帧格式
5744P的UART功能集成在LIN模块中,所以在LIN模块中介绍UART模式的使用。UART模式下的数据帧格式有8位、9位、16位和17位,其中8位和16位数据帧格式最后一位可为数据位也可为Parity位,9位和17位数据帧格式最后一位为Parity位。UART模式下用通过配置UARTCR寄存器中的WL1和WL0组成WL[1:0]来进行数据帧格式的选择。
2、缓存器格式
UART模式下,2个32位数据寄存器被分为8个8位的数据缓存器,其中高4个用于发送,低4个用于接收。当数据帧位格式为16位时,低八位为BDR0,高八位在BDR1,可用的收发数据缓存器各被分为2个。此外,UART模式可以通过配置UARTCR寄存器中TDFLTFC来选择进行数据收发的缓存器的个数。
在这里插入图片描述
3、波特率计算
LIN模块波特率的计算公式如下:
在这里插入图片描述
其中LFDIV由LINIBRR中的DIV_M和LINFBRR中的DIV_F共同决定。其中的关系如下:
LFDIV=DIV_M+DIV_F,若计算所得的波特率不是9600、19200等数或不是整数则取最接近的计算值即可。这里要特别注意的是进行波特率配置的LIN_CLK固定为系统时钟的一半,不需要配置,不是LIN模块使用的外设桥的时钟。

2.配置流程及示例

1、配置流程
UART模块主要需要配置波特率和帧数据格式,进行FIFO与缓存器收发方式的选择以及收发功能的使能等。在配置过程中除了模块模式的转换与中断等的设置,其余均有UART模式专用的寄存器。配置流程如下:
1)管脚复用;
2)运行模式的选择;
3)请求进入初始化模式并等待进入初始化模式;
4)配置波特率(波特率的时钟为系统时钟的一半,不是外设桥的时钟);
5)选择UART模式(在进行下面配置之前,需先选择UART模式);
6)数据格式的选择以及收发使能;
7)请求退出初始化模式并等待退出完成;
2、示例代码

void UART_UART0_Init()
{
	//管脚复用
	SIUL2.MSCR[18].B.OBE=1;               //PB2 LIN0_UART TX
	SIUL2.MSCR[18].B.SSS=1;

	SIUL2.MSCR[19].B.IBE=1;               //PB3 LIN0_UART RX
	SIUL2.IMCR[165].B.SSS=1;

	//运行模式的选择
	MC_ME.PCTL204.B.RUN_CFG=0;

	//UART配置
	LINFlexD_0.LINCR1.B.SLEEP=0;          //退出睡眠模式
	LINFlexD_0.LINCR1.B.INIT=1;
	while(LINFlexD_0.LINSR.B.LINS != 1);  //请求进入初始化模式并等待进入初始化模式

	LINFlexD_0.LINIBRR.B.IBR=48;         //配置波特率为115200,IBRR=48,FBRR=13
	LINFlexD_0.LINFBRR.B.FBR=13;          //配置波特率为19200 ,IBRR=292,FBRR=15

	LINFlexD_0.UARTCR.B.UART=1;          //选择UART模式

	LINFlexD_0.UARTCR.B.RFBM=0;          //缓存器功能
	LINFlexD_0.UARTCR.B.WL1=0;
	LINFlexD_0.UARTCR.B.WL0=1;
	LINFlexD_0.UARTCR.B.PCE=0;           //数据格式:8数据位,无校验位

	LINFlexD_0.UARTCR.B.RxEn=1;          //允许接收
	LINFlexD_0.UARTCR.B.TxEn=1;          //允许发送

	LINFlexD_0.LINIER.B.DRIE=1;   
	INTC_0.PSR[376].R=0x800E;             //使能接收中断并设置中断优先级

	LINFlexD_0.UARTSR.B.DTFTFF = 1;      //清空接收发送标准位
	LINFlexD_0.UARTSR.B.DRFRFE = 1;

	LINFlexD_0.LINCR1.B.INIT=0;
	while(LINFlexD_0.LINSR.B.LINS == 1);  //请求退出初始化模式并等待退出初始化模式
}

3、收发过程

1.发送过程
UART的发送与SPI发送类似,将要发送的数据写入发送缓存器即可,数据发送完会置位UARTSR寄存器中的DTFTFF标志位,该位 写1清0,示例代码如下

void UART_UART0_Send(const uint8_t * p_info,const uint32_t info_num)
{
	uint32_t index=0;
	for(index=0;index<info_num;index++)
	{
		LINFlexD_0.BDRL.B.DATA0=p_info[index];      //发送数据
		while(!LINFlexD_0.UARTSR.B.DTFTFF);
		LINFlexD_0.UARTSR.B.DTFTFF=1;               //等待数据发送完成并清除发送标准位
	}
}

2、接收过程
UART模式接收可为中断结束和查询接收,本例以中断接收为例。UART模式下通过设置LINIER寄存器的DRIE位使能接收中断(需配置中断优先级方可生效),然后设计相应的中断函数即可。当数据接收完毕后会将数据存放到接收缓冲器并置位UARTSR寄存器中的DRFRFE位,该位需要软件清零。示例代码如下:

void UART_UART0_Init()
{
	.
	.
	.
	LINFlexD_0.LINIER.B.DRIE=1;
	INTC_0.PSR[376].R=0x800E;       //使能接收中断并设置中断优先级
	.
	.
	.
}

void UART_UART0_RX_Isr(void)
{
	.
	.
	.
	GL_Rx_Data=LINFlexD_0.BDRM.R;   //读取接收的数据
	LINFlexD_0.UARTSR.B.DRFRFE=1;   //清零接收标志位
	.
	.
	.
}
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值