STM8 IrDA红外功能
通过设置UART_CR5寄存器的IREN位选择IrDA模式。UART_CR3寄存器的STOP位必须设置成"1个停止位"。在IRDA模式里,下列位必须保持清零:
- UART_CR3寄存器的LINEN,STOP和CLKEN位
- UART_CR5寄存器的SCEN和HDSEL位。
注意:STM8红外功能只适用于UART1和UART2。
IrDA SIR物理层规定使用反相归零调制方案(RZI),该方案用一个红外光脉冲代表逻辑'0'(见图114)。
SIR发送编码器对从UART输出的NRZ(非归零)比特流进行调制。输出脉冲流被传送到一个外部输出驱动器和红外LED。对于SIR ENDEC应用,UART最高只支持到115.2Kbps速率。在正常模式里,脉冲宽度规定为一个位周期的3/16。
SIR接收解码器对来自红外接收器的归零位比特流进行解调,并将接收到的NRZ串行比特流输出到UART。在空闲状态里,解码器输入通常是高(标记状态marking state)。发送编码器输出的极性和解码器的输入相反。当解码器输入低时,检测到一个起始位。
- IrDA是一个半双工通信协议。如果发送器忙(也就是UART正在送数据给IrDA编码器),IrDA接收线上的任何数据都将被IrDA解码器所忽略。如果接收器忙(也就是UART正在接收从IrDA解码器来的解码数据),从UART的TX上到IrDA的数据将不会被IrDA编码。当接收数据时,应该避免发送,因为将被发送的数据可能被破坏。
- SIR发送逻辑把'0'作为高脉冲发送,把'1'作为低电平发送。脉冲的宽度规定为正常模式时位周期的3/16(见图115)。
- SIR解码器把接收到的IrDA信号转变成比特流后发送给UART。
- SIR接收逻辑把高电平状态解释为'1',把低脉冲解释为'0'。
- 发送编码器输出与解码器输入有着相反的极性。当空闲时,SIR输出处于低状态。
- IrDA规范要求脉冲要宽于1.41us。脉冲宽度是可编程的。接收器端的尖峰脉冲检测电路会过对宽度小于2个PSC周期的脉冲进行过滤操作(PSC是在UART_GTPR中编程的预分频值)。宽度小于1个PSC周期的脉冲一定会被过滤掉,但是那些宽度大于1个而小于2个PSC周期的脉冲可能被接收或滤除,那些宽度大于2个周期的将被视为一个有效的脉冲。当PSC=0时,IrDA编码器/解码器不工作。
- 接收器可以与一低功耗发送器通信。
- 在IrDA模式里,UART_CR2寄存器上的STOP位必须配置成1个停止位。
IrDA红外低功耗模式
IrDA可以工作在正常模式,也可以工作在低功耗模式。选择低功耗模式需要把UART_CR5寄存器的IRLP位置1。
发送器
在低功耗模式,脉冲宽度不再持续3/16个位周期。取而代之,脉冲的宽度是低功耗波特率时钟周期的3倍,该波特率的频率最小可以是1.42MHz。通常这个值是1.8432MHz(1.42 MHz<PSC<2.12 MHz)。一个低功耗模式可编程分频器把系统时钟进行分频以达到这个值。
接收器
低功耗模式的接收类似于正常模式的接收。
为了滤除尖峰干扰脉冲,UART应该滤除宽度短于1个周期的脉冲。只有持续时间大于2个周期的IrDA低功耗波特率时钟(UART_GTPR中的PSC)的低电平信号才被接受为有效的信号。
注意:1.宽度小于2个大于1个PSC周期的脉冲可能会也可能不会被滤除。
2.接收器的建立时间应该由软件管理。IrDA物理层技术规范规定了在发送和接收之间最小要有协10ms的延时(IrDA是一个半双工议)。
(图114:STM8_IrDA SIR ENDEC–框图)
(图115:STM8_IrDA数据调制(3/16)–普通模式)