eecs-bsp-test-code-2/inc/IR.h

85 lines
8.3 KiB
C
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/********************************** IR V3.5a 说明 ***********************************************
IR模块用于控制“STC-B学习板”上红外发送与接收控制支持PWM、PPM红外编码协议的发送PWM红外编码的接收可用于制作红外遥控器、红外通信等。
IR模块提供1个驱动函数、5个API应用函数、1个红外接收事件enumEventIrRxd红外Ir上收到一个数据包
IR模块已不与串口通信uart和uart2冲突可用与它们同时工作。以前冲突
(1) void IrInit(unsigned char Protocol)IR模块初始化函数。
函数参数unsigned char Protocol定义红外协议。
Protocol 暂仅提供取值NEC_R05d定义红外协议基本时间片时长 = 13.1*Protocol uS
函数返回值:无
(2) char IrTxdSet(unsigned char *pt,unsigned char num)以自由编码方式控制IR发送可用于编写任意编码协议的红外发送如各种电器红外遥控器等
函数参数unsigned char *pt指向待发送红外编码数据的首地址。编码规则如下
码1红外发送时长码1红外发送停止时长 //单位协议基本时间片的个数值最大255。如当协议基本时间片为0.56mS时,
码2红外发送时长码2红外发送停止时长 //如当协议基本时间片为0.56mS时数值1代表0.56mS时长3代表1.68mS时长,......
......
......
码n红外发送时长码n红外发送停止时长
unsigned char num待发送红外编码数据的大小字节数
函数返回值enumIrTxOK调用成功即所设定的发送数据包请求已被系统sys正确接受sys将尽硬件资源最大可能及时发送数据。
enumIrTxFailure调用失败主要原因是红外发送正忙上一数据包未发完、或红外正在接收一个数据包进行中
同IrPrint()函数返回值)
补充说明参照该格式定义和电器遥控器编码格式可实现任何38KHz红外遥控器功能。
(3) char IrPrint(void *pt, unsigned char num)//以NEC的PWM编码方式发送数据可用于符合该函数发送格式的部分电器遥控器与GetIrRxNum()、SetIrRxd()配合,可进行红外双机通信;等
//红外发送数据格式为引导码16*基本时间片8*基本时间片。0.56mS时发9mS、停4.5mS
数据编码:"0" -- 发1*基本时间片1*基本时间片)
"1" -- 发1*基本时间片3*基本时间片)
先发高位、后发低位
结束码1*基本时间片1*基本时间片)
//非阻塞函数该函数从被调用到返回大约1uS左右时间,但所指定的数据经红外发送完毕则需要较长时间每字节大约需要10mS量级时间
//IrPrint()函数用法完全类似与uart模块的Uart1Print()和Uart2Print()用法仅num参数为unsigned char可参照使用
函数参数void *pt :指定发送数据包位置(数据包不含引导码、结束码信息,仅待发送的有效数据)
unsigned char num发送数据包大小字节数不含引导码、结束码
函数返回值enumIrTxOK调用成功即所设定的发送数据包请求已被系统sys正确接受sys将尽硬件资源最大可能及时发送数据。
enumIrTxFailure调用失败主要原因是红外发送正忙上一数据包未发完、或红外正在接收一个数据包进行中
同IrTxdSet()函数返回值)
(4) void SetIrRxd(void *RxdPt,unsigned char RxdNmax):设置红外接收数据包存放位置、每个数据包最大字节数。
收到一个数据包至少1字节数据时将产生numEventIrRxd事件。与它机IrPrint()函数配合,可实现红外数据通信
函数参数: void char *RxdPt指定接收数据包存放区首地址
unsigned char RxdNmax指定每个数据包接收最大字节数。当收到的数据大于Nmax后将被丢弃。
函数返回值:无
(5) unsigned char GetIrRxNum(void)获取收到的红外接收数据包实际字节数。与SetIrRxd()配合可实现红外数据包接收。它机应使用IrPrint()函数发送数据包)
返回取值 <= Ir接收缓冲区最大字节数RxdNmax定义。如果实际红外数据包字节数大于RxdNmax收到的多余字节数将不被存储也不进行计数
函数参数: 无
函数返回值:红外接收数据包大小(字节数)。
当收到一个数据包的numEventIrRxd事件产生后可用该函数获取红外接收数据包的大小字节数。其它时间访问其值不确定
(6) char GetIrStatus(void) 获取Ir状态
函数返回值enumIrFree红外空闲
enumIrBusy红外正忙正在发送数据包或正在接收数据包
(7) 红外接收事件enumEventIrRxd红外Ir上收到一个符合格式的数据包红外格式见IrPrint()函数说明)。
如果接收数据包实际字节数大于Ir接收缓冲区最大字节数RxdNmax定义也在收到数据包结束符后产生enumEventIrRxd事件
补充说明:
(1) 串口1、串口2波特率可独立设置互不影响.
(2) 串口1、串口2、红外通信可同时工作互不影响
(3) 串口1、串口2用法基本上完全一致红外通信用法也基本相同。不同地方是
a串口1固定在USB接口上可用于与计算机通信而串口2可初始化在EXT扩展、或485接口上在485接口上时仅单工工作
b红外通信速率固定不可变大约相当于500800 bps通信时没有包头匹配功能。红外模块除通信功能外还提供用于电器红外遥控的应用函数
c红外通信模块仅为单工工作。不发送时自动进入接收状态有数据发送时自动进入发送状态但正在接收数据包过程中不会进入发送状态。
编写徐成电话18008400450 2021年8月24日设计2021年11月5日更新
*/
#ifndef _IR_H_
#define _IR_H_
extern void IrInit(unsigned char Protocol); //IR模块初始化。参数定义红外IR基本周期
enum IrProtocalName {NEC_R05d=43}; //定义红外IR协议基本周期 = 43*1000/76 = 566 (uS)
extern char IrTxdSet(unsigned char *pt,unsigned char num); //以自由编码方式控制IR发送可用于编写任意编码协议的红外发送如各种电器红外遥控器等
extern char IrPrint(void *pt, unsigned char num); //以NEC的PWM编码方式发送数据可用于符合该函数发送格式的部分电器遥控器与SetIrRxd()配合,可进行红外双机通信;等
extern void SetIrRxd(void *RxdPt,unsigned char RxdNmax); //设置红外接收数据包存放位置、每个数据包最大字节数。收到一个数据包至少1字节数据时将产生numEventIrRxd事件。与它机IrPrint()函数配合,可实现红外数据通信
extern unsigned char GetIrRxNum(void); //当收到一个数据包的numEventIrRxd事件产生后可用该函数获取红外接收数据包的大小字节数。其它时间访问其值不确定
extern char GetIrStatus(void); //获取Ir状态,enumIrFree:红外接口空闲, enumIrBusy,红外接口正忙
enum IrActName {enumIrFree=0 //红外发送空闲
,enumIrBusy // 忙
,enumIrTxOK // 发送成功
,enumIrTxFailure}; // 发送失败(正忙)
#endif