142 lines
4.7 KiB
C
142 lines
4.7 KiB
C
|
|
/* USER CODE BEGIN Header */
|
|||
|
|
/**
|
|||
|
|
******************************************************************************
|
|||
|
|
* @file : nce_infrared.h
|
|||
|
|
* @brief : <EFBFBD><EFBFBD>Ϣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͷ<EFBFBD>ļ<EFBFBD>
|
|||
|
|
* @version : 1.0
|
|||
|
|
* @changelog : version 1.0 <EFBFBD><EFBFBD>ʼ<EFBFBD>汾 2025.11.13
|
|||
|
|
******************************************************************************
|
|||
|
|
* @attention
|
|||
|
|
*
|
|||
|
|
* Copyright (c) 2025 Yuwell Software Danyang.Jiangsu.China
|
|||
|
|
* THIS SOFTWARE is licensed under the Mulan PSL v1.
|
|||
|
|
* can use this software according to the terms and conditions of the Mulan PSL v1.
|
|||
|
|
* You may obtain a copy of Mulan PSL v1 at:
|
|||
|
|
* http://license.coscl.org.cn/MulanPSL
|
|||
|
|
* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR
|
|||
|
|
* IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR FIT FOR A PARTICULAR
|
|||
|
|
* PURPOSE.
|
|||
|
|
* See the Mulan PSL v1 for more details.
|
|||
|
|
*
|
|||
|
|
******************************************************************************
|
|||
|
|
*/
|
|||
|
|
/* USER CODE END Header */
|
|||
|
|
|
|||
|
|
/* Define to prevent recursive inclusion -------------------------------------*/
|
|||
|
|
#ifndef __NCE_INFRARED_H
|
|||
|
|
#define __NCE_INFRARED_H
|
|||
|
|
|
|||
|
|
#ifdef __cplusplus
|
|||
|
|
extern "C" {
|
|||
|
|
#endif
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
#include <stdint.h>
|
|||
|
|
#include "fm33lg0xx_fl.h"
|
|||
|
|
/* <20><><EFBFBD>Ӷ<EFBFBD>Malloc<6F><63><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֧<EFBFBD><D6A7> */
|
|||
|
|
#include "stdlib.h"
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
#define NEC_INFRARED_GPIO_PORT GPIOC
|
|||
|
|
#define NEC_INFRARED_GPIO_PIN FL_GPIO_PIN_15
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
/************************** NEC<45><43><EFBFBD><EFBFBD>Э<EFBFBD><D0AD><EFBFBD>궨<EFBFBD><EAB6A8> **************************/
|
|||
|
|
// NECЭ<43><D0AD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD>ָߵ͵<DFB5>ƽ<EFBFBD><C6BD>1MHz<48><7A><EFBFBD><EFBFBD>Ƶ<EFBFBD>ʣ<EFBFBD>
|
|||
|
|
#define NEC_START_LOW_US 9000 // <20><>ʼλ<CABC>͵<EFBFBD>ƽ<EFBFBD><C6BD>9ms
|
|||
|
|
#define NEC_START_HIGH_US 4500 // <20><>ʼλ<CABC>ߵ<EFBFBD>ƽ<EFBFBD><C6BD>4.5ms
|
|||
|
|
#define NEC_DATA_LOW_US 560 // <20><><EFBFBD><EFBFBD>λ<EFBFBD>͵<EFBFBD>ƽ<EFBFBD><C6BD>560<36><30>s<EFBFBD><73>0<EFBFBD><30>1<EFBFBD>ĵ͵<C4B5>ƽ<EFBFBD><C6BD>ͬ<EFBFBD><CDAC>
|
|||
|
|
#define NEC_DATA0_HIGH_US 560 // <20><><EFBFBD><EFBFBD>0<EFBFBD>ߵ<EFBFBD>ƽ<EFBFBD><C6BD>560<36><30>s
|
|||
|
|
#define NEC_DATA1_HIGH_US 1690 // <20><><EFBFBD><EFBFBD>1<EFBFBD>ߵ<EFBFBD>ƽ<EFBFBD><C6BD>1690<39><30>s
|
|||
|
|
|
|||
|
|
// <20>ݴ<EFBFBD><DDB4><EFBFBD>Χ<EFBFBD><CEA7><EFBFBD><EFBFBD>20%<25><>Ԥ<EFBFBD><D4A4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>⸡<EFBFBD><E2B8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
#define NEC_TOLERANCE_85(x) ((x) * 80 / 100)
|
|||
|
|
#define NEC_TOLERANCE_115(x) ((x) * 120 / 100)
|
|||
|
|
|
|||
|
|
// <20><>ʼλ<CABC>ߵ͵<DFB5>ƽ<EFBFBD>ݴ<EFBFBD><DDB4><EFBFBD>Χ
|
|||
|
|
#define NEC_START_LOW_MIN NEC_TOLERANCE_85(NEC_START_LOW_US) // 7650
|
|||
|
|
#define NEC_START_LOW_MAX NEC_TOLERANCE_115(NEC_START_LOW_US) // 10350
|
|||
|
|
#define NEC_START_HIGH_MIN NEC_TOLERANCE_85(NEC_START_HIGH_US) // 3825
|
|||
|
|
#define NEC_START_HIGH_MAX NEC_TOLERANCE_115(NEC_START_HIGH_US) // 5175
|
|||
|
|
|
|||
|
|
// <20><><EFBFBD><EFBFBD>λ<EFBFBD>ݴ<EFBFBD><DDB4><EFBFBD>Χ
|
|||
|
|
#define NEC_DATA_LOW_MIN NEC_TOLERANCE_85(NEC_DATA_LOW_US) // 476
|
|||
|
|
#define NEC_DATA_LOW_MAX NEC_TOLERANCE_115(NEC_DATA_LOW_US) // 644
|
|||
|
|
#define NEC_DATA0_HIGH_MIN NEC_TOLERANCE_85(NEC_DATA0_HIGH_US) // 476
|
|||
|
|
#define NEC_DATA0_HIGH_MAX NEC_TOLERANCE_115(NEC_DATA0_HIGH_US) // 644
|
|||
|
|
#define NEC_DATA1_HIGH_MIN NEC_TOLERANCE_85(NEC_DATA1_HIGH_US) // 1436
|
|||
|
|
#define NEC_DATA1_HIGH_MAX NEC_TOLERANCE_115(NEC_DATA1_HIGH_US) // 1943
|
|||
|
|
|
|||
|
|
#define NEC_START_FALLING_MIN (NEC_START_LOW_MIN + NEC_START_HIGH_MIN)
|
|||
|
|
#define NEC_START_FALLING_MAX (NEC_START_LOW_MAX + NEC_START_HIGH_MAX)
|
|||
|
|
|
|||
|
|
#define NEC_DATA0_FALLING_MIN (NEC_DATA_LOW_MIN + NEC_DATA0_HIGH_MIN)
|
|||
|
|
#define NEC_DATA0_FALLING_MAX (NEC_DATA_LOW_MAX + NEC_DATA0_HIGH_MAX)
|
|||
|
|
|
|||
|
|
#define NEC_DATA1_FALLING_MIN (NEC_DATA_LOW_MIN + NEC_DATA1_HIGH_MIN)
|
|||
|
|
#define NEC_DATA1_FALLING_MAX (NEC_DATA_LOW_MAX + NEC_DATA1_HIGH_MAX)
|
|||
|
|
|
|||
|
|
// <20><><EFBFBD>ݳ<EFBFBD><DDB3>ȶ<EFBFBD><C8B6><EFBFBD>0
|
|||
|
|
#define NEC_DATA_BYTES 4 // <20><>ַ+<2B><>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD>+<2B><><EFBFBD><EFBFBD>+<2B><><EFBFBD>ݷ<EFBFBD><DDB7><EFBFBD>
|
|||
|
|
#define NEC_BITS_PER_BYTE 8 // ÿ<>ֽ<EFBFBD>8λ
|
|||
|
|
#define NEC_TOTAL_BITS (NEC_DATA_BYTES * NEC_BITS_PER_BYTE)
|
|||
|
|
|
|||
|
|
|
|||
|
|
#define NEC_CODE_NUM_4 0xEB142322
|
|||
|
|
#define NEC_CODE_NUM_6 0xE9162322
|
|||
|
|
#define NEC_CODE_TIMER 0xF6092322
|
|||
|
|
|
|||
|
|
/************************** <20><><EFBFBD><EFBFBD>״̬ö<CCAC><C3B6> **************************/
|
|||
|
|
typedef enum
|
|||
|
|
{
|
|||
|
|
IR_STATE_IDLE, // <20><><EFBFBD><EFBFBD>״̬ <20>ȴ<EFBFBD><C8B4><EFBFBD>ʼ<EFBFBD>źŵĵ<C5B5>һ<EFBFBD><D2BB><EFBFBD>½<EFBFBD><C2BD><EFBFBD>
|
|||
|
|
IR_STATE_WAIT_DATA_END, // <20><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD>ռ<EFBFBD><D5BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
} IR_State;
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
/************************** <20><><EFBFBD><EFBFBD><EFBFBD>ṹ<EFBFBD>嶨<EFBFBD><E5B6A8> **************************/
|
|||
|
|
typedef struct
|
|||
|
|
{
|
|||
|
|
IR_State ir_state; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬<D7B4><CCAC>
|
|||
|
|
uint16_t pulse_width_array[33]; // <20><><EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD>ڵij<DAB5><C4B3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
uint16_t pulse_width_index; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>¼<EFBFBD><C2BC>ǰ<EFBFBD>洢<EFBFBD><E6B4A2><EFBFBD>ݵ<EFBFBD>λ<EFBFBD><CEBB>
|
|||
|
|
uint8_t clear_delay; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ
|
|||
|
|
|
|||
|
|
uint32_t received_data;
|
|||
|
|
uint32_t received_data_index;
|
|||
|
|
|
|||
|
|
uint32_t pulse_width;
|
|||
|
|
|
|||
|
|
uint32_t ic_value_last;
|
|||
|
|
uint32_t ic_value_current;
|
|||
|
|
|
|||
|
|
uint8_t ok_count;
|
|||
|
|
|
|||
|
|
bool decode_error;
|
|||
|
|
|
|||
|
|
uint16_t code_464_ing; // <20>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>464У<34><D0A3>
|
|||
|
|
} Infrared;
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
/************************** <20><><EFBFBD>⺯<EFBFBD><E2BAAF><EFBFBD><EFBFBD><EFBFBD><EFBFBD> **************************/
|
|||
|
|
|
|||
|
|
void nec_infrared_init(void); // <20><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3>
|
|||
|
|
void LPTIM_IRQHandler(void);
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
#ifdef __cplusplus
|
|||
|
|
}
|
|||
|
|
#endif
|
|||
|
|
|
|||
|
|
#endif /* __FM33_QUEUE_H */
|
|||
|
|
|
|||
|
|
/************************ (C) COPYRIGHT Yuwell *****END OF FILE****/
|