#include "u_global.h" #include "u_rc.h" #include "t_gpio.h" #include "t_timer.h" #include "system.h" #include "user_driver.h" uint8_t g_ir_code[4] = {0x00}; uint8_t g_ir_recv_done_flag = 0x00; #if (NEC_ENABLE==1) //选择 nec接收的gpio, 开使能 void nec_receive_enable(GPIO_NUM gpio) { GPIO_SetGpioMultFunction(gpio,GPCFG_PULLUP); HWRITE(mem_nec_gpio,gpio); HWRITE(mem_nec_receive_enable,1); } #define NEC_CMD 0x01 #define NEC_REPEAT_CMD 0x02 void Bt_NecCallBack(uint8_t len,uint8_t *dataPtr) { switch(*dataPtr) { case NEC_CMD: for(int i=0;i> 4, RC_GPIO_PORT & 0X0F, GPIO_MODE_GPIO, GPIO_IO_IN, GPIO_PULL_UP); GpioIntCfg(RC_GPIO_PORT >> 4, RC_GPIO_PORT & 0X0F, EN, GPIO_INTERRUPT_EDGE_DOWN); //中断触发,中断使能 //memset(&rc_para, 0, sizeof(RcPara_t)); } void u_gpio_int_handle(void) { if (rc_para.shake_flag == 0) { GPIO_output(0, 6, 1); GPIO_output(0, 6, 0); rc_para.shake_flag = 1; Timer_Start(1, 130); if(GpioGetIn(RC_GPIO_PORT >> 4, RC_GPIO_PORT & 0X0F)) { switch (rc_para.capture_flow) { case RC_CAPTURE_START_LOW: { //rc_para.capture_flow = RC_CAPTURE_START_HIGH; //U_UART_PRINTF("H_%d\n", rc_para.time_count); if (rc_para.time_count >= 30 && rc_para.time_count <= 42)//36 { GpioGenCfg(RC_GPIO_PORT >> 4, RC_GPIO_PORT & 0X0F, GPIO_MODE_GPIO, GPIO_IO_IN, GPIO_PULL_UP); GpioIntCfg(RC_GPIO_PORT >> 4, RC_GPIO_PORT & 0X0F, EN, GPIO_INTERRUPT_EDGE_DOWN); //中断触发,中断使能 rc_para.time_count = 0; rc_para.capture_flow = RC_CAPTURE_START_HIGH; } else { rc_recv_clear(); //U_UART_PRINTF("cr_4\n"); } } break; } //U_UART_PRINTF("fw_%d\n", rc_para.capture_flow); } else //gpio_low //if(!GpioGetIn(RC_GPIO_PORT >> 4, RC_GPIO_PORT & 0X0F)) { switch (rc_para.capture_flow) { case RC_CAPTURE_IDLE: { GpioGenCfg(RC_GPIO_PORT >> 4, RC_GPIO_PORT & 0X0F, GPIO_MODE_GPIO, GPIO_IO_IN, GPIO_PULL_UP); GpioIntCfg(RC_GPIO_PORT >> 4, RC_GPIO_PORT & 0X0F, EN, GPIO_INTERRUPT_EDGE_UP); //中断触发,中断使能 rc_para.capture_flow = RC_CAPTURE_START_LOW; rc_para.time_count = 0; //U_UART_PRINTF("st\n"); Timer_Start(0, 280); } break; case RC_CAPTURE_START_HIGH: { //U_UART_PRINTF("L_%d\n", rc_para.time_count); if (rc_para.time_count >= 13 && rc_para.time_count <= 23) //18 { // GpioGenCfg(RC_GPIO_PORT >> 4, RC_GPIO_PORT & 0X0F, GPIO_MODE_GPIO, GPIO_IO_IN, GPIO_PULL_UP); // GpioIntCfg(RC_GPIO_PORT >> 4, RC_GPIO_PORT & 0X0F, EN, GPIO_INTERRUPT_EDGE_DOWN); //中断触发,中断使能 rc_para.time_count = 0; rc_para.decode_cnt = 0; rc_para.capture_flow = RC_CAPTURE_STATE_CODE; } else { rc_recv_clear(); //U_UART_PRINTF("cr_1\n"); } } break; case RC_CAPTURE_STATE_CODE: { //U_UART_PRINTF("%d\n", rc_para.time_count); if (rc_para.time_count >= 2 && rc_para.time_count <= 11) { rc_para.sample_data[rc_para.decode_cnt] = rc_para.time_count; //12 rc_para.decode_cnt++; rc_para.time_count = 0; if (rc_para.decode_cnt >= 32) { rc_recv_clear(); //U_UART_PRINTF("cr_2\n"); g_ir_recv_done_flag = 1; } } else { rc_recv_clear(); //U_UART_PRINTF("cr_3\n"); } } break; default: break; } } } } uint8_t *rc_decode(void) { uint8_t rc_code = 0, k = 0, i = 0; for(i = 0; i < 4; i++) { rc_code = 0; for (k = 0; k < 8; k++) { rc_code <<= 1; if (rc_para.sample_data[i * 8 + k] > RC_CODE_HIGH_PVT) { rc_code |= 0x01; } //U_UART_PRINTF(" %d", rc_para.sample_data[i * 8 + k]); g_ir_code[i] = rc_code; } //U_UART_PRINTF("\n"); } U_UART_PRINTF("rc = %02X, %02X, %02X, %02X\n", g_ir_code[0], g_ir_code[1], g_ir_code[2], g_ir_code[3]); memset(rc_para.sample_data, 0, 40); return (g_ir_code); } void rc_init(void) { GPIO_config(0, 4, 1); GPIO_output(0, 4, 0); GPIO_config(0, 6, 1); GPIO_output(0, 6, 0); memset(&rc_para, 0, sizeof(RcPara_t)); IcuPphCfg( ICU_PPH_GPIO, ICU_MCU_CLK_SRC_APH, ICU_CLK_SRC_FREQ_DPLL_96M, ICU_CLK_PRE_DIV_NONE, ICU_CLK_EN, EN, EN, DISEN); GpioGenCfg(RC_GPIO_PORT >> 4, RC_GPIO_PORT & 0X0F, GPIO_MODE_GPIO, GPIO_IO_IN, GPIO_PULL_UP); GpioIntCfg(RC_GPIO_PORT >> 4, RC_GPIO_PORT & 0X0F, EN, GPIO_INTERRUPT_EDGE_DOWN); //中断触发,中断使能 REG_AHB0_FIQ_PRIORITY_EN |= INT_STATUS_GPIO; Timer_Start(0, 280); //GpioIntHandleCbCfg((GPIO_INT_HANDLE_CB_PFN)&ir_callback); } #endif