📄 driver.h
字号:
#ifndef _DRIVER_H_
#define _DRIVER_H_
#ifdef _DRIVER_C_
#define _DRIVER_DECLARE_
#else
#define _DRIVER_DECLARE_ extern
#endif
#ifdef _DRIVER_C_
/* ======================================= */
//MACRO DEFINE
/* ======================================= */
#define NV_DEVICE_ADDR 0xA0
//IR
/*
#define IR_LEADING_TIME (13500/125)
#define IR_LEADING_DIFF (2000/125)
#define IR_LOGIC0_END (1500/125)
#define IR_LOGIC1_END (2500/125)
#define IR_OUTRANGE_TIME (16000/125)
*/
//IR TIME COUNTER
#define IR_LEADING_TIME 49768 // = 13.5MS * 3686.5 = 49767.75
#define IR_LEADING_DIFF 7373 // 2 * 3686.5 = 7373
#define IR_LOGIC0_1_BORDER 5530 // 1.5*3686.5 = 5529.75
#define IR_OUTRANGE_TIME 58984 //16*3686.5 = 58984
#define IR_TIME_7MS 25805 //7*3686.5 = 25805.5
/* ======================================= */
//DATA TYPE
/* ======================================= */
//Nv Direction enum
typedef enum
{
NV_NONE,
NV_WRITE,
NV_READ,
NV_END
}NV_OPERATION;
//I2c Message Struct
typedef struct
{
Byte Direction;
Byte *pbuffer;
Byte DataNum;
Byte RetryCount;
}I2C_MESSAGE;
//IR detect status
typedef enum
{
IR_STANDBY,
IR_CHECK_LEADING,
IR_REC_DATA,
IR_REC_END
}IR_DETECT_STATUS;
//Delay type
typedef enum
{
DELAY_NONE,
DELAY_9MS,
DELAY_4D5MS,
DELAY_1685US,
DELAY_565US,
DELAY_560US,
DELAY_125US,
DELAY_FINISH
}IR_SEND_DELAY_TYPE;
/* ======================================= */
//FUNCTION PROTOTYPE
/* ======================================= */
static void NVStartTransfer(Byte number, Byte *pbuffer);
static void IRSendLeadingCode(void);
static void IRSendStop(void);
static void IRSendByte(Byte value);
static void IRSendDelay(Byte delayType);
static void IRModulateCarrierStart(void);
static void I2CStart_InterruptControl(void);
static void I2CEnd_InterruptControl(void);
static void IRSendStart_InterruptControl(void);
static void IRSendEnd_InterruptControl(void);
#endif
/* ======================================= */
/*DATATYPE DEFINE */
/* ======================================= */
//IR receive data status
typedef enum
{
REC_NONE,
REC_SEND_READY,
REC_DATA_ADDRESS,
REC_REC_READY,
REC_N_BYTES,
REC_16_BYTES,
REC_ERROR,
REC_END
}IR_REC_DATA_STATUS;
//key index
typedef enum
{
KEY_NONE,
KEY_FUNC_SEL, //key1
KEY_ACTION, //key2
KEY_RESET, //key3
KEY_END
}LOCAL_KEY;
/* ======================================= */
//GLOBAL VARIABLE DECLARE
/* ======================================= */
//IR
_DRIVER_DECLARE_ Bool g_bIRDetect;
_DRIVER_DECLARE_ Bool g_bI2cError;
_DRIVER_DECLARE_ Bool g_bI2cOk;
_DRIVER_DECLARE_ Bool g_bKBI;
_DRIVER_DECLARE_ Byte IDATA irRecBuffer[19];
_DRIVER_DECLARE_ Byte DATA g_ucIRRecDataType;
/* ======================================= */
/* GLOBAL FUNCTION PROTOTYPES */
/* ======================================= */
//timer function
_DRIVER_DECLARE_ void Delay1ms(Word num);
//I2c Function Declare
_DRIVER_DECLARE_ void NVWriteNByte(Byte n,Byte *pbuffer);
_DRIVER_DECLARE_ void NVReadNByte(Byte n,Byte *pbuffer);
//IR
_DRIVER_DECLARE_ void IRSend_SendReady(void);
_DRIVER_DECLARE_ void IRSend_RecReady(void);
//_DRIVER_DECLARE_ void IRSend_Address(Word address);
_DRIVER_DECLARE_ void IRSend_nByteData(Byte n,Byte *pbuffer);
_DRIVER_DECLARE_ void IRSend_16ByteData(Byte *pbuffer);
_DRIVER_DECLARE_ void IRSend_IrEnd(void);
_DRIVER_DECLARE_ void IRSend_Test(void);
_DRIVER_DECLARE_ void IR_CheckLeadingHander(void);
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -