Subversion Repositories NaviCtrl

Rev

Rev 514 | Rev 516 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 514 Rev 515
Line 141... Line 141...
141
 
141
 
Line 142... Line 142...
142
//----------------------------------------------------------------------------------------------------
142
//----------------------------------------------------------------------------------------------------
143
 
143
 
144
void CheckErrors(void)
144
void CheckErrors(void)
145
{
145
{
146
    static s32 no_error_delay = 0;
146
        static s32 no_error_delay = 0;
Line 147... Line 147...
147
        s32 newErrorCode = 0;
147
        s32 newErrorCode = 0;
148
        UART_VersionInfo.HardwareError[0] = 0;
148
        UART_VersionInfo.HardwareError[0] = 0;
Line 276... Line 276...
276
                newErrorCode = 19;
276
                newErrorCode = 19;
277
        }
277
        }
278
        else if(CheckDelay(UBX_Timeout) && Parameter.GlobalConfig & FC_CFG_GPS_AKTIV)
278
        else if(CheckDelay(UBX_Timeout) && Parameter.GlobalConfig & FC_CFG_GPS_AKTIV)
279
        {
279
        {
280
                LED_RED_ON;
280
                LED_RED_ON;
281
//      if(!(Parameter.GlobalConfig & FC_CFG_GPS_AKTIV)) sprintf(ErrorMSG,"GPS disconnected ");
281
//              if(!(Parameter.GlobalConfig & FC_CFG_GPS_AKTIV)) sprintf(ErrorMSG,"GPS disconnected ");
282
//              else
282
//              else
283
                {
283
                {
284
                        sprintf(ErrorMSG,"no GPS communication");
284
                        sprintf(ErrorMSG,"no GPS communication");
285
                        UART_VersionInfo.HardwareError[0] |= NC_ERROR0_GPS_RX;
285
                        UART_VersionInfo.HardwareError[0] |= NC_ERROR0_GPS_RX;
286
                        UART_VersionInfo.Flags &= ~NC_VERSION_FLAG_GPS_PRESENT;
286
                        UART_VersionInfo.Flags &= ~NC_VERSION_FLAG_GPS_PRESENT;
Line 346... Line 346...
346
                DebugOut.StatusRed |= AMPEL_BL;
346
                DebugOut.StatusRed |= AMPEL_BL;
347
        }
347
        }
348
        else if(BL_MinOfMaxPWM < 30 && !ErrorCode)
348
        else if(BL_MinOfMaxPWM < 30 && !ErrorCode)
349
        {
349
        {
350
                u16 i;
350
                u16 i;
351
                for(i = 0; i < 12; i++) if(Motor[i].MaxPWM == BL_MinOfMaxPWM) break;
351
                for(i = 0; i < 12; i++) if(Motor[i].MaxPWM == BL_MinOfMaxPWM) break;
352
                LED_RED_ON;
352
                LED_RED_ON;
353
                sprintf(ErrorMSG,"ERR:BL%2d Test:%2d ",i+1,BL_MinOfMaxPWM);
353
                sprintf(ErrorMSG,"ERR:BL%2d Test:%2d ",i+1,BL_MinOfMaxPWM);
354
                newErrorCode = 32;
354
                newErrorCode = 32;
355
                DebugOut.StatusRed |= AMPEL_BL;
355
                DebugOut.StatusRed |= AMPEL_BL;
356
        }
356
        }
357
        else if(BL_MinOfMaxPWM < 248 && (FC.StatusFlags & FC_STATUS_FLY) && !ErrorCode)
357
        else if(BL_MinOfMaxPWM < 248 && (FC.StatusFlags & FC_STATUS_FLY) && !ErrorCode)
358
        {
358
        {
359
                LED_RED_ON;
359
                LED_RED_ON;
360
                sprintf(ErrorMSG,"ERR:BL Limitation   ");
360
                sprintf(ErrorMSG,"ERR:BL Limitation   ");
Line 388... Line 388...
388
                LED_RED_ON;
388
                LED_RED_ON;
389
                sprintf(ErrorMSG,"ERR:Max Altitude ");
389
                sprintf(ErrorMSG,"ERR:Max Altitude ");
390
                newErrorCode = 29;
390
                newErrorCode = 29;
391
                DebugOut.StatusRed |= AMPEL_NC;
391
                DebugOut.StatusRed |= AMPEL_NC;
392
        }
392
        }
393
        else if(Parameter.GlobalConfig3 & CFG3_NO_GPSFIX_NO_START && !(NCFlags & NC_FLAG_GPS_OK) && ((FC.StatusFlags & (FC_STATUS_START | FC_STATUS_MOTOR_RUN)) || (FC.StickGas < -50 && FC.StickYaw < -50)))
393
        else if(Parameter.GlobalConfig3 & CFG3_NO_GPSFIX_NO_START && !(NCFlags & NC_FLAG_GPS_OK) && ((FC.StatusFlags & (FC_STATUS_START | FC_STATUS_MOTOR_RUN)) || (FC.StickGas < -50 && FC.StickYaw < -50)))
394
        {
394
        {
395
                LED_RED_ON;
395
                LED_RED_ON;
396
                sprintf(ErrorMSG,"No GPS Fix      ");
396
                sprintf(ErrorMSG,"No GPS Fix      ");
397
                newErrorCode = 30;
397
                newErrorCode = 30;
398
        }
398
        }
Line 406... Line 406...
406
                        sprintf(ErrorMSG,"No Error            ");
406
                        sprintf(ErrorMSG,"No Error            ");
407
                        ErrorCode = 0;
407
                        ErrorCode = 0;
408
                }
408
                }
409
        }
409
        }
Line 410... Line 410...
410
 
410
 
411
    if(newErrorCode)
411
        if(newErrorCode)
412
         {
412
        {
413
          if(FC.StatusFlags & FC_STATUS_MOTOR_RUN) no_error_delay = 8; // delay the errors if the motors are running
413
                if(FC.StatusFlags & FC_STATUS_MOTOR_RUN) no_error_delay = 8; // delay the errors if the motors are running
414
          ErrorCode = newErrorCode;
414
                ErrorCode = newErrorCode;
415
         }
415
        }
416
 FC.Error[0] = 0;
416
        FC.Error[0] = 0;
417
 FC.Error[1] = 0;
417
        FC.Error[1] = 0;
418
 FC.Error[2] = 0;
418
        FC.Error[2] = 0;
419
 FC.Error[3] = 0;
419
        FC.Error[3] = 0;
420
 FC.Error[4] = 0;
420
        FC.Error[4] = 0;
421
 ErrorGpsFixLost = 0;
421
        ErrorGpsFixLost = 0;
Line 422... Line 422...
422
}
422
}
Line 484... Line 484...
484
void EXTIT3_IRQHandler(void)  // 1ms - Takt
484
void EXTIT3_IRQHandler(void)  // 1ms - Takt
485
{
485
{
486
        IENABLE;
486
        IENABLE;
487
        VIC_ITCmd(EXTIT3_ITLine,DISABLE); // disable irq
487
        VIC_ITCmd(EXTIT3_ITLine,DISABLE); // disable irq
Line 488... Line 488...
488
 
488
 
489
        if(PollingTimeout == 0)
489
        if(PollingTimeout == 0)
490
        {
490
        {
491
                PollingTimeout = 5;
491
                PollingTimeout = 5;
492
                //if(Polling() == 0) DebugOut.Analog[16]++;
492
                //if(Polling() == 0) DebugOut.Analog[16]++;
493
                Polling();
493
                Polling();
Line 494... Line 494...
494
        }
494
        }
495
 
495
 
496
        VIC_SWITCmd(EXTIT3_ITLine,DISABLE); // clear pending bit
496
        VIC_SWITCmd(EXTIT3_ITLine,DISABLE); // clear pending bit
Line 553... Line 553...
553
        GetNaviCtrlVersion();
553
        GetNaviCtrlVersion();
554
        DebugOut.StatusGreen = AMPEL_NC | AMPEL_COMPASS; // NC and MK3Mag
554
        DebugOut.StatusGreen = AMPEL_NC | AMPEL_COMPASS; // NC and MK3Mag
555
        DebugOut.StatusRed = 0x00;
555
        DebugOut.StatusRed = 0x00;
556
        UART1_PutString("\r\n++++++++++++++++++++++++++++++++++++++++++");
556
        UART1_PutString("\r\n++++++++++++++++++++++++++++++++++++++++++");
Line 557... Line 557...
557
 
557
 
Line 558... Line 558...
558
        Compass_Init();
558
        Compass_Init();
Line 559... Line 559...
559
 
559
 
560
        GPS_Init();
560
        GPS_Init();
Line 573... Line 573...
573
                LED_RED_ON;
573
                LED_RED_ON;
574
        }
574
        }
575
#endif
575
#endif
576
        // ---------- Prepare the isr driven
576
        // ---------- Prepare the isr driven
577
        // set to absolute lowest priority
577
        // set to absolute lowest priority
578
    VIC_Config(EXTIT3_ITLine, VIC_IRQ, PRIORITY_SW);
578
        VIC_Config(EXTIT3_ITLine, VIC_IRQ, PRIORITY_SW);
579
        // enable interrupts
579
        // enable interrupts
580
    VIC_ITCmd(EXTIT3_ITLine, ENABLE);
580
        VIC_ITCmd(EXTIT3_ITLine, ENABLE);
Line 581... Line 581...
581
 
581
 
582
        Debug_OK("START");
582
        Debug_OK("START");
583
        UART1_PutString("\r\n");
583
        UART1_PutString("\r\n");
584
        fifo_purge(&UART1_rx_fifo); // flush the whole fifo init buffer
584
        fifo_purge(&UART1_rx_fifo); // flush the whole fifo init buffer
585
        LED_GRN_ON;
585
        LED_GRN_ON;
586
        LED_RED_OFF;
586
        LED_RED_OFF;
587
    Settings_GetParamValue(PID_SEND_NMEA, &NMEA_Interval);
587
        Settings_GetParamValue(PID_SEND_NMEA, &NMEA_Interval);
588
        UART1_PutString("\r\n");
588
        UART1_PutString("\r\n");
589
        CompassValueErrorCount = 0;
589
        CompassValueErrorCount = 0;
590
        I2CBus(Compass_I2CPort)->Timeout = SetDelay(3000);
590
        I2CBus(Compass_I2CPort)->Timeout = SetDelay(3000);
591
        for (;;) // the endless main loop
591
        for (;;) // the endless main loop
592
        {
592
        {
593
                PollingTimeout = 5;
593
                PollingTimeout = 5;
594
                Polling();
594
                Polling();
595
// ++++++++++++++++++++++++++++++++++++++++++++++
595
// ++++++++++++++++++++++++++++++++++++++++++++++
596
                if(FromFC_LoadWP_List)
596
                if(FromFC_LoadWP_List)
597
                {
597
                {
598
                   WPL_Store.Index = (FromFC_LoadWP_List & ~0x80);
598
                        WPL_Store.Index = (FromFC_LoadWP_List & ~0x80);
599
                   if(WPL_Store.Index <= ToFC_MaxWpListIndex)
599
                        if(WPL_Store.Index <= ToFC_MaxWpListIndex)
600
                   {
600
                        {
601
                                if(PointList_ReadFromFile(&WPL_Store) == WPL_OK)
601
                                if(PointList_ReadFromFile(&WPL_Store) == WPL_OK)
602
                                {
602
                                {
603
                                        if(FromFC_LoadWP_List & 0x80)// -> load relative
603
                                        if(FromFC_LoadWP_List & 0x80)// -> load relative
604
                                        {
604
                                        {
605
                                                if(NCFlags & NC_FLAG_FREE || NaviData.TargetPositionDeviation.Distance > 7*10)
605
                                                if(NCFlags & NC_FLAG_FREE || NaviData.TargetPositionDeviation.Distance > 7*10)
606
                                        {  // take actual position
606
                                                {  // take actual position
607
                                                if(!PointList_Move(1,&(GPSData.Position),NaviData.CompassHeading))      PointList_Clear();      // try to move wp-list so that 1st entry matches the current position 
607
                                                        if(!PointList_Move(1,&(GPSData.Position),NaviData.CompassHeading))      PointList_Clear();      // try to move wp-list so that 1st entry matches the current position
608
                                                }
608
                                                }
609
                                        else
609
                                                else
610
                                                {  // take last target position
610
                                                {  // take last target position
611
                                                if(!PointList_Move(1, &(NaviData.TargetPosition),NaviData.CompassHeading))      PointList_Clear();      // try to move wp-list so that 1st entry matches the current position 
611
                                                        if(!PointList_Move(1, &(NaviData.TargetPosition),NaviData.CompassHeading))      PointList_Clear();      // try to move wp-list so that 1st entry matches the current position
612
                                                }
612
                                                }
613
                                        }
613
                                        }
614
                                        if(FC.StatusFlags & FC_STATUS_FLY) PointList_WPActive(TRUE);
614
                                        if(FC.StatusFlags & FC_STATUS_FLY) PointList_WPActive(TRUE);
615
                                        GPS_pWaypoint = PointList_WPBegin(); // updates POI index
615
                                        GPS_pWaypoint = PointList_WPBegin(); // updates POI index
Line 641... Line 641...
641
                // ---------------- Logging  ---------------------------------------
641
                // ---------------- Logging  ---------------------------------------
642
                if(SD_WatchDog)
642
                if(SD_WatchDog)
643
                {
643
                {
644
                        SD_WatchDog = 30000;
644
                        SD_WatchDog = 30000;
645
                        if(SDCardInfo.Valid == 1) Logging_Update();  // could be block some time for at max. 2 seconds, therefore move time critical part of the mainloop into the ISR of timer 1
645
                        if(SDCardInfo.Valid == 1) Logging_Update();  // could be block some time for at max. 2 seconds, therefore move time critical part of the mainloop into the ISR of timer 1
646
                        else
646
                        else
647
                        {
647
                        {
648
                         ToFC_MaxWpListIndex = 0;
648
                                ToFC_MaxWpListIndex = 0;
649
                         if(FC.StatusFlags & FC_STATUS_START) SD_LoggingError = 100;
649
                                if(FC.StatusFlags & FC_STATUS_START) SD_LoggingError = 100;
650
                        }
650
                        }
651
                        if(!SD_WatchDog) UART1_PutString("\n\rSD-Watchdog - Logging aborted\n\r");
651
                        if(!SD_WatchDog) UART1_PutString("\n\rSD-Watchdog - Logging aborted\n\r");
652
                }
652
                }
Line 653... Line 653...
653
 
653