void ReadNext(void) { if(Net_Sel == 2 && Tail_Net) //第二个判断已插上 { Usart1buf[7] = Net_Sel; ReadOffSet(); Usart1Send(); } else if(Right_Net && Net_Sel == 2) //第三个插上 { Net_Sel++; Usart1buf[7] = Net_Sel; ReadOffSet(); Usart1Send(); } else if(Net_Sel == 3 && Right_Net) //第三个 { Usart1buf[7] = Net_Sel; ReadOffSet(); Usart1Send(); } else { FirstReadFlag = 0; Net_Sel = 0; TIM_Cmd(TIM2,DISABLE); } TIM2->CNT = 0; }
void ShowConfiguration(void) { char str [100]; Usart1Send((char *) "Configuration:\r\n"); #ifdef CONFIGURATION_IN_SST LoadFilesIndex(); sprintf(str, "B1T: %d, B1R: %d\r\n", param_struct.b1t, param_struct.b1r); Usart1Send(str); Wait_ms(100); sprintf(str, "B2T: %d, B2R: %d\r\n", param_struct.b2t, param_struct.b2r); Usart1Send(str); Wait_ms(100); sprintf(str, "B3T: %d, B3R: %d\r\n", param_struct.b3t, param_struct.b3r); Usart1Send(str); Wait_ms(100); sprintf(str, "B4T: %d, B4R: %d\r\n", param_struct.b4t, param_struct.b4r); Usart1Send(str); Wait_ms(100); #endif #ifdef CONFIGURATION_IN_FLASH sprintf(str, "B1T: %d, B1R: %d\r\n", b1t, b1r); Usart1Send(str); Wait_ms(100); sprintf(str, "B2T: %d, B2R: %d\r\n", b2t, b2r); Usart1Send(str); Wait_ms(100); sprintf(str, "B3T: %d, B3R: %d\r\n", b3t, b3r); Usart1Send(str); Wait_ms(100); sprintf(str, "B4T: %d, B4R: %d\r\n", b4t, b4r); Usart1Send(str); Wait_ms(100); #endif }
//读取超时处理,再次读取,总次数不超过3次 void TIM2_IRQHandler(void) { if(TIM_GetITStatus(TIM2,TIM_IT_Update) != RESET) { ReadTime++; if(ReadTime<=1) { ReadOffSet(); Usart1Send(); } else //判断为故障 { switch(Net_Sel) { case 1: NetState[0] = 2; MMSI[0] = 0; break; case 2: NetState[1] = 2; MMSI[1] = 0; break; case 3: NetState[2] = 2; MMSI[2] = 0; break; } if(FirstReadFlag==0) //不是第一次读取 { TIM_Cmd(TIM2,DISABLE); } else //第一次读取 { Net_Sel++; if(Net_Sel<=3) //继续读取下一个 { ReadNext(); } else //三个网位仪都读取完 { TIM_Cmd(TIM2,DISABLE); FirstReadFlag = 0; } ReadTime = 0; } } TIM_ClearITPendingBit(TIM2,TIM_IT_Update); } }
void USART1_IRQHandler(void) { if (USART_GetITStatus(USART1, USART_IT_RXNE) != RESET) { //blink a led GPIOB->ODR ^= GPIO_Pin_5; RxBuffer[RxLenght] = USART_ReceiveData(USART1); //Send response when carriage return received if(RxBuffer[RxLenght++] == '\r'){ RxBuffer[RxLenght] = '\0'; Usart1SendString("Received "); Usart1SendString((char*)RxBuffer); Usart1Send('\n'); RxLenght = 0; } //if buffer is full, overwrite that sonOfA... else if(RxLenght == RXBUFFERSIZE) RxLenght = 0; } }
void Timer_Interrupt_Handler (unsigned short tpm1) { // char str [20]; unsigned short duration = 0; if (lastC0V > tpm1) duration = (0xffff - lastC0V) + tpm1; //dio la vuelta else duration = tpm1 - lastC0V; //lo normal lastC0V = tpm1; // if (on_receipt) // { // if (F5PLUS) // F5PLUS_OFF; // else // F5PLUS_ON; // } #ifdef WITHOUT_ABSOLUTE_VALUE_CTROL_NEW switch (bitstate) { case WAIT_FOR_SILENT: no_silent++; break; case FIRST_HIGH: bitcount = 0; code0 = 0; code1 = 0; bitstate++; break; case FIRST_LOW: if ((duration > PILOT_MIN_NEW) && (duration < PILOT_MAX_NEW)) //tengo mi primer first high, ahora vienen los bits { bitstate++; ctrol_new = 1; Usart1Send((char *)"new "); } else { //bitstate = CODE_FINISH; bitstate = FIRST_HIGH; errorcode = ERR_FIRST_HIGH; } break; case NEXT: if ((duration > LAMBDA1_FROM0_MIN_NEW) && (duration < LAMBDA1_FROM0_MAX_NEW)) { //puede ser un 0 bitstate = CHECK0; } else if ((duration > LAMBDA2_FROM1_MIN_NEW) && (duration < LAMBDA2_FROM1_MAX_NEW)) { //puede ser un 1 bitstate = CHECK1; } else { //error en bit //bitstate = CODE_FINISH; bitstate = FIRST_HIGH; errorcode = ERR_BIT_NEXT; } break; case CHECK0: if ((duration > LAMBDA2_FROM0_MIN_NEW) && (duration < LAMBDA2_FROM0_MAX_NEW)) { //llego el 0 bitstate = NEXT; //si no es el primer bit if (bitcount) { if (bitcount < 16) code0 <<= 1; else code1 <<= 1; } bitcount++; } else { //error en bit //bitstate = CODE_FINISH; bitstate = FIRST_HIGH; errorcode = ERR_BIT_0; } break; case CHECK1: if ((duration > LAMBDA1_FROM1_MIN_NEW) && (duration < LAMBDA1_FROM1_MAX_NEW)) { //llego el 1 bitstate = NEXT; //si no es el primer bit if (bitcount) { if (bitcount < 16) { code0 += 1; code0 <<= 1; } else { code1 += 1; code1 <<= 1; } } bitcount++; } else { //error en bit //bitstate = CODE_FINISH; bitstate = FIRST_HIGH; errorcode = ERR_BIT_1; } break; case CODE_FINISH: break; default: //ver si no tengo que ir directo a NEXT bitstate = WAIT_FOR_SILENT; break; } //me fijo si termino el paquete if (bitcount >= 28) { bitstate = CODE_FINISH; errorcode = ERR_FINISH_OK; } #endif #ifdef WITHOUT_ABSOLUTE_VALUE_CTROL_EV1527_AND_PT2264 switch (bitstate) { case WAIT_FOR_SILENT: no_silent++; break; case FIRST_HIGH: bitcount = 0; code0 = 0; code1 = 0; bitstate++; break; case FIRST_LOW: if ((duration > ALPHA1_MIN) && (duration < ALPHA1_MAX)) //tengo mi primer first high, ahora vienen los bits { bitstate = CHECK0; on_receipt = 1; Usart1Send((char *)"ev1527_0"); } else if ((duration > ALPHA3_MIN) && (duration < ALPHA3_MAX)) //tengo mi primer first high, ahora vienen los bits { bitstate = CHECK1; on_receipt = 1; Usart1Send((char *)"ev1527_1"); } else { //bitstate = CODE_FINISH; bitstate = FIRST_HIGH; errorcode = ERR_FIRST_HIGH; on_receipt = 0; } break; case NEXT: if ((duration > ALPHA1_MIN) && (duration < ALPHA1_MAX)) { //puede ser un 0 bitstate = CHECK0; } else if ((duration > ALPHA3_MIN) && (duration < ALPHA3_MAX)) { //puede ser un 1 bitstate = CHECK1; } else { //error en bit //bitstate = CODE_FINISH; bitstate = FIRST_HIGH; errorcode = ERR_BIT_NEXT; on_receipt = 0; } break; case CHECK0: if ((duration > ALPHA3_MIN) && (duration < ALPHA3_MAX)) { //llego el 0 bitstate = NEXT; bitcount++; if (bitcount < 16) code0 <<= 1; else code1 <<= 1; } else { //error en bit //bitstate = CODE_FINISH; bitstate = FIRST_HIGH; errorcode = ERR_BIT_0; on_receipt = 0; } break; case CHECK1: if ((duration > ALPHA1_MIN) && (duration < ALPHA1_MAX)) { //llego el 1 bitstate = NEXT; bitcount++; if (bitcount < 16) { code0 += 1; code0 <<= 1; } else { code1 += 1; code1 <<= 1; } } else { //error en bit //bitstate = CODE_FINISH; bitstate = FIRST_HIGH; errorcode = ERR_BIT_1; on_receipt = 0; } break; case CODE_FINISH: break; default: //ver si no tengo que ir directo a NEXT bitstate = WAIT_FOR_SILENT; break; } //me fijo si termino el paquete if (bitcount >= 24) { bitstate = CODE_FINISH; errorcode = ERR_FINISH_OK; } #endif #ifdef WITHOUT_ABSOLUTE_VALUE_CTROL_EV1527 switch (bitstate) { case WAIT_FOR_SILENT: no_silent++; break; case FIRST_HIGH: bitcount = 0; code0 = 0; code1 = 0; bitstate++; break; case FIRST_LOW: if ((duration > PILOT_MIN0_NEW) && (duration < PILOT_MAX0_NEW)) //tengo mi primer first high, ahora vienen los bits { bitstate = CHECK0; ctrol_new = 1; Usart1Send((char *)"ev1527_0"); } else if ((duration > PILOT_MIN1_NEW) && (duration < PILOT_MAX1_NEW)) //tengo mi primer first high, ahora vienen los bits { bitstate = CHECK1; ctrol_new = 1; Usart1Send((char *)"ev1527_1"); } else { //bitstate = CODE_FINISH; bitstate = FIRST_HIGH; errorcode = ERR_FIRST_HIGH; } break; case NEXT: if ((duration > LAMBDA1_FROM0_MIN_NEW) && (duration < LAMBDA1_FROM0_MAX_NEW)) { //puede ser un 0 bitstate = CHECK0; } else if ((duration > LAMBDA2_FROM1_MIN_NEW) && (duration < LAMBDA2_FROM1_MAX_NEW)) { //puede ser un 1 bitstate = CHECK1; } else { //error en bit //bitstate = CODE_FINISH; bitstate = FIRST_HIGH; errorcode = ERR_BIT_NEXT; } break; case CHECK0: if ((duration > LAMBDA2_FROM0_MIN_NEW) && (duration < LAMBDA2_FROM0_MAX_NEW)) { //llego el 0 bitstate = NEXT; bitcount++; if (bitcount < 16) code0 <<= 1; else code1 <<= 1; } else { //error en bit //bitstate = CODE_FINISH; bitstate = FIRST_HIGH; errorcode = ERR_BIT_0; } break; case CHECK1: if ((duration > LAMBDA1_FROM1_MIN_NEW) && (duration < LAMBDA1_FROM1_MAX_NEW)) { //llego el 1 bitstate = NEXT; bitcount++; if (bitcount < 16) { code0 += 1; code0 <<= 1; } else { code1 += 1; code1 <<= 1; } } else { //error en bit //bitstate = CODE_FINISH; bitstate = FIRST_HIGH; errorcode = ERR_BIT_1; } break; case CODE_FINISH: break; default: //ver si no tengo que ir directo a NEXT bitstate = WAIT_FOR_SILENT; break; } //me fijo si termino el paquete if (bitcount >= 24) { bitstate = CODE_FINISH; errorcode = ERR_FINISH_OK; } #endif #ifdef WITHOUT_ABSOLUTE_VALUE_CTROL_HT6P20B2_AND_PT2264 switch (bitstate) { case WAIT_FOR_SILENT: no_silent++; break; case FIRST_HIGH: bitcount = 0; code0 = 0; code1 = 0; bitstate++; break; case FIRST_LOW: //veo si puedo establecer directamente que control es if ((duration > PILOT_HT_MIN) && (duration < ALPHA1_MIN)) { //seguro es HT6P20B2 bitstate = NEXT_HT; on_receipt = 1; ctrol_new = CTRL_HT; Usart1Send((char *)"ht6__"); } else if ((duration >= ALPHA1_MIN) && (duration < PILOT_HT_MAX)) { //puede ser HT6P20B2 o PT2264 on_receipt = 1; bitstate = NEXT_ALL; } else if ((duration >= PILOT_HT_MAX) && (duration < ALPHA1_MAX)) { //seguro es PT2264 bitstate = CHECK0_PT; on_receipt = 1; ctrol_new = CTRL_PT; Usart1Send((char *)"pt2264__"); } else { bitstate = FIRST_HIGH; errorcode = ERR_FIRST_HIGH; on_receipt = 0; } break; case NEXT_ALL: //tengo todavia que definir que tipo de control es if ((duration > LAMBDA1_MIN) && (duration < LAMBDA1_MAX)) { //puede ser un 0 bitstate = CHECK0_HT; ctrol_new = CTRL_HT; Usart1Send((char *)"ht6_0"); } else if ((duration > LAMBDA2_MIN) && (duration < LAMBDA2_MAX)) { //puede ser un 1 bitstate = CHECK1_HT; ctrol_new = CTRL_HT; Usart1Send((char *)"ht6_1"); } else if ((duration > ALPHA3_MIN) && (duration < ALPHA3_MAX)) { //llego el 0 bitstate = NEXT_PT; ctrol_new = CTRL_PT; bitcount++; if (bitcount < 16) code0 <<= 1; else code1 <<= 1; } else { //error en bit bitstate = FIRST_HIGH; errorcode = ERR_BIT_NEXT; on_receipt = 0; } break; case NEXT_PT: if ((duration > ALPHA1_MIN) && (duration < ALPHA1_MAX)) { //puede ser un 0 bitstate = CHECK0_PT; } else if ((duration > ALPHA3_MIN) && (duration < ALPHA3_MAX)) { //puede ser un 1 bitstate = CHECK1_PT; } else { //error en bit bitstate = FIRST_HIGH; errorcode = ERR_BIT_NEXT; on_receipt = 0; } break; case CHECK0_PT: if ((duration > ALPHA3_MIN) && (duration < ALPHA3_MAX)) { //llego el 0 bitstate = NEXT_PT; bitcount++; if (bitcount < 16) code0 <<= 1; else code1 <<= 1; } else { //error en bit bitstate = FIRST_HIGH; errorcode = ERR_BIT_0; on_receipt = 0; } break; case CHECK1_PT: if ((duration > ALPHA1_MIN) && (duration < ALPHA1_MAX)) { //llego el 1 bitstate = NEXT_PT; bitcount++; if (bitcount < 16) { code0 += 1; code0 <<= 1; } else { code1 += 1; code1 <<= 1; } } else { //error en bit //bitstate = CODE_FINISH; bitstate = FIRST_HIGH; errorcode = ERR_BIT_1; on_receipt = 0; } break; case NEXT_HT: if ((duration > LAMBDA1_MIN) && (duration < LAMBDA1_MAX)) { //puede ser un 0 bitstate = CHECK0_HT; } else if ((duration > LAMBDA2_MIN) && (duration < LAMBDA2_MAX)) { //puede ser un 1 bitstate = CHECK1_HT; } else { //error en bit bitstate = FIRST_HIGH; errorcode = ERR_BIT_NEXT; } break; case CHECK0_HT: if ((duration > LAMBDA2_MIN) && (duration < LAMBDA2_MAX)) { //llego el 0 bitstate = NEXT_HT; //si no es el primer bit if (bitcount) { if (bitcount < 16) code0 <<= 1; else code1 <<= 1; } bitcount++; } else { //error en bit bitstate = FIRST_HIGH; errorcode = ERR_BIT_0; on_receipt = 0; } break; case CHECK1_HT: if ((duration > LAMBDA1_MIN) && (duration < LAMBDA1_MAX)) { //llego el 1 bitstate = NEXT_HT; //si no es el primer bit if (bitcount) { if (bitcount < 16) { code0 += 1; code0 <<= 1; } else { code1 += 1; code1 <<= 1; } } bitcount++; } else { //error en bit bitstate = FIRST_HIGH; errorcode = ERR_BIT_1; on_receipt = 0; } break; case CODE_FINISH: break; default: //ver si no tengo que ir directo a NEXT bitstate = WAIT_FOR_SILENT; break; } //me fijo si termino el paquete if (ctrol_new == CTRL_HT) { if (bitcount >= 28) { bitstate = CODE_FINISH; errorcode = ERR_FINISH_OK; on_receipt = 0; } } else { //debe ser PT if (bitcount >= 24) { bitstate = CODE_FINISH; errorcode = ERR_FINISH_OK; on_receipt = 0; } } #endif #ifdef WITHOUT_ABSOLUTE_VALUE_CTROL_PT2264 switch (bitstate) { case WAIT_FOR_SILENT: no_silent++; break; case FIRST_HIGH: bitcount = 0; code0 = 0; code1 = 0; bitstate++; break; case FIRST_LOW: if ((duration > PILOT_MIN0_NEW) && (duration < PILOT_MAX0_NEW)) //tengo mi primer first high, ahora vienen los bits { bitstate = CHECK0; ctrol_new = 1; on_receipt = 1; Usart1Send((char *)"pt2264_0"); } else if ((duration > PILOT_MIN1_NEW) && (duration < PILOT_MAX1_NEW)) //tengo mi primer first high, ahora vienen los bits { bitstate = CHECK1; ctrol_new = 1; on_receipt = 1; Usart1Send((char *)"pt2264_1"); } else { //bitstate = CODE_FINISH; bitstate = FIRST_HIGH; errorcode = ERR_FIRST_HIGH; on_receipt = 0; } break; case NEXT: if ((duration > LAMBDA1_FROM0_MIN_NEW) && (duration < LAMBDA1_FROM0_MAX_NEW)) { //puede ser un 0 bitstate = CHECK0; } else if ((duration > LAMBDA2_FROM1_MIN_NEW) && (duration < LAMBDA2_FROM1_MAX_NEW)) { //puede ser un 1 bitstate = CHECK1; } else { //error en bit //bitstate = CODE_FINISH; bitstate = FIRST_HIGH; errorcode = ERR_BIT_NEXT; on_receipt = 0; } break; case CHECK0: if ((duration > LAMBDA2_FROM0_MIN_NEW) && (duration < LAMBDA2_FROM0_MAX_NEW)) { //llego el 0 bitstate = NEXT; bitcount++; if (bitcount < 16) code0 <<= 1; else code1 <<= 1; } else { //error en bit //bitstate = CODE_FINISH; bitstate = FIRST_HIGH; errorcode = ERR_BIT_0; on_receipt = 0; } break; case CHECK1: if ((duration > LAMBDA1_FROM1_MIN_NEW) && (duration < LAMBDA1_FROM1_MAX_NEW)) { //llego el 1 bitstate = NEXT; bitcount++; if (bitcount < 16) { code0 += 1; code0 <<= 1; } else { code1 += 1; code1 <<= 1; } } else { //error en bit //bitstate = CODE_FINISH; bitstate = FIRST_HIGH; errorcode = ERR_BIT_1; on_receipt = 0; } break; case CODE_FINISH: break; default: //ver si no tengo que ir directo a NEXT bitstate = WAIT_FOR_SILENT; break; } //me fijo si termino el paquete if (bitcount >= 24) { bitstate = CODE_FINISH; errorcode = ERR_FINISH_OK; on_receipt = 0; } #endif }
unsigned char RxCode (void) { char str[30]; switch (code_state) { case START: //destrabo la interrupcion y espero silencio //CodeInterruptEna(); no_silent = 0; bitstate = WAIT_FOR_SILENT; errorcode = ERR_CONTINUE; pilot_code = PILOT_CODE_MS; //el timer descuenta directamente // F5PLUS_ON; code_state++; break; case SEARCHING: if (no_silent == 0) { if (pilot_code == 0) { //se silencio durante PILOT_CODE_MS debo estar por recibir codigo code_state++; //destrabo la interrupcion bitstate = FIRST_HIGH; // F5PLUS_OFF; TIM14->CNT = 0; } } else code_state = START; //code_state = START_B; break; case RECEIVING: //reviso si termino el codigo (bueno o malo) if (errorcode != ERR_CONTINUE) { //termino el codigo code_state++; } break; case ENDED: if (errorcode == ERR_FINISH_OK) { // F5PLUS_OFF; sprintf(str, "Ended OK: %04X %04X\r\n", code0, code1); Usart1Send(str); code_state = ENDED_OK; //si tengo un codigo bueno trabo la interrrupcion //CodeInterruptDisa(); } else { code_state = START; if (errorcode == ERR_FIRST_HIGH) { Usart1Send((char *)"Error First High\r\n"); } else if (errorcode == ERR_BIT_NEXT) { sprintf(str, "Error in bit: %d\r\n", bitcount); Usart1Send(str); code_state = START; } else { Usart1Send((char *)"Error other??\r\n"); } } break; case ENDED_OK: code_state = START; break; default: code_state = START; break; } return code_state; }
void ShowFileSystem(void) { char str [100]; Usart1Send((char *) "File System:\r\n"); Wait_ms(100); //LoadFilesIndex(); sprintf(str, "num0: %08x %08x %d\r\n", files.posi0, files.lenght0, files.lenght0); Usart1Send(str); Wait_ms(100); sprintf(str, "num1: %08x %08x %d\r\n", files.posi1, files.lenght1, files.lenght1); Usart1Send(str); Wait_ms(100); sprintf(str, "num2: %08x %08x %d\r\n", files.posi2, files.lenght2, files.lenght2); Usart1Send(str); Wait_ms(100); sprintf(str, "num3: %08x %08x %d\r\n", files.posi3, files.lenght3, files.lenght3); Usart1Send(str); Wait_ms(100); sprintf(str, "num4: %08x %08x %d\r\n", files.posi4, files.lenght4, files.lenght4); Usart1Send(str); Wait_ms(100); sprintf(str, "num5: %08x %08x %d\r\n", files.posi5, files.lenght5, files.lenght5); Usart1Send(str); Wait_ms(100); sprintf(str, "num6: %08x %08x %d\r\n", files.posi6, files.lenght6, files.lenght6); Usart1Send(str); Wait_ms(100); sprintf(str, "num7: %08x %08x %d\r\n", files.posi7, files.lenght7, files.lenght7); Usart1Send(str); Wait_ms(100); sprintf(str, "num8: %08x %08x %d\r\n", files.posi8, files.lenght8, files.lenght8); Usart1Send(str); Wait_ms(100); sprintf(str, "num9: %08x %08x %d\r\n", files.posi9, files.lenght9, files.lenght9); Usart1Send(str); Wait_ms(100); }