#include "meg.h" #include "pit.h" #include "sys.h" #include "pit32_drv.h" #include "UI_H.h" static uint8_t comm_package_sequence = 0; DEVICE_WORK_STATUS_T device_working_status_buff_now; DEVICE_WORK_STATUS_T device_working_status_buff_ago; DEVICE_WORK_STATUS_T device_working_status_buff; uint8_t uart1_idle_flag = 0; uint8_t uart3_idle_flag = 0; unsigned char all_flag = 0; unsigned short all_flag_time = 0 ; //500 unsigned char status_flag =0; unsigned short status_flag_time = 0; uint8_t lt_buf[RECEIVE_MCU_PACKAGE_LENGTH]={0}; uint8_t lt_buf_length = 0 ; /*********************************************/ void PIT2_Init(UINT16 arr) { // NVIC_Init(2, 0, PIT2_IRQn, 2); // PIT2->PCSR &= (~PCSR_EN); // PIT2->PCSR = (5 << 8) | PCSR_OVW | PCSR_PIE | PCSR_RLD | PCSR_PDBG; // 75mhz/1 Interrupt mode // PIT2->PMR = arr - 1; // PIT2->PCSR &= ~PCSR_EN; NVIC_Init(2, 0, PIT2_IRQn, 2); PIT2->PCSR &= (~PCSR_EN); PIT2->PCSR = (5 << 8) | PCSR_OVW | PCSR_PIE | PCSR_RLD | PCSR_PDBG; // 75mhz/32 Interrupt mode #if OSC_Frequency PIT2->PMR = arr-1;//23437; // 10ms #else PIT2->PMR = 18749; // 10ms #endif PIT2->PCSR |= PCSR_EN; } void PIT2_IRQHandler(void) { PIT2->PCSR |= (1 << 2); // clear PIF interrupt flag all_flag_time ++; static unsigned char wifi_time =0; static unsigned short adj_touch_time =0; if(all_flag_time == DEBUG_FLAG_TIME) { all_flag_time = 0; all_flag = 1; } status_flag_time++; if(all_flag_time == DEBUG_STATUS_TIME) { status_flag_time = 0; status_flag = 1; } /**********************************/ // 按键计时 if((Adj_flag1==1) || (Adj_flag==1)) { adj_touch_time++; if(adj_touch_time ==300) { adj_touch_time = 0; long_touch_flag = 1; printf("\r\n***pit-IR***\r\n"); } } else if((Adj_flag1==0) || (Adj_flag==0)) { adj_touch_time = 0; } // WIFI 闪烁 if(device_working_status_buff.wifi_status == 1) { wifi_time++; if(wifi_time == 50*2) //慢闪 1S/次 500ms执行一次 10ms进一次中断 { wifi_time=0; var[2 * (WIFI_ADDRESS + 0)] =~var[2 * (WIFI_ADDRESS + 0)]; var[2 * (WIFI_ADDRESS + 0) + 1]=~var[2 * (WIFI_ADDRESS + 0)+1]; } } else if(device_working_status_buff.wifi_status == 2) { wifi_time++; if(wifi_time == 25*2) // 慢闪 0.5S/次 250ms执行一次 10ms进一次中断 { wifi_time=0; var[2 * (WIFI_ADDRESS + 0)] =~var[2 * (WIFI_ADDRESS + 0)]; var[2 * (WIFI_ADDRESS + 0) + 1]=~var[2 * (WIFI_ADDRESS + 0)+1]; } } /* if (device_working_status_buff.wifi_status != 0) { wifi_time++; if(device_working_status_buff.wifi_status == 1) { if(wifi_time == 50) //慢闪 1S/次 500ms执行一次 10ms进一次中断 { wifi_time=0; } } else if (device_working_status_buff.wifi_status == 2) { if(wifi_time == 25) //慢闪 1S/次 500ms执行一次 10ms进一次中断 { wifi_time=0; } } } */ } //打印标志位 10S 观察 void debug_flag(void) { printf("\r\n*********************************************\r\n"); printf("button_Press_flag =%d \r\n",button_Press_flag); printf("button_Press_flag1 =%d \r\n",button_Press_flag1); printf("button_Press_flag2 =%d \r\n",button_Press_flag2); printf("Basci_flag =%d \r\n",Basci_flag); printf("Basci_flag1 =%d \r\n",Basci_flag1); printf("switch_flag =%d \r\n",switch_flag); printf("breath_flag =%d \r\n",breath_flag); printf("Adj_flag =%d \r\n",Adj_flag); printf("Adj_flag1 =%d \r\n",Adj_flag1); printf("clound_flag =%d \r\n",wind_flag); printf("model_flag =%d \r\n",model_flag); printf("dehumidify_flag =%d \r\n",dehumidify_flag); printf("one_two =%d \r\n",one_two); printf("help_flag =%d \r\n",help_flag); printf("Basic_help_flag =%d \r\n",Basic_help_flag); printf("Adj_help_flag =%d \r\n",Adj_help_flag); printf("*********************************************\r\n"); } //打印温湿度等数据 20S void debug_status(void) { printf("debug_hum=%d\r\n",device_working_status_buff_now.humidity_t); } /****************MCU****************/ //封装MUC数据包+发送 用于LT 发送 数据 至 mcu uint8_t send_mcu_package(uint8_t * buf ,uint8_t cmd , uint16_t adress ,uint16_t * data , uint8_t data_amount) { // 0x5a 0xa5 长度(1+2+n*2+2) 指令码(1) 变量地址(2) 写入数据(n*2) CRC(2) MCU_PACKAGE * mcu_package; mcu_package = (MCU_PACKAGE *) buf; uint8_t mcu_package_part_length = sizeof(MCU_PACKAGE); memset((void *)mcu_package ,0 ,sizeof(MCU_PACKAGE)); mcu_package->mcu_head_package[0]=SEND_MCU_PACKAGE_FIRST; mcu_package->mcu_head_package[1]=SEND_MCU_PACKAGE_SECOND; mcu_package->cmd = cmd; mcu_package->address = ((adress&0xFF00)>>8)|((adress&0x00FF)<<8); for(uint8_t i =0 ; i < data_amount; i ++ ) { // 0x1314 // 0x14 0x13 buf[mcu_package_part_length+i*2+1] = (uint8_t)(data[i]&0x00FF);//(uint8_t)((0xFF00 & data[i])>>8); buf[mcu_package_part_length+i*2] = (uint8_t)((data[i]&0xFF00)>>8);//(uint8_t)0x00FF & data[i]; } //***************校验码****************** uint8_t len = mcu_package_part_length + data_amount * 2 - 3; LT_SendData_CRC_Frame(buf, len); return 0; } #if 0 //拆解MCU数据包 int recev_mcu_package() { } #endif // 面板变量变化 及时发送通知mcu(与mcu同步) uint8_t inform_mcu() { static DEVICE_WORK_STATUS_T device_working_status_pre; // 对比pre 和 buf 如果不一致 则 更新pre 同时发送数据 同步 mcu; pre:当前的状态 buf:实时的状态 #if 0 if() { send_mcu_package; } #endif } // 收到mcu的数据后 先判断是LT 的数据包 还是 模组的数据包 uint8_t analysis_mcu_package(uint8_t * buf ) { if(buf[0]) { } else if(buf[0]) { } else { } return 0; } //用串口1发送数据包给mcu 用于转发模组的数据包 int send_mes_mcu(char* mes_buf , char mes_length) { char mes_number = 0; for(mes_number=0; mes_number < mes_length ; mes_length++) { SendData_SCI1(mes_buf[mes_number]); } return 0; } /****************模组****************/ //封装模组数据包 返回长度 用于发送传参 //*buf : 缓存地址 length : 数据的长度 (字节) int send_wifi_package(uint8_t * buf ,uint8_t type, uint8_t cmd, uint8_t subCmd , char length , uint8_t *data) { WIFI_PACKAGE * wifi_package; uint8_t total_msg_len = sizeof(WIFI_PACKAGE)+length+1; memset(wifi_package,0,total_msg_len); wifi_package = (WIFI_PACKAGE *)buf; wifi_package->package_head[0]=SEND_WIFI_PACKAGE_HEAD_FIRST; wifi_package->package_head[1]=SEND_WIFI_PACKAGE_HEAD_SECOND; wifi_package->package_version=SEND_WIFI_PACKAGE_VERSION; wifi_package->package_sequence = comm_package_sequence++; wifi_package->package_type = type; wifi_package->data_length= length + 2; wifi_package->command = cmd; wifi_package->sub_command = subCmd; for(uint8_t data_number=0 ; data_number=receive_wifi_buf[WIFI_CONTROL_DATA_OFFSET+1]) ) { device_working_status_buff.filter1_life_t = receive_wifi_buf[WIFI_CONTROL_DATA_OFFSET+1]; } else { //打印!! 清空缓存 return -3; } //UI //上报MCU } //蜂鸣器 else if(sub_cmd==BUZZER_SUB_COMMAND) { //直接发送给mcu 蜂鸣 //UI //上报MCU } //档位 else if(sub_cmd==GEAR_SUB_COMMAND) { device_working_status_buff.fan_gear_t = receive_wifi_buf[WIFI_CONTROL_DATA_OFFSET]; //UI //上报MCU } else { //打印失败!! //清空缓存{********} return -3; } } } //*******请求包 0x02 ******* if(msg_type==RECEIVE_WIFI_PACKAGE_REQUEST) { } //清空缓存 考虑是否打印!!!! return 0; } #endif //用串口3发送数据包给模组 //用于转发mcu的数据给模组 int send_mes_wifi(uint8_t * mes_buf , char mes_length) { char mes_number = 0; for(mes_number=0; mes_number < mes_length ; mes_number++) { SendData_SCI3(mes_buf[mes_number]); } return 0; } //校验码 uint8_t comm_message_checksum(uint8_t * data, uint16_t len) { int16_t checkSum = 0; char *pBuf = (char *)data; uint16_t bufLen = len; for (int i = 0; i < bufLen; i++){ checkSum += pBuf[i]; } checkSum = checkSum % (0x100); return checkSum; } /*******************************************************************************************/ /* 写eflash if (cmd == 0x61) { len = (buf[1] << 8) | buf[2]; eflash_addr = 0x804B000 + ((buf[4] << 24) | (buf[5] << 16) | (buf[6] << 8) | buf[7]); EFLASH_Init(g_sys_clk / 1000); EFLASH_SetWritePermission(); temp = EFLASH_Write(eflash_addr,&buf[8],len-7); EFLASH_ClrWritePermission(); rebuf[5] = cmd; rebuf[6] = buf[4]; rebuf[7] = buf[5]; rebuf[8] = buf[6]; rebuf[9] = buf[7]; rebuf[10] = 0x4F; rebuf[11] = 0x4B; LT_SendFlashData_CRC_Frame(rebuf, 7); } */