123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138 |
- //##############################################################################
- //
- // FILE: MultitaskOS.c
- //
- // TITLE: Real Time 1ms Generator
- //
- // - void MultitaskOS_init ( void )
- // - void ISR_Timer_OS ( void )
- //
- //##############################################################################
- //
- //==============================================================================
- // Change History:
- //==============================================================================
- // Datum: | Name | Version:| Change / Cause: | No
- //------------------------------------------------------------------------------
- // | | | | 002
- //------------------------------------------------------------------------------
- // 05.07.13 | VR | 1.1 | Change for ReilingOS | 001
- //------------------------------------------------------------------------------
- // 02.05.12 | TM | 1.0 | New Build | 000
- //==============================================================================
- //==============================================================================
- // Comment Change / Cause:
- //==============================================================================
- // Change: 003 // 003
- //----------------------
- //
- //
- //==============================================================================
- // Change: 002 // 002
- //----------------------
- //
- //
- //==============================================================================
- // Change: 001 // 001
- //----------------------
- //
- //
- //==============================================================================
- #include "BMS_Master.h"
- volatile uint32_t ISO_Start = 0;
- volatile uint32_t ISO_PWM = 0;
- volatile uint16_t ISO_PIN = 0;
- // ***** MultitaskOS_init ******************************************************
- void MultitaskOS_init( void )
- {
- PIT.PITMCR.B.MDIS = 0; // Enable Periodic Interrupt Timer
- PIT.PITMCR.B.MDIS_RTI = 0; // Enable Real Time Interrupt
- PIT.PITMCR.B.FRZ = 1; // Freeze in Debug Mode
-
- PIT.CH[0].LDVAL.R = SYSCLK_KHZ; // Timeout Period 1ms 64MHz/1kHz
- PIT.CH[0].TFLG.B.TIF = 1; // Timer Interrupt Request Clear
- PIT.CH[0].TCTRL.B.TIE = 1; // Timer Interrupt Enable
- PIT.CH[0].TCTRL.B.TEN = 1; // Timer Active
- }
- // ***** ISR_Timer_OS **********************************************************
- void ISR_Timer_OS( void )
- {
- uint32_t ISO_CycleTime;
- asm(" wrteei 0"); // disable Interrupts
- PIT.CH[0].TFLG.B.TIF = 1; // CLear PIT 1 flag by writing 1
- Global_1msCounter++;
-
- //''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
- if( Global_1msCounter > 12000 )
- {
- if( !READ_INPIN(PIN_REGNR_OKHS) ) // if General Error: Off, Undervoltage, Grounderror, Uniterror, Underrange
- {
- gISO_R = 0; // show General Error
- gBSE.ErrorBMS |= ERROR_ISO_GENERAL;
- gErrorEvent = EEV__SHUT_DOWN_EMERGENCY; // and load rejection
- }
- else
- if( READ_INPIN(PIN_REGNR_MHS) != ISO_PIN ) // PWM Signal changed ?
- {
- ISO_PIN = ISO_PIN?0:1; // new PWM Signal store
-
- if( ISO_PIN ) // new Cycle ?
- {
- ISO_CycleTime = Global_1msCounter - ISO_Start; // Cycle Time compute
- ISO_Start = Global_1msCounter; // new Initial Value store
-
- if( ISO_CycleTime < 35) // 30 Hz ? >>Quickstart<<
- {
- if( ISO_CycleTime > 31 )
- {
- gISO_R = 120000; // ISO OK?
- if(ISO_PWM > 4) // > 10%
- {
- gISO_R = 0; // ISO NOK
- gBSE.ErrorBMS |= ERROR_ISO_BAD;
- gErrorEvent = EEV__SHUT_DOWN_EMERGENCY; // load rejection
- }
- }
- }
- else
- if( ISO_CycleTime < 102) // 10 Hz ? >>regular Operation<<
- {
- if( ISO_CycleTime > 98 )
- {
- if(ISO_PWM < 6) // yes, Duty < 6 % => Overflow
- gISO_R = 120000; // yes, show Overflow
- else
- gISO_R = ( 90 * 1200 ) / ( ISO_PWM - 5 ) - 1200;
-
- if(gCANErrorInsert == 14) //!! 1.5-3
- gISO_R = MIN_ISO_R_TEST;
-
- if( gISO_R < MIN_ISO_R) // ISO-R low
- {
- gBSE.ErrorBMS |= ERROR_ISO_LOW;
- gErrorEvent = EEV__SHUT_DOWN_EMERGENCY; // load rejection
- }
- }
- }
- }
- else // Duty End
- ISO_PWM = Global_1msCounter - ISO_Start; // Duty store
- }
- }
- //''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
-
- asm(" wrteei 1"); // enable Interrupts
- }
- // ***** End MultitaskOS.c *****************************************************
|