MPC5744P-UART(LIN)模块
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 TXSIUL2.MSCR[18].B.SSS=1;SIUL2.MSCR[19].B.IBE=1; //PB3 LIN0_UART RXSIUL2.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=13LINFlexD_0.LINFBRR.B.FBR=13; //配置波特率为19200 ,IBRR=292,FBRR=15LINFlexD_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; //清零接收标志位...
}
MPC5744P-UART(LIN)模块相关推荐
- 基于FPGA实现uart串口模块(Verilog)--------发送模块及整合
基于FPGA实现uart串口模块(Verilog)--------发送模块及整合 当接收模块接收到数据后,需要重新发送形成回环验证模块正确性.思路和结束模块有一点点的小差异.接收模块最终输出的是一个并 ...
- 基于FPGA实现uart串口模块(Verilog)--------接收模块及思路总结
基于FPGA实现uart串口模块(Verilog)--------接收模块及思路总结 uart通信协议简单理解为串转并和并转串的两个模块.同时必须保证数据的正确性.且输入输出端为串行. 此次实现uar ...
- 开发调试工具:USB转IIC/I2C/SPI/UART适配器模块可编程开发板
开发调试工具:USB转IIC/I2C/SPI/UART适配器模块可编程开发板 发个方便测试I2C.SPI.1Wire接口的工具模块 总的思路是通过USB或者UART接口发送一些协议字符串,由模块转换成 ...
- 基于FPGA实现uart串口模块——进阶版1
设计目标 本文实现uart发送多个数据给上位机,上位机显示,这里不对数据进行解析. 这次实现的是使用开发板每隔一秒向上位机发送"I love you".下一篇博文实现当发送&quo ...
- 基于verlog语言的UART通信协议模块实现
前言 在此我就不对UART协议细节部分做介绍,网上相关的介绍太多了.目前通过串口调试助手成功实现板载时钟50MHz情况下最大波特率3000000 bit/s通信. 模块组成 顶层:uart_modu ...
- 【UART】Verilog实现UART接收和发送模块
目录 写在前面 UART 工作原理 UART 接收部分 UART RX 模块图 UART RX 时序图 Verilog 实现 UART RX 模块 UART 发送部分 UART TX 模块图 UAR ...
- MSP430F5529 DriverLib 库函数学习笔记(四)UART通信
目录 硬知识 USCI通信模块 USCI的UART模式 1. USCI初始化和复位 2. 异步通信字符格式 3. 异步多机通信模式 4. 自动波特率检测 5. IrDA编码和解码 6. 自动错误检测 ...
- S32K144从入门到跑路——芯片性能与主要功能模块与存储空间的地址分配(持续更新)
重要表格 命名规则如下: 如需批量购买可以私信本人. 32-PIN QFN 98ASA01350D S32K K1系列,只要引脚和封装是对应的就是兼容的.以上文件涵盖S32K K1封装 芯片性能 符合 ...
- TC397 LIN Master 用例
文章目录 LIN简介 单片机与LIN TC397 LIN USB-LIN分析仪 TC397 KIT LIN 工程示例 参考 LIN简介 LIN (Local Interconnect Network) ...
- 汽车CAN、LIN汇总
本内容详细介绍了汽车CAN与LIN, AutoSAR,含实际测试.紫色文字是超链接,点击自动跳转至相关博文.持续更新,原创不易. 目录: 一.准备知识 1.什么是CAN 2.汽车网络发展时间轴 3 ...
最新文章
- 计算类class的sizeof大小
- android+布局分块,android的List View的Item布局问题
- Jconsole远程监控tomcat 的JVM内存(linux、windows)
- 在word中粘贴代码保持高亮
- 作文 —— 诙谐、幽默、调侃、批判
- PHP调用tushare,python调用tushare获取沪股通、深股通成份股数据
- java args_Java命令行界面(第2部分):args4j
- linux加密框架 crypto 算法管理 - 算法检测
- 匿名提问:rm -rf了怎么办?
- matlab矩阵里的最大值和最小值,求助 Matlab 用MAGIC命令产生一个5阶矩阵,并求该矩阵每列的最大值、最小值、平均数、和...
- Qos拥塞避免原理与实验
- vue-cli 里axios的使用
- kafka消费者如何读同一生产者消息_kafka学习笔记
- 快手上市,有一批员工平均身家超3200万,但追赶抖音没那么简单
- 网易企业邮箱的网易文档是什么?
- 一行html代码微信透明头像,微信透明头像,微信空白名,立刻消失
- java mysql点赞功能_怎么实现一个点赞功能?
- 第二百九十三,Memcached缓存
- 使用face recognition为女神们脸部识别
- Typora护眼绿和夜色两种背景
热门文章
- Hexo + yilia 主题实现文章目录
- 【每日新闻】​阿里钉钉布局医疗行业生态,未来医院成医疗行业“香饽饽” | 工信部信软司:持续推进云计算和区块链等领域标准研制工作...
- 编程训练4-统计单词平均长度
- JavaScript 每日一题---LeetCode 121. 买卖股票的最佳时机
- 【喷嚏图卦】 委内瑞拉崩溃的背后:渐行渐近的石油危机
- Python实现聊天机器人
- 机器学习系列15:学习曲线
- 统计学---总体与样本
- Django-QuerySet之first(),last(),latest(),earliest()
- win+L 锁屏快捷键 失效