嵌入式学习小组
直播中

冯敏敏

7年用户 173经验值
私信 关注

求大神分享LPUART的应用指南

本指南目的在于说明如何使用EFM32微控制器的低能耗 UART (LEUART?) 模块。即使在器件处于深度休眠模式EM2的情况下,LEUART 也能进行全功能UART通信。与智能中断功能及灵活的DMA 相结合,可实现简单且节能的串行通信。

回帖(1)

赵文隽

2021-4-20 10:51:44
  EFM32 系列LEUART使用指南
  简介: 本指南目的在于说明如何使用EFM32微控制器的低能耗 UART (LEUART?) 模块。即使在器件处于深度休眠模式EM2的情况下,LEUART 也能进行全功能UART通信。与智能中断功能及灵活的DMA 相结合,可实现简单且节能的串行通信。
  * 在低功耗模式下可使用DMA进行数据传输;
  * 9600波特率下接收数据仅消耗150nA电流;
  * 使用32.768kHz作为模块时钟源时拥有完整UART功能;
  * 可配置的接收数据匹配功能;
  * 可工作于EM0~EM2模式。
  1 LEUART 原理
  LEUART:Low Energy Universal Asynchronous Receiver/Transmitter,低功耗通用异步收发器,是EFM32片上低功耗外设,能够在满足极低功耗的同时提供串口通信功能。
  1.1 一般原理
  EFM32的LEUART是一个独特的低功耗UART,能在极为苛刻的功耗预算下提供双向通信。仅需一个32.768 kHz 的时钟源即可实现波特率高达9600的UART通信。这意味着EFM32的LEUART可在深度休眠模式EM2下工作,在消耗极低能量的情况下等待接收到来的UART帧。当一个UART帧被LEUART完全接收时,CPU可被快速唤醒。还可以选择用DMA将多个帧传送到存储器中,然后再唤醒CPU。LEUART还具有处理更高层通信协议的能力。例如,可以选择阻塞进入的帧,直到检测到一个可配置的起始帧;还可以选择检测一个可配置的信号帧 (例如用于指示一次传输结束)。 与接收过程一样,在EM2模式,可直接从CPU逐帧发送数据,也可以通过DMA来发送较大的帧组。EFM32 LEUART包含支持异步串行通信所需要的所有硬件,因而需要最少的软件干预,而且消耗极低的能量。 LEUART的优势在于能工作在EM2模式,此时大多数其他模块都出于节能考虑而被关断。低能耗串行通信选项与不需要CPU干预即可读写存储器的DMA能力相结合,为系统设计人员在低能耗应用中使用EFM32提供了宽泛的功能。
  
  2 LEUART 配置
  2.1 帧、传输和奇偶校验
  LEUART使用帧来进行数据传输。一个 LEUART 帧由1个起始位、8或9个数据位、1个可选的奇偶校验位和1个或2个停止位组成 (见图2.1 )。一次传输由一个起始位启动,起始位将数据线从空闲的高电平状态拉为低电平。此后,数据位和奇偶校验位被依序发送,直到帧传输被停止位结束,停止位将数据线保持在高电平。然后,数据线或者进入其高电平空闲状态,或者发送一个新的起始位。当一个帧已准备好要被发送时,它被从发送寄存器传送到移位寄存器,数据位在移位寄存器中被逐位发送,最低有效位在先。可将整个帧格式反相,(例如)以允许使用低电平作为空闲状态。 在数据位结束后可以选择添加奇偶校验位来实现简单的错误检测。有3种不同的奇偶校验模式:无校验、偶校验和奇校验。奇偶校验位的产生和校验都由硬件完成,有中断标志用于指示在帧中是否检测到奇偶校验错误。所希望的帧格式在所选LEUART的初始化期间设置。Emlib 提供一个初始化函数来定义使用LEUART进行串行通信时所需要的全部设置。通信通道的所有使用方都必须在通信帧格式上完全一致。有关LEUART寄存器和功能的详细信息,请参见器件的参考手册。
  2.2 时钟源
  像EFM32微控制器中的其他低能耗外设一样,LEUART可由三个不同的时钟源驱动,即低频RC振荡器(LFRCO)、低频晶体振荡器(LFXO)和高频内核时钟2分频(HFCORECLK_LE/2)。HFCORECLK_LE本身可由高频RC振荡器(HFRCO)、高频晶体振荡器(HFXO)或上述任何一个低频振荡器驱动。这种时钟选择的灵活性为系统设计人员使用LEUART功能提供了更宽范围的可能性。这意味着除了在低能耗的EM2模式下使用一个低频时钟源工作外,LEUART还可以在需要更多UART通信通道的情况下作为UART的补充。不过,为使LEUART达到高于9600的波特率,所选时钟源必须是HFCORECLK_LE/2,该选项不能在EM1-EM0模式下使用。
  
  2.3 波特率
  所选的LEUART时钟源定义了能通过LEUART获得的波特率。在标准低能耗工作模式,LEUART能基于32.768 kHz的时钟提供300 ~ 9600的波特率。有关支持哪些波特率的详细信息,请参见器件的参考手册。Emlib包含一些用于计算可用波特率、获取当前波特率以及设置波特率的方法。如果选择HFCORECLK_LE/2作为LEUART的时钟源,则可以获得更高的波特率,但这也意味着LEUART将不能工作在EM1以下的模式,因而需要消耗更多的能量。此外,由于需要有一个高频时钟运行,所以UART和USART也都是可用的。
  2.4 DMA集成
  LEUART在EM2模式下具有全功能的DMA支持。与LEUART结合使用时,DMA是一个非常强大的工具,可以最小化CPU的干预。 ? LEUART可被配置为在发送缓冲器为空或发送缓冲区和移位寄存器均为空时向DMA请求数据。 ? LEUART 可被配置为在接收缓冲器为满时请求DMA读取数据。 ? 当在接收寄存器中检测到一个有奇偶校验错误的帧时,LEUARTn_CTRL寄存器中ERRSDMA位可被置1,不向DMA发出读请求。 当MCU工作在EM2模式时,为了执行DMA传送,必须将DMA控制器上电。对于读操作,如果LEUARTn_CTRL中的RXDMAWU被置位,则上电过程是自动完成的;对于写操作,如果LEUARTn_CTRL中的TXDMAWU被置位,该上电过程也是自动完成的。为确保DMA控制器在低能耗模式仍能与LEUART进行数据传送,必须正确配置这些位。在EM2模式,DMA使用HFRCO运行,所以该高频振荡器也被自动唤醒和关断。在使用DMA处理LEUART之前,还必须正确使能和配置DMA。有关如何初始化一次LEUART和DMA之间的交互的详细信息,请参见所提供的软件示例和器件的参考手册。
  2.5 脉冲发生器和扩展器
  LEUART在发射器输出端有一个可选的脉冲发生器,在接收器输入还有一个可选的脉冲扩展器。脉冲发生器和扩展器可以将LEUART的输入和输出格式从NRZ变为RZI。来自脉冲发生器的脉冲的宽度可被配置为31.25 μs ~ 500 μs。在波特率为2400或更低的情况下,脉冲发生器还能产生与IrDA物理层规范兼容的RZI脉冲。
  2.6 中断
  在数据接收和发送期间有大量的中断可用,以支持中断驱动应用的低能耗优势。当接收或发送寄存器为空,或在传输期间检测到任何错误时,都可以触发中断。LEUART还具有在检测到特定的可配置帧时触发中断的能力。这就允许在LEUART之上构建更高层的通信协议。LEUART甚至还支持一种特殊的多处理器模式,可以进行单独寻址和仅触发所期望的MCU来接收并对发送的数据做出反应。这在多个UART芯片使用同一通道进行通信的系统中是一个非常有用的特性。有了这种功能,通过使用某些只能在所期望的接收器中触发中断的帧来启动和结束数据传输,即可寻址所期望的接收器。在所提供的软件示例中,信号帧中断功能用于仅在检测到一个特定帧时唤醒CPU。所有其他帧都被DMA加载到存储器中,但CPU不产生任何响应,直到预设的信号帧被LEUART检测到为止。
  2.7 冻结模式和低频域同步
  为了修改一些LEUART寄存器,必须与低频(LF)域实现同步。在需要修改多个寄存器时,为了避免不必要的等待延迟,所有的寄存器写操作都应在同一个软件模块内部完成。该模块由void LEUART_FreezeEnable(LEUART_TypeDef *leuart, bool enable)启动,其中enable被设置为true;由相同的函数调用结束,不过此处enable被设置为false。这样,所有的寄存器修改操作将会在一次同步中完成。有关访问和修改异步寄存器的详细信息,请参见器件的参考手册。
  2.8 半双工操作
  LEUART提供一个将发送数据本地环回到接收引脚的选项。该功能对调试非常有用,因为LEUART能接收它自己发送的数据。但该功能也用于允许LEUART读和写同一个引脚,这是某些半双工通信模式所需要的。当进行全双工通信时,LEUART提供两条数据链路,允许同时发送和接收数据。在半双工模式,某一时刻只能在一个方向发送数据。LEUART有多种可能的半双工设置:单数据链路、双数据链路或使用一个外部驱动器。在通过一个单数据链路通信的情况下,发送器在不发送数据时必须为三态。如果LEUARTn_CTRL寄存器中的AUTOTRI位被置位,则在发送器不处于活动状态时,LEUART能自动将发送引脚置为三态。
  2.9 GPIO和引脚分配
  LEUART模块具有将其TX和RX引线连接到几个不同的预定义MCU引脚位置的能力。必须通过设置LEUARTn_ROUTE寄存器来使能和连接TX和RX引线到所期望的位置。
  为使LEUART能与任何外部系统元件交互,例如RS232端口或另一外设IC,必须正确配置GPIO的I/O引脚。GPIO有多种不同的引脚模式。在官方所提供的代码样例中,TX引脚被配置为推挽输出,RX引脚被使能为带上拉的输入。在数据线未被其他部件驱动为一个确定值的情况下,上拉使输入有一个确定的状态。这种情况往往发生在TX模块被使能之前使能了RX模块。有关GPIO模式设置的更多详情,请参考器件的参考手册。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分