功能描述
典型应用
功能实现
CIR 模块可以实现以下功能:- CIR_RX
接收器,可视为具有捕获功能的定时器。
以 NEC 编码协议为例说明如下,当 CIR_RX 信号输入:
- 若脉冲(高电平脉冲或低电平脉冲)宽度小于噪声阈值(NOSIE_THRES),则忽略 CIR_RX 信号。
- 当脉冲保持某一电平持续时间满足启动阈值时 (ACTIVE_THRES),开始数据接收和存储。
- 当脉冲保持某一电平持续时间满足空闲阈值时 (IDLE_THRES),本次接收结束,接收器产生 RXEND_INT 中断,并返回 Idle 空闲状态。
- 在捕获过程中,CIR_RX
信号的每个有效高低电平脉冲,都将按照游程编码方式
(Run-Length
Code,
RLC)),以
Byte 为单位缓存到
RX_FIFO。RLC-Byte(8 位)编码方式:
- MSB 位表示信号电平,高电平表示 1,低电平表示 0。
- 其余 7 位以采样时钟(Sample Clock)为基本单位,表示脉冲宽度。
- 当电平发生变化或脉冲宽度计数溢出时,RLC-Byte 将被缓存到 RX_FIFO,脉冲宽度计数最大 128,超出 128 时使用另一字节缓存。
- CIR_TX
发送器,可视为具有载波调制功能的任意宽度波形发生器。
-
CIR 发送器从 TX_FIFO 中读取连续的数据码,通过格式及逻辑转换,数据码可变成特定宽度的数字脉冲序列。数据码可编程,以游程编码 RLC-byte 方式存储于 FIFO 中。
-
载波发生器默认生成 38 KHz 载波,与转换得到的数字脉冲序列进行调制,输出调制信号 CIR_TX。
载波发生器时钟源选择 APB_CLK,可通过高电平脉冲周期数(CARRIER_HIGH)和低电平脉冲周期数(CARRIER_LOW)配置载波频率和占空比,生成任意频率与宽度的数字波形,通过 TX_OUT_MODE(Transmit Out Mode),选择发送输出模式(默认为 0,调制输出)。
-
操作模式
采样时钟 (Sample_CLK),APB 时钟经过 CIR_CLK 时钟寄存器分频配置得出,用于 RLC-Byte, 表示脉冲宽度的基本单位。
CIR_RX 接收器操作模式-
CIR_RX 接收器采样说明,以 NEC 协议、RC-5 协议为例:
举例 1:假设采样时钟 38 KHz,即采样周期为 1/38 KHz = 26.3 us。- 对于 NEC 协议逻辑 0,高低电平都持续 21 cycles,采样得到 2 个 RLC-Byte,分别为高电平 1001 0101(0x95)、低电平 0001 0101(0x15)。
- 对于 NEC 协议逻辑 1,高电平持续 21 cycles,低电平持续 64 cycles,采样得到 2 个 RLC-Byte,分别为高电平 1001 0101(0x95)、低电平 0100 0000(0x40),其中高位 bit7 表示电平极性,bit6: 0 表示脉冲宽度。
举例 2:假设采样时钟 36 KHz,即采样周期为 1/36 KHz = 27.778 us。- 对于 RC-5 协议逻辑 0,高低电平都持续 32 cycles,采样得到 2 个 RLC-Byte,分别为高电平 1010 0000(0xA0)、低电平 0010 0000(0x20)。
- 对于 RC-5 协议逻辑 1,采样得到 2 个 RLC-Byte,分别为低电平 0010 0000(0x20)、高电平 1010 0000(0xA0),其中高位 bit7 表示电平极性,bit6: 0 表示脉冲宽度。
-
ACTIVE_THRES(Active Threshold,启动阈值):当 CIR 接收器模块处于 Idle 空闲状态,若 CIR_RX 信号电平发生变化,且持续时间达到该阈值,CIR 接收器模块认为这是一个有效激活码,将转变为 Active 状态,开始捕获 CIR_RX 信号。
-
NOISE_THRES(Noise Threshold,噪声阈值):CIR_RX 信号输入时,宽度小于该阈值的脉冲信号,被当作是无效短脉冲,都将被忽略。
-
IDLE_THRES(Idle Threshold,空闲阈值):若 CIR_RX 信号保持某一电平无变化,且持续时间达到该阈值,CIR 接收器模块进入 Idle 空闲状态并结束本次捕获。
-
RX_LEVEL:定义 RX 输入信号电平,默认 RX_LEVEL =1 表示信号空闲状态下为高电平、激活状态下为低电平。RX_LEVEL =0 表示信号空闲状态下为低电平、激活状态下为高电平。
-
RX_INVERT:RX 输入信号可配置是否翻转反相,默认 RX_INVERT=0,不反相
CIR_TX 发送器操作模式
-
TX_OUT_MODE:Transmit Out Mode,发送输出模式。选择是否调制输出。
-
CARRIER_HIGH 载波高电平脉冲周期数。CARRIER_LOW 载波低电平脉冲周期数。以 APB_CLK 为时钟,用于配置载波频率及占空比。
-
TX_MODE:Transmit Mode,发送模式。CIR 发送器有两种发送模式,一种是非循环发送,另一种是循环发送。
-
当 CIR_EN 置为 1 使能 CIR 模块时,发生器内部的时钟分频逻辑等开始动作,但只有 TX_START 为 1 时,发送器才会开始从 TX_FIFO 中读取数据。每读取一次 TX_FIFO,可以获得一字节数据。
-
非循环发送,是将 TX_FIFO 中的数据全部发送出去,直至 FIFO 空。发送过程中,反馈 TX FIFO 空、满状态,软件可以在检测空满状态后是否继续往 FIFO 中填充数据。发送器结束工作产生发送结束中断,然后返回空闲状态,空闲状态默认发送的电平为最后数据脉冲电平。
-
循环发送,是将 FIFO 中的数据全部发送出去,发送完之后等待一定时间之后恢复 FIFO 中的数据然后再次发送(即从第一个数据发送到最后一个数据,再从第一个发送到最后一个,依此类推)。
-
在循环发送模式下,第 N 次和第 N+1 次之间会有空闲持续时间(即发送间隔时间,IDC_THRES)。
-
直至检测到循环发送停止信号(CYC_TX_CTRL=0),循环发送停止,由开始到停止,FIFO 中所有数据必须被发送完,完成后产生发送结束中断。其中恢复 FIFO 中的数据是通过将 TX_FIFO 的读指针清零实现。
-
-
TX_STOP:Transmit Stop Control,发送停止控制。TX_STOP =1,循环发送停止,由开始到停止,FIFO 中所有数据必须被发送完。硬件发送完 FIFO 的数据后自动将该 bit 清 0。
-
IDC_THRES:Idle Duration Counter Threshold,空闲持续时间计数阈值(0~4095)。用于循环发送模式,当发送完 FIFO 中所有数据后,间隔多长时间才再次发送。循环发送间隔时间= IDC_THRES*128*Ttx_clk。