红外收发器(IR)
支持的芯片[ RTL8721Dx ][ RTL8730E ][ RTL8721F ][ RTL8720F ]
概述
红外辐射(Infrared Radiation, IR)模块是一个用于红外发送和接收的控制器。它支持半双工通信,并具备红外信号的硬件调制和自动捕获功能。
工作模式
发送模式:基于硬件调制,通过 TX 端发送红外信号,可编程控制载波参数。
接收模式:支持 学习模式 和 普通接收模式 两种工作方式,分别对应 红外二极管 和 红外接收模块 作为硬件前端。
工作原理
信号模型
为简化红外信号的理解,将其分为以下符号类型:
载波符号 :
描述:在一定时间内包含 若干载波时钟周期 的信号。
特性:在物理介质中 实际传播 的调制信号。
空间符号 :
描述:在一定时间内保持 连续高电平或低电平 的信号。
特性:代表 调制前或解调后 的数字信号。
IR 信号模型
发送模式
信号发送原理
在发送模式中,通过以下配置确保信号的准确调制与传输:
载波频率配置 :
设定信号调制的基础频率,以提供稳定的传输性能。
空间符号配置 :
通过写入 TX FIFO 控制信号的高低电平持续时间,定义信号的空间符号。
两者共同决定最终的 信号输出波形 ,如图所示:
TX 工作流程示意图
解析 TX FIFO 数据
TX FIFO 的数据为 32 位宽,包含以下信息:
字段 |
描述 |
参数含义 |
|---|---|---|
BIT[31] |
是否发送载波 |
1:发送 0:不发送 |
BIT[30] |
数据发送结束标志 |
1:最后一笔包 0:正常包 |
BIT[29:28] |
补偿模式 |
0:不发送载波阶段
3:不发送载波阶段
1,2:不建议使用 |
BIT[27:0] |
载波/无载波的周期数 |
按载波频率或补偿频率计数 |
其中,字段 BIT[27:0] 计算方式:
BIT[27:0] = fcarrier * Tduration
参数含义:
- fcarrier:
载波频率(单位:赫兹)
- Tduration:
载波或无载波符号的持续时间(单位:秒)
备注
补偿机制:仅对 TX 计数 无载波阶段 有效
补偿模式:不建议使用 mode1 或 mode2
组织 TX FIFO 数据
NEC 编码协议简介
NEC 编码协议格式由 2 个起始符号、64 个数据符号和 1 个停止符号组成。其中,
逻辑 1 : 由 560us 的高电平信号与 (2250-560)us 的低电平信号构成
逻辑 0 : 由 560us 的高电平信号与 (1120-560)us 的低电平信号构成
NEC 调制
下面以 NEC 编码协议,38KHz 的载波频率,补偿模式为 0 的设定为例,介绍如何组织写入 TX FIFO 的数据。
传输逻辑 1:
应向 TX FIFO 写入以下两组数据:
Entry |
BIT[31] |
BIT[30] |
BIT[29:28] |
BIT[27:0] |
|---|---|---|---|---|
First |
1 |
0 |
0 |
38 * 560 / 1000 = 21 |
Second |
0 |
0 |
0 |
38 * (1690 - 560) / 1000 = 63 |
传输逻辑 0:
应向 TX FIFO 写入以下两组数据:
Entry |
BIT[31] |
BIT[30] |
BIT[29:28] |
BIT[27:0] |
|---|---|---|---|---|
First |
1 |
0 |
0 |
38 * 560 / 1000 = 21 |
Second |
0 |
0 |
0 |
38 * (1120 - 560) / 1000 = 21 |
停止传输:
为停止数据传输,应向 TX FIFO 的最后一个包中设置 BIT[30]=1,当前数据包仍会被发送。
Entry |
BIT[31] |
BIT[30] |
BIT[29:28] |
BIT[27:0] |
|---|---|---|---|---|
First |
1 |
1 |
0 |
38 * 560 / 1000 = 21 |
接收模式
信号接收原理
接收模块监测输入的高/低电平信号所持续的采样周期数,并存储在 RX FIFO 中供软件使用。
RX FIFO 的内容解析会因接收模式的不同而有所变化:
学习模式 :
输入信号包含载波。
IR 内核捕获 载波符号 。
软件 需进行解调和解码 ,以提取信息,如载波频率和占空比。
普通接收模式 :
前端滤除了载波。
IR 内核 捕获空间符号 。
无需进行软件解调 ,方便后续解析处理。
RX 工作流程示意图——学习模式与普通接收模式对比
解析 RX FIFO 数据
RX FIFO 的数据为 32 位宽,包含以下两部分信息:
字段 |
描述 |
|---|---|
BIT[31] |
接收到信号的电平状态
|
BIT[30:0] |
信号在当前电平状态下,持续的采样时钟周期数
|
例如,在采样率为 10MHz(时钟周期为 100ns)的条件下:
数据 |
RX FIFO 值 |
含义 |
|---|---|---|
Data 1 |
0X10001000 |
表示检测到约 409.6 μs 的高电平信号 |
Data 2 |
0X00A1644 |
表示检测到约 66.106 ms 的低电平信号 |
接收启动条件
手动接收: 允许手动控制接收过程。自动接收:触发条件配置:
上升沿、下降沿或任何信号变化。
功能:
在 RX 输入信号检测到配置的触发器时,硬件会自动开始接收过程。
接收终止条件
在满足预设的条件后,RX 模块将触发特定中断事件。
根据系统设计,可以在中断处理函数中直接关闭 IR,或者释放信号量以通知相应的线程完成对 IR 的关闭。
相关设置包括:
终止接收信号的电平状态:
明确哪些电平状态会触发接收停止。
电平状态的持续时间要求:
定义电平状态需要保持的最短时间以触发中断。
启用 RX 计数器阈值中断:
确保当检测到指定电平和持续时间后,RX 模块可以触发 IR_BIT_RX_CNT_THR_INT_STATUS 中断。
例如,以下配置会使得 RX 模块在检测到输入信号为 低电平状态 且 持续时间不小于约 66.1ms 时,产生该中断事件
/* 10MHz 的采样率 */
IR_InitStruct.IR_Freq = 10000000;
/* 条件 1:电平信号状态 */
IR_InitStruct.IR_RxCntThrType = IR_RX_COUNT_LOW_LEVEL;
/* 条件 2:电平信号持续时间的阈值,设置为 66.1ms 左右 */
IR_InitStruct.IR_RxCntThr = 0xa1644;
/* 条件 3:使能 RX Counter 阈值中断 */
IR_INTConfig(IR_DEV, IR_BIT_RX_CNT_THR_INT_EN, ENABLE);
接收端载波问题
由于晶体管特性,在深度饱和区工作时响应速度会降低。
载波频率过高时,接收端可能无法正确接收载波波形。
接收学习中,最大可实现载波频率取决于接收电路和晶体管选择。
我们在 红外收发电路 中推荐的电路可支持最高 70kHz 载波频率,但可选用更优晶体管以获得更高支持频率。
原理图设计指南
漏电
为避免漏电问题,我们建议使用以下红外电路。
红外电路图
开发流程
发送
设置引脚
详细参考 功能复用 部分,以确保正确的引脚连接
配置载波频率和占空比
根据通信协议的需求等,进行正确配置
配置 TX FIFO
用于控制空间符号的持续时间,用于硬件调制。
接收
应用示例
SDK 提供了以下功能示例,帮助开发者了解和使用 IR 功能:
raw_ir_rx_learning 演示如何使用 IR
RX 学习模式;raw_ir_tx_nec_polling 演示如何使用 IR
轮询模式发送数据;raw_ir_tx_nec_interrupt 演示如何使用 IR
中断模式发送数据。
备注
要了解示例支持的芯片,请查看示例路径下的 README.md 文件。
Raw API
IR Exported Types
-
struct IR_InitTypeDef
IR Init Structure Definition.
Public Members
-
u32 IR_Clock
Specifies the IR IP core Input clock.
-
u32 IR_Freq
Specifies the clock frequency. This parameter is IR carrier frequency whose unit is Hz. This parameter can be a value of IR Carrier Frequency
-
u32 IR_DutyCycle
Specifies the IR duty cycle.
-
u32 IR_TxIdleLevel
Specifies the IR output level in Tx mode This parameter can be a value of IR Idle Level
-
u32 IR_TxInverse
Specifies inverse FIFO data or not in TX mode This parameter can be a value of IR Tx Data Level
-
u32 IR_TxFIFOThrLevel
Specifies TX FIFO interrupt threshold in TX mode. When TX FIFO depth <= threshold value, trigger interrupt. This parameter can be a value of IR Tx Threshold
-
u32 IR_TxCOMP_CLK
Specifies TX compensation clk. This CLK used when IR_Tx_DATA_TYPE = IR_TX_CLK_Self_Def.
-
u32 IR_RxStartMode
Specifies Start mode in RX mode This parameter can be a value of IR Rx Start Control
-
u32 IR_RxFIFOThrLevel
Specifies RX FIFO interrupt threshold in RX mode. When RX FIFO depth > threshold value, trigger interrupt. This parameter can be a value of IR Rx Threshold
-
u32 IR_RxFIFOFullCtrl
Specifies data discard mode in RX mode when RX FIFO is full and receiving new data This parameter can be a value of IR Rx FIFO Discard
-
u32 IR_RxTriggerMode
Specifies trigger in RX mode This parameter can be a value of IR Rx Auto Trigger Type
-
u32 IR_RxFilterTime
Specifies filter time in RX mode This parameter can be a value of IR Rx Filter Time
-
u32 IR_RxCntThrType
Specifies counter level type when trigger IR_INT_RX_CNT_THR interrupt in RX mode This parameter can be a value of IR Rx Count Level
-
u32 IR_RxCntThr
Specifies counter threshold value when trigger IR_INT_RX_CNT_THR interrupt in RX mode
-
u32 IR_Clock
-
typedef struct IR_InitTypeDef *PIR_InitTypeDef
IR Exported Constants
IR Carrier Frequency
/* Minimum IR carrier frequency in Hz. */
#define IR_TX_FREQ_HZ_MIN (25000)
/* Check if IR carrier frequency is valid. */
#define IS_IR_FREQUENCY ((F) >= IR_TX_FREQ_HZ_MIN)
IR Idle Level
/* TX idle output level is low. */
#define IR_IDLE_OUTPUT_LOW (0)
/* TX idle output level is high. */
#define IR_IDLE_OUTPUT_HIGH (1)
IR Mode
/* IR transmit mode. */
#define IR_MODE_TX (0)
/* IR receive mode. */
#define IR_MODE_RX (1)
/* Set IR mode field. */
#define IR_MODE ((MODE) & IR_BIT_MODE_SEL)
IR Rx Auto Trigger Type
/* RX triggered on falling edge. */
#define IR_RX_FALL_EDGE (0)
/* RX triggered on rising edge. */
#define IR_RX_RISING_EDGE (1)
/* RX triggered on both edges. */
#define IR_RX_DOUBLE_EDGE (2)
/* Check if IR Rx trigger edge value is valid. */
#define IS_IR_RX_TRIGGER_EDGE (((TRIGGER) == IR_RX_FALL_EDGE) || \
((TRIGGER) == IR_RX_RISING_EDGE) || \
((TRIGGER) == IR_RX_DOUBLE_EDGE))
IR Rx Count Level
/* Count threshold triggered on low level. */
#define IR_RX_COUNT_LOW_LEVEL (0)
/* Count threshold triggered on high level. */
#define IR_RX_COUNT_HIGH_LEVEL (1)
IR Rx FIFO Discard
/* Discard newest data when RX FIFO full. */
#define IR_RX_FIFO_FULL_DISCARD_NEWEST (1)
/* Discard oldest data when RX FIFO full. */
#define IR_RX_FIFO_FULL_DISCARD_OLDEST (0)
IR Rx INT Operation
/* Enable bits for all RX interrupts. */
#define IR_RX_INT_ALL_EN ((u32)0x0000003F)
/* Clear bits for all RX interrupts. */
#define IR_RX_INT_ALL_CLR ((u32)0x0000003F)
/* Mask bits for all RX interrupts. */
#define IR_RX_INT_ALL_MASK ((u32)0x000FC000)
/* Check if RX interrupt mask value is valid. */
#define IS_RX_INT_MASK (((MASK) & (~IR_RX_INT_ALL_MASK)) == 0)
/* Check if RX interrupt enable value is valid. */
#define IS_RX_INT (((MASK) & (~IR_RX_INT_ALL_EN)) == 0)
/* Check if RX interrupt clear value is valid. */
#define IS_RX_INT_CLR (((MASK) & (~IR_RX_INT_ALL_CLR)) == 0)
IR Rx Start Control
/* RX manual start mode. */
#define IR_RX_MANUAL_MODE (0)
/* RX auto trigger start mode. */
#define IR_RX_AUTO_MODE (1)
IR Rx Threshold
/* IR RX FIFO depth in entries. */
#define IR_RX_FIFO_SIZE (32)
IR Tx Data Level
/* Normal data, normal carrier output. */
#define IR_TX_DATA_NORMAL_CARRIER_NORMAL (0)
/* Normal data, inverted carrier output. */
#define IR_TX_DATA_NORMAL_CARRIER_INVERSE (1)
/* Inverted data, normal carrier output. */
#define IR_TX_DATA_INVERSE_CARRIER_NORMAL (2)
/* Inverted data, inverted carrier output. */
#define IR_TX_DATA_INVERSE_CARRIER_INVERSE (3)
/* Set TX data type and carrier inversion bits. */
#define IR_TX_DATA_TYPE_SET ((u32)(((x) << 13) & (IR_BIT_TX_OUTPUT_INVERSE | IR_BIT_TX_DE_INVERSE)))
IR Tx INT Operation
/* Mask bits for all TX interrupts. */
#define IR_TX_INT_ALL_MASK ((u32)0x0000002C)
/* Enable bits for all TX interrupts. */
#define IR_TX_INT_ALL_EN ((u32)0x00000013)
/* Clear bits for all TX interrupts. */
#define IR_TX_INT_ALL_CLR ((u32)0x0000000E)
/* Check if TX interrupt mask value is valid. */
#define IS_TX_INT_MASK (((MASK) & (~IR_TX_INT_ALL_MASK)) == 0)
/* Check if TX interrupt enable value is valid. */
#define IS_TX_INT (((MASK) & (~IR_TX_INT_ALL_EN)) == 0)
/* Check if TX interrupt clear value is valid. */
#define IS_TX_INT_CLR (((MASK) & (~IR_TX_INT_ALL_CLR)) == 0)
IR Tx Threshold
/* IR TX FIFO depth in entries. */
#define IR_TX_FIFO_SIZE (32)
IR Rx Filter Time
/* RX glitch filter time 50 ns. */
#define IR_RX_FILTER_TIME_50NS (0)
/* RX glitch filter time 75 ns. */
#define IR_RX_FILTER_TIME_75NS (1)
/* RX glitch filter time 100 ns. */
#define IR_RX_FILTER_TIME_100NS (2)
/* RX glitch filter time 125 ns. */
#define IR_RX_FILTER_TIME_125NS (3)
/* RX glitch filter time 150 ns. */
#define IR_RX_FILTER_TIME_150NS (4)
/* RX glitch filter time 175 ns. */
#define IR_RX_FILTER_TIME_175NS (5)
/* RX glitch filter time 200 ns. */
#define IR_RX_FILTER_TIME_200NS (6)
/* RX glitch filter time 225 ns. */
#define IR_RX_FILTER_TIME_225NS (7)
/* RX glitch filter time 20 ns. */
#define IR_RX_FILTER_TIME_20NS (0)
/* RX glitch filter time 30 ns. */
#define IR_RX_FILTER_TIME_30NS (1)
/* RX glitch filter time 40 ns. */
#define IR_RX_FILTER_TIME_40NS (2)
/* RX glitch filter time 50 ns. */
#define IR_RX_FILTER_TIME_50NS (3)
/* RX glitch filter time 60 ns. */
#define IR_RX_FILTER_TIME_60NS (4)
/* RX glitch filter time 70 ns. */
#define IR_RX_FILTER_TIME_70NS (5)
/* RX glitch filter time 80 ns. */
#define IR_RX_FILTER_TIME_80NS (6)
/* RX glitch filter time 90 ns. */
#define IR_RX_FILTER_TIME_90NS (7)
/* RX glitch filter time 50 ns. */
#define IR_RX_FILTER_TIME_50NS (0)
/* RX glitch filter time 75 ns. */
#define IR_RX_FILTER_TIME_75NS (1)
/* RX glitch filter time 100 ns. */
#define IR_RX_FILTER_TIME_100NS (2)
/* RX glitch filter time 125 ns. */
#define IR_RX_FILTER_TIME_125NS (3)
/* RX glitch filter time 150 ns. */
#define IR_RX_FILTER_TIME_150NS (4)
/* RX glitch filter time 175 ns. */
#define IR_RX_FILTER_TIME_175NS (5)
/* RX glitch filter time 200 ns. */
#define IR_RX_FILTER_TIME_200NS (6)
/* RX glitch filter time 225 ns. */
#define IR_RX_FILTER_TIME_225NS (7)
/* RX glitch filter time 50 ns. */
#define IR_RX_FILTER_TIME_50NS (0)
/* RX glitch filter time 75 ns. */
#define IR_RX_FILTER_TIME_75NS (1)
/* RX glitch filter time 100 ns. */
#define IR_RX_FILTER_TIME_100NS (2)
/* RX glitch filter time 125 ns. */
#define IR_RX_FILTER_TIME_125NS (3)
/* RX glitch filter time 150 ns. */
#define IR_RX_FILTER_TIME_150NS (4)
/* RX glitch filter time 175 ns. */
#define IR_RX_FILTER_TIME_175NS (5)
/* RX glitch filter time 200 ns. */
#define IR_RX_FILTER_TIME_200NS (6)
/* RX glitch filter time 225 ns. */
#define IR_RX_FILTER_TIME_225NS (7)
IR Exported Functions
-
void IR_ClearINTPendingBit(IR_TypeDef *IRx, u32 IR_CLEAR_INT)
Clear the IR interrupt pending bits.
- 参数:
IRx -- Pointer to an IR peripheral instance, can be IR_DEV
IR_CLEAR_INT --
Specifies the interrupt pending bit to clear. This parameter can be any combination of the following values:
IR_TX_FIFO_EMPTY_INT_CLR: Clear TX FIFO empty interrupt.
IR_TX_FIFO_LEVEL_INT_CLR: Clear TX FIFO threshold interrupt.
IR_TX_FIFO_OVER_INT_CLR: Clear TX FIFO overflow interrupt.
IR_RX_FIFO_FULL_INT_CLR: Clear RX FIFO full interrupt.
IR_RX_FIFO_LEVEL_INT_CLR: Clear RX FIFO threshold interrupt.
IR_RX_CNT_OF_INT_CLR: Clear RX counter overflow interrupt.
IR_RX_FIFO_OF_INT_CLR: Clear RX FIFO overflow interrupt.
IR_RX_CNT_THR_INT_CLR: Clear RX counter threshold interrupt.
IR_RX_FIFO_ERROR_INT_CLR: Clear RX FIFO error read interrupt. Trigger when RX FIFO empty and read RX FIFO.
-
void IR_ClearRxFIFO(IR_TypeDef *IRx)
Clear IR RX FIFO.
- 参数:
IRx -- Pointer to an IR peripheral instance, can be IR_DEV
-
void IR_ClearTxFIFO(IR_TypeDef *IRx)
Clear IR TX FIFO.
- 参数:
IRx -- Pointer to an IR peripheral instance, can be IR_DEV
-
void IR_Cmd(IR_TypeDef *IRx, u32 mode, u32 NewState)
Enable or disable the selected IR mode.
- 参数:
IRx -- Pointer to an IR peripheral instance, can be IR_DEV
mode --
Selected IR operation mode. This parameter can be the following values:
IR_MODE_TX: Transmission mode.
IR_MODE_RX: Receiving mode.
NewState -- New state of the operation mode. This parameter can be: ENABLE or DISABLE.
-
void IR_DeInit(void)
Deinitialize the IR peripheral registers to their default values.
-
u32 IR_FSMRunning(IR_TypeDef *IRx)
Get the specified IR FSM status.
- 参数:
IRx -- Pointer to an IR peripheral instance, can be IR_DEV
- 返回:
The current state of the FSM:
TRUE: RUN
FALSE: IDLE
-
u32 IR_GetIMR(IR_TypeDef *IRx)
Get the IR interrupt mask status.
- 参数:
IRx -- Pointer to an IR peripheral instance, can be IR_DEV
- 返回:
The interrupt mask register value.
-
u32 IR_GetINTStatus(IR_TypeDef *IRx)
Get the IR interrupt status.
- 参数:
IRx -- Pointer to an IR peripheral instance, can be IR_DEV
- 返回:
The interrupt status register value.
-
u32 IR_GetRxDataLen(IR_TypeDef *IRx)
Get data size in RX FIFO.
- 参数:
IRx -- Pointer to an IR peripheral instance, can be IR_DEV
- 返回:
Current data size in RX FIFO.
-
u32 IR_GetTxFIFOFreeLen(IR_TypeDef *IRx)
Get free size of TX FIFO.
- 参数:
IRx -- Pointer to an IR peripheral instance, can be IR_DEV
- 返回:
The free size of TX FIFO
-
void IR_INTConfig(IR_TypeDef *IRx, u32 IR_INT, u32 newState)
Enable or disable the specified IR interrupts.
- 参数:
IRx -- Pointer to an IR peripheral instance, can be IR_DEV
IR_INT --
Specifies the IR interrupts sources to be enabled or disabled. This parameter can be the following values:
IR_TX_FIFO_EMPTY_INT_EN: TX FIFO empty interrupt.
IR_TX_FIFO_LEVEL_INT_EN: TX FIFO threshold interrupt.
IR_TX_FIFO_OVER_INT_EN: TX FIFO overflow interrupt.
IR_RX_FIFO_FULL_INT_EN: RX FIFO full interrupt.
IR_RX_FIFO_LEVEL_INT_EN: RX FIFO threshold interrupt.
IR_RX_CNT_OF_INT_EN: RX counter overflow interrupt.
IR_RX_FIFO_OF_INT_EN: RX FIFO overflow interrupt.
IR_RX_CNT_THR_INT_EN: RX counter threshold interrupt.
IR_RX_FIFO_ERROR_INT_EN: RX FIFO error read interrupt. Trigger when RX FIFO empty and read RX FIFO.
newState -- New state of the specified IR interrupts. This parameter can be: ENABLE or DISABLE.
-
void IR_Init(IR_TypeDef *IRx, IR_InitTypeDef *IR_InitStruct)
Initialize the IR peripheral according to the specified parameters in the IR_InitStruct.
- 参数:
IRx -- Pointer to an IR peripheral instance, can be IR_DEV
IR_InitStruct -- Pointer to a IR_InitTypeDef structure that contains the configuration information for the specified IR peripheral
-
void IR_MaskINTConfig(IR_TypeDef *IRx, u32 IR_INT, u32 newState)
Mask or unmask the specified IR interrupts.
- 参数:
IRx -- Pointer to an IR peripheral instance, can be IR_DEV
IR_INT --
Specifies the IR interrupts sources to be mask or unmask. This parameter can be the following values:
IR_BIT_TX_FIFO_EMPTY_INT_MASK: TX FIFO empty interrupt mask.
IR_BIT_TX_FIFO_LEVEL_INT_MASK: TX FIFO threshold interrupt mask.
IR_BIT_TX_FIFO_OVER_INT_MASK: TX FIFO overflow interrupt mask.
IR_BIT_RX_FIFO_FULL_INT_MASK: RX FIFO full interrupt mask.
IR_BIT_RX_FIFO_LEVEL_INT_MASK: RX FIFO threshold interrupt mask.
IR_BIT_RX_CNT_OF_INT_MASK: RX counter overflow interrupt mask.
IR_BIT_RX_FIFO_OF_INT_MASK: RX FIFO overflow interrupt mask.
IR_BIT_RX_CNT_THR_INT_MASK: RX counter threshold interrupt mask.
IR_BIT_RX_FIFO_ERROR_INT_MASK: RX FIFO error read interrupt mask. Trigger when RX FIFO empty and read RX FIFO.
newState -- New state of the specified IR interrupts. This parameter can be: ENABLE or DISABLE.
-
void IR_ReceiveBuf(IR_TypeDef *IRx, u32 *pBuf, u32 len)
Read data From RX FIFO.
- 参数:
IRx -- Pointer to an IR peripheral instance, can be IR_DEV
pBuf -- Buffer address to receive data.
len -- Read data length.
-
u32 IR_ReceiveData(IR_TypeDef *IRx)
Read one data.
- 参数:
IRx -- Pointer to an IR peripheral instance, can be IR_DEV
- 返回:
Data which is read from RX FIFO.
-
void IR_SendBuf(IR_TypeDef *IRx, u32 *pBuf, u32 len, u32 IsLastPacket)
Send data.
- 参数:
IRx -- Pointer to an IR peripheral instance, can be IR_DEV
pBuf -- Data buffer to send.
len -- Buffer length.
IsLastPacket --
This parameter can be the following values:
ENABLE: The last data in IR packet and there is no continous data.In other words, An infrared data transmission is completed.
DISABLE: There is data to be transmitted continuously.
-
void IR_SendData(IR_TypeDef *IRx, u32 data)
Send one data.
- 参数:
IRx -- Pointer to an IR peripheral instance, can be IR_DEV
data -- Send data.
-
void IR_SetRxCounterThreshold(IR_TypeDef *IRx, u32 IR_RxCntThrType, u32 IR_RxCntThr)
Configure counter threshold value in receiving mode.You can use it to stop receiving IR data.
- 参数:
IRx -- Pointer to an IR peripheral instance, can be IR_DEV
IR_RxCntThrType --
This parameter can be the following values:
IR_RX_COUNT_LOW_LEVEL: Low level counter value >= IR_RxCntThr, trigger IR_INT_RX_CNT_THR interrupt.
IR_RX_COUNT_HIGH_LEVEL: High level counter value >= IR_RxCntThr, trigger IR_INT_RX_CNT_THR interrupt.
IR_RxCntThr -- Configure IR Rx counter threshold value which can be 0 to 0x7fffffffUL.
-
void IR_SetRxThreshold(IR_TypeDef *IRx, uint8_t thd)
Set Rx threshold. When RX FIFO depth > threshold value, trigger interrupt.
- 参数:
IRx -- Pointer to an IR peripheral instance, can be IR_DEV
thd -- Rx threshold.
-
void IR_SetTxThreshold(IR_TypeDef *IRx, uint8_t thd)
Set Tx threshold. When TX FIFO depth <= threshold value, trigger interrupt.
- 参数:
IRx -- Pointer to an IR peripheral instance, can be IR_DEV
thd -- Tx threshold.
-
void IR_StartManualRxTrigger(IR_TypeDef *IRx)
Start trigger only in manual receive mode.
- 参数:
IRx -- Pointer to an IR peripheral instance, can be IR_DEV
-
void IR_StructInit(IR_InitTypeDef *IR_InitStruct)
Fill each IR_InitStruct member with its default value.
- 参数:
IR_InitStruct -- Pointer to an IR_InitTypeDef structure which will be initialized.