RA UART实现串口波特率自适应

嵌入式技术

1347人已加入

描述

介绍

RA系列的开发环境中的FSP能够以最简单的GUI的方式来配置外设并生成封装好的底层驱动代码。但如果外设需要做动态功能上的切换,例如串口<->IRQ接收等功能,就需要手动通过寄存器配置来做动态修改。下面的例子是一个简单的通过RXD管脚首先通过IRQ中断触发来侦测接收数据的start Bits时间,计算出实际波特率,然后做动态波特率配置。这样就能够实现波特率自适应(侦测)的功能。

内容

演示的例程采用EK-RA2E1评估板,UART1 (P401, P402) 分别配置为TXD1 & RXD1。程序启动后,首先将RXD1脚切换到IRQ4的中断触发模式(both Falling & Rising Edge trigger),然后等上位机发送波特率标识数据(LSB=1),这样IRQ4分别两次触发GPT(Start->Stop)就能够捕捉start bit的间隔时间,从而计算出上位机发送数据的波特率. 然后将IRQ4管脚切换到RXD,并开始UART通讯。

EK-RA2E1评估套件可通过瑞萨电子的灵活软件包(FSP)和e2 studio IDE,帮助用户轻松评估RA2E1 MCU产品组的特性,并开发嵌入式系统应用程序。用户可利用丰富的板载功能以及自选的热门生态系统插件来将丰富创意变为现实。

波特率

 

具体配置

1

UART1配置

UART1的配置只需要按照应用要求来做就可以,但必须留意所选的RXD脚必须跟IRQ是复用的,以便做软件切换。由于是做波特率自适应,属性页面中关于Baud的配置可以忽略。

波特率

2

GPT配置

由于需要通过定时器来做start bit的时间间隔测量,可以选用GPT/AGT使用one-shot/Periodic模式并留足够Period值余量来确保start bit在低速下不会溢出。

3

P402管脚配置为IRQ4

将SCI1串口默认的(RXD)P402管脚改为IRQ4,并添加中断入口函数。

波特率

中断入口函数里面首先判断是否发生了下降沿触发,然后启动定时器,等再次中断进入后,停止定时器,并取得定时器计数值,通过跟默认已知的系统时钟参数相除,就能得到确切的波特率数值。

波特率

4

波特率计算和相关寄存器配置

取得波特率实际值后,通过硬件手册上的相关的方程式就能够反推出几个控制波特率的寄存器的配置需要值 (brr,  semr , cks等),并将相关计算出的数值修改到FSP SCI1的全局变量结构体内 (g_uart1_baud_setting)。

波特率

5

修改P402管脚配置为UART-RXD

然后将P402管脚修改为UART功能,并启动 UART_Open() 函数,设置波特率已配置标志。

波特率

6

这样主函数就能够直接通过已侦测到的波特率直接发送数据和开始接收数据。

波特率

 

波特率

上述方法只需通过底层寄存器配置就能使简单快速做波特率侦测、计算和配置。通过这种方式,只要芯片系统时钟符合范围要求,任何非通用或者极高速/超低速的波特率也是能使实现侦测并配置使用。

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分