11.8.2. 功能描述
11.8.2.1. 典型应用
11.8.2.2. 功能实现
CIR_RX接收器
CIR接收器可看作是具有捕获功能的定时器。以NEC编码协议为例,当CIR_RX信号输入,若脉冲(高电平脉冲或低电平脉冲)宽度小于噪声阈值(NOSIE_THRES)则将其忽略;脉冲保持某一电平持续时间满足启动阈值时(ACTIVE_THRES),开始数据接收、存储;当脉冲保持某一电平持续时间满足空闲阈值时(IDLE_THRES),本次接收结束,接收器产生RXEND_INT 中断,并返回Idle空闲状态。
在捕获过程中,CIR_RX信号的每个有效高低电平脉冲,都将按照游程编码方式(RLC,Run-Length Code),以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中),通过格式及逻辑转换,数据码可变成特定宽度的数字脉冲序列。
载波发生器默认生成38kHz载波,与转换得到的数字脉冲序列进行调制,输出调制信号CIR_TX。载波发生器时钟源选择APB_CLK,可通过高电平脉冲周期数(CARRIER_HIGH)和低电平脉冲周期数(CARRIER_LOW)配置载波频率和占空比,生成任意频率与宽度的数字波形,通过TX_OUT_MODE(Transmit Out Mode),选择发送输出模式(默认为0,调制输出)。
11.8.2.3. 操作模式
采样时钟(Sample_CLK),APB时钟经过CIR_CLK时钟寄存器分频配置得出,用于RLC-Byte表示脉冲宽度的基本单位。
CIR_RX接收器
举例1:假设采样时钟38kHz,即采样周期为1/38kHz=26.3us。对于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:假设采样时钟36kHz,即采样周期为1/36kHz=27.778us。对于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 =0表示信号空闲状态下为低电平、激活状态下为高电平;RX_LEVEL =1表示信号空闲状态下为高电平、激活状态下为低电平。
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发送器有两种发送模式,一种是非循环发送,另一种是循环发送。
当TX_EN置为1使能发送器时,发生器内部的时钟分频逻辑等开始动作,但只有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。