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)模块相关推荐

  1. 基于FPGA实现uart串口模块(Verilog)--------发送模块及整合

    基于FPGA实现uart串口模块(Verilog)--------发送模块及整合 当接收模块接收到数据后,需要重新发送形成回环验证模块正确性.思路和结束模块有一点点的小差异.接收模块最终输出的是一个并 ...

  2. 基于FPGA实现uart串口模块(Verilog)--------接收模块及思路总结

    基于FPGA实现uart串口模块(Verilog)--------接收模块及思路总结 uart通信协议简单理解为串转并和并转串的两个模块.同时必须保证数据的正确性.且输入输出端为串行. 此次实现uar ...

  3. 开发调试工具:USB转IIC/I2C/SPI/UART适配器模块可编程开发板

    开发调试工具:USB转IIC/I2C/SPI/UART适配器模块可编程开发板 发个方便测试I2C.SPI.1Wire接口的工具模块 总的思路是通过USB或者UART接口发送一些协议字符串,由模块转换成 ...

  4. 基于FPGA实现uart串口模块——进阶版1

    设计目标 本文实现uart发送多个数据给上位机,上位机显示,这里不对数据进行解析. 这次实现的是使用开发板每隔一秒向上位机发送"I love you".下一篇博文实现当发送&quo ...

  5. 基于verlog语言的UART通信协议模块实现

    前言 在此我就不对UART协议细节部分做介绍,网上相关的介绍太多了.目前通过串口调试助手成功实现板载时钟50MHz情况下最大波特率3000000 bit/s通信. 模块组成 顶层:uart_modu ...

  6. 【UART】Verilog实现UART接收和发送模块

    目录 写在前面 UART 工作原理 UART 接收部分 UART RX 模块图 UART RX 时序图 Verilog 实现  UART RX 模块 UART 发送部分 UART TX 模块图 UAR ...

  7. MSP430F5529 DriverLib 库函数学习笔记(四)UART通信

    目录 硬知识 USCI通信模块 USCI的UART模式 1. USCI初始化和复位 2. 异步通信字符格式 3. 异步多机通信模式 4. 自动波特率检测 5. IrDA编码和解码 6. 自动错误检测 ...

  8. S32K144从入门到跑路——芯片性能与主要功能模块与存储空间的地址分配(持续更新)

    重要表格 命名规则如下: 如需批量购买可以私信本人. 32-PIN QFN 98ASA01350D S32K K1系列,只要引脚和封装是对应的就是兼容的.以上文件涵盖S32K K1封装 芯片性能 符合 ...

  9. TC397 LIN Master 用例

    文章目录 LIN简介 单片机与LIN TC397 LIN USB-LIN分析仪 TC397 KIT LIN 工程示例 参考 LIN简介 LIN (Local Interconnect Network) ...

  10. 汽车CAN、LIN汇总

    本内容详细介绍了汽车CAN与LIN, AutoSAR,含实际测试.紫色文字是超链接,点击自动跳转至相关博文.持续更新,原创不易.  目录:  一.准备知识 1.什么是CAN 2.汽车网络发展时间轴 3 ...

最新文章

  1. 计算类class的sizeof大小
  2. android+布局分块,android的List View的Item布局问题
  3. Jconsole远程监控tomcat 的JVM内存(linux、windows)
  4. 在word中粘贴代码保持高亮
  5. 作文 —— 诙谐、幽默、调侃、批判
  6. PHP调用tushare,python调用tushare获取沪股通、深股通成份股数据
  7. java args_Java命令行界面(第2部分):args4j
  8. linux加密框架 crypto 算法管理 - 算法检测
  9. 匿名提问:rm -rf了怎么办?
  10. matlab矩阵里的最大值和最小值,求助 Matlab 用MAGIC命令产生一个5阶矩阵,并求该矩阵每列的最大值、最小值、平均数、和...
  11. Qos拥塞避免原理与实验
  12. vue-cli 里axios的使用
  13. kafka消费者如何读同一生产者消息_kafka学习笔记
  14. 快手上市,有一批员工平均身家超3200万,但追赶抖音没那么简单
  15. 网易企业邮箱的网易文档是什么?
  16. 一行html代码微信透明头像,微信透明头像,微信空白名,立刻消失
  17. java mysql点赞功能_怎么实现一个点赞功能?
  18. 第二百九十三,Memcached缓存
  19. 使用face recognition为女神们脸部识别
  20. Typora护眼绿和夜色两种背景

热门文章

  1. Hexo + yilia 主题实现文章目录
  2. 【每日新闻】​阿里钉钉布局医疗行业生态,未来医院成医疗行业“香饽饽” | 工信部信软司:持续推进云计算和区块链等领域标准研制工作...
  3. 编程训练4-统计单词平均长度
  4. JavaScript 每日一题---LeetCode 121. 买卖股票的最佳时机
  5. 【喷嚏图卦】 委内瑞拉崩溃的背后:渐行渐近的石油危机
  6. Python实现聊天机器人
  7. 机器学习系列15:学习曲线
  8. 统计学---总体与样本
  9. Django-QuerySet之first(),last(),latest(),earliest()
  10. win+L 锁屏快捷键 失效