IR

示例列表

本章介绍 IR 示例的详细信息。RTL87x2G 为 IR 外设提供以下示例。

功能概述

IR模块提供了一种灵活的方式来传输和接收红外编码数据。 IR模块支持发送 IR 载波波形,接收带有载波的 IR 波形。

特性列表

  • IR 发送特性:

    • 可配置的载波频率(5kHz ~ 2MHz)。

    • 可配置的载波占空比。

    • 可配置的波形持续时间。

    • TX FIFO 深度:32。

    • 支持 GDMA

  • IR 接收特性:

    • 可配置的采样频率(最大40MHz)。

    • 自动/手动接收模式。

    • RX FIFO 深度:32。

    • 支持 GDMA

  • RX 模式和 TX 模式不能同时工作。

IR 发送

IR 发送的原理图如下面的图所示。

../../../../../_images/Schematic_Diagram_of_IR_TX.jpg

IR 发送原理图

IR 发送功能需要将 IR_InitTypeDef::IR_Mode 设置为 IR_MODE_TX 。 IR TX 的输出波形包含 Mark 波形和 Space 波形。Mark 波形为含有载波的区域,Space 波形为不含载波的区域。 在默认情况下,Mark 波形先输出高占空比,后输出低占空比。Space 波形默认输出低电平。

IR TX 数据由 32 位组成,默认情况下 FIFO 内数据的含义如下:

  • data[26:0]:代表(Mark / Space)波形的持续时间,time = (data[26:0] + 1) * carrier_cycle。

  • data[29:27]:在 Space 波形下代表低电平补偿,补偿时间为 data[29:27] * 1/8 carrier_cycle 。在 Mark 波形下需要设置为 0 。

  • data[30]:设置为 0 代表普通波形,设置为 1 代表 TX 输出结束波形。

  • data[31]:设置为 0 代表 Space 波形,设置为 1 代表 Mark 波形。

IR 接收

IR 接收功能需要将 IR_InitTypeDef::IR_Mode 设置为 IR_MODE_RX 。 在 IR 接收功能下,IR_InitTypeDef::IR_Freq 参数代表采样频率。

IR 接收模式分为手动模式和自动模式。

在 IR 接收模式下,当开始接收时,会启动一个计数器,记录高低电平的持续时间。当高/低电平的持续时间超过某一值时,即计数器的计数值满足设定的阈值时,会触发计数器阈值中断 IR_INT_RX_CNT_THR ,一般情况下利用该中断去停止 IR 接收功能。 可以通过配置 IR_InitTypeDef::IR_RxCntThrType 设置计数器记录的电平是高电平或低电平,配置 IR_InitTypeDef::IR_RxCntThr 设置计数器阈值。

IR RX 数据由 32 位组成,默认情况下 FIFO 内数据含义如下: + data[30:0]:代表 RX 波形持续时间,time = (data[30:0] + 1) / sample_clock。 + data[31]:代表 RX 波形的电平。1 代表高电平,0 代表低电平。

IR GDMA

IR GDMA TX

在 IR 传输过程中,当 TX FIFO 内数据的数量小于或等于初始化中设置的 IR_InitTypeDef::IR_TxWaterLevel 值时,会触发一次 GDMA burst 搬运。 GDMA 一次 burst 会将 GDMA_InitTypeDef::GDMA_DestinationMsize 个数据写入 IR TX FIFO 中。

IR GDMA TX 时,推荐设置 IR_InitTypeDef::IR_TxWaterLevel 的值为 IR_TX_FIFO_SIZE - MSize

Here should be ir tx dma diagram

IR GDMA TX 示意图

IR GDMA RX

在 IR 传输过程中,当 RX FIFO 内数据的数量大于或等于初始化中设置的 IR_InitTypeDef::IR_RxWaterLevel 时,会触发一次 GDMA burst 搬运。 GDMA 一次 burst 会从 IR RX FIFO 中获取 GDMA_InitTypeDef::GDMA_SourceMsize 个数据。

IR GDMA RX 时,推荐设置 IR_InitTypeDef::IR_RxWaterLevel 的值为 MSize

Here should be ir rx dma diagram

IR GDMA RX 示意图