IR_DECODER ####################### 红外接收解码驱动,该驱动仅支持 NEC格式 ir_decoder_init ------------------------------ 红外接收解码功能初始化。 原型: .. code-block:: c void ir_decoder_init(const struct gptimer_config *gt_cfg); 参数: ========== ==================== gt_cfg 接收解码配置 返回值 无 ========== ==================== ir_decoder_deinit ------------------------------ 红外接收解码功能释放。 原型: .. code-block:: c void ir_decoder_deinit(); 参数: ========== ==================== 返回值 无 ========== ==================== ir_decoder_get_data ------------------------------ 获取红外原始数据,未校验。 原型: .. code-block:: c u32 ir_decoder_get_data(void); 参数: ========== ==================== 返回值 data 4*8bit = (命令反码 + 命令码 + 地址反码 +地址码) ========== ==================== ir_decoder_get_command_value ------------------------------ 获取红外命令码,已校验。 原型: .. code-block:: c u32 ir_decoder_get_command_value(void); 参数: ========== ==================== 返回值 ir_command ========== ==================== ir_decoder_get_command_value_uncheck ------------------------------------------- 获取红外命令码,无校验。 原型: .. code-block:: c u32 ir_decoder_get_command_value_uncheck(void); 参数: ========== ==================== 返回值 ir_command ========== ==================== ir_decoder_get_address_value ------------------------------ 获取红外地址码,已校验。 原型: .. code-block:: c u32 ir_decoder_get_address_value(void); 参数: ========== ==================== 返回值 ir_address ========== ==================== ir_decoder_get_address_value_uncheck ---------------------------------------------- 获取红外地址码,无校验。 原型: .. code-block:: c u32 ir_decoder_get_address_value_uncheck(void); 参数: ========== ==================== 返回值 ir_address ========== ==================== get_new_irkey_value ------------------------------ 获取对应的键值。 原型: .. code-block:: c u32 get_new_irkey_value(void); 参数: ========== ==================== 返回值 键值 key ========== ==================== ir_decoder参考demo,也可参考 ir_encoder_decoder_demo.c 文件 ------------------------------------------------------------------ .. code-block:: c const struct gptimer_config ir_decode_config = { .capture.filter = 0,//38000, //一般的红外接收模块,硬件自带滤波 .capture.max_period = 110 * 1000, //110ms .capture.port = PORTA, .capture.pin = BIT(1), .irq_cb = NULL, .irq_priority = 3, //根据红外模块的 idle 电平状态,选择边沿触发方式 /* .mode = GPTIMER_MODE_CAPTURE_EDGE_FALL, */ .mode = GPTIMER_MODE_CAPTURE_EDGE_RISE, }; void ir_decoder_demo() { printf("ir_decoder_demo()\n"); ir_decoder_init(&ir_decode_config); //红外信号接收IO_PORTA_O1 u32 ir_key; //接收到的红外码 while (1) { ir_key = ir_decoder_get_data(); if (ir_key != (u32) - 1) { printf("ir_key:0x%x\n", ir_key); } udelay(5 * 100 * 1000); wdt_clear(); } }