123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265 |
- #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<len-1;i++)
- {
- g_ir_code[i]=ReverseByteBits(dataPtr[i+1]);
- g_ir_recv_done_flag=1;
- #ifdef DEBUG_DRV_APP
- MyPrintf("nec data[%d]=%x\r\n",i,dataPtr[i+1]);
- #endif
- }
- break;
- case NEC_REPEAT_CMD:
- #ifdef DEBUG_DRV_APP
- MyPrintf("\r\n*************NEC_REPEAT_CMD****************\r\n");
- #endif
- break;
- default:
- break;
- }
- }
- #endif
- void rc_init(void)
- {
- #if (NEC_ENABLE==1)
- nec_receive_enable(NEC_GPIO);
- #endif
- }
- uint8_t *rc_decode(void)
- {
- return (g_ir_code);
- }
- #if 0 //bk3431
- #include "t_icu.h"
- #include "driver_gpio.h"
- #include "bk3231s_reg.h"
- uint8_t g_ir_code[4] = {0x00};
- uint8_t g_ir_recv_done_flag = 0x00;
- typedef struct _rc_para
- {
- uint8_t shake_flag;
- uint8_t decode_cnt;
- uint8_t capture_flow;
- uint8_t sample_data[40];
- volatile uint16_t time_count;
- }RcPara_t;
- RcPara_t rc_para = {0x00};
- void rc_timer0_cb(void)
- {
- rc_para.time_count++;
- GPIO_output(0, 4, 0);
- GPIO_output(0, 4, 1);
- }
- void rc_timer1_cb(void)
- {
- rc_para.shake_flag = 0;
- }
- void rc_recv_clear(void)
- {
- //Timer_Stop(0);
- rc_para.capture_flow = RC_CAPTURE_IDLE;
- rc_para.decode_cnt = 0;
- rc_para.time_count = 0;
- 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); //中断触发,中断使能
- //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
-
|