IR
示例列表
本章介绍 IR 示例的详细信息。RTL87x2G 为 IR 外设提供以下示例。
功能概述
IR模块提供了一种灵活的方式来传输和接收红外编码数据。 IR模块支持发送 IR 载波波形,接收带有载波的 IR 波形。
特性列表
IR 发送
IR 发送的原理图如下面的图所示。

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_Cmd()
,计数器启动,IR 开始接收数据。设置IR_InitTypeDef::IR_RxStartMode
为IR_RX_MANUAL_MODE
以开启手动模式。自动模式:在自动模式下,调用
IR_Cmd()
后,当 IR 的输入波形满足设定的触发条件时,计数器启动,IR 开始接收数据。设置IR_InitTypeDef::IR_RxStartMode
为IR_RX_AUTO_MODE
以开启自动模式,设置IR_InitTypeDef::IR_RxTriggerMode
以改变 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
。

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
。

IR GDMA RX 示意图