Index: Accel.c =================================================================== diff -u -r14434061a23aa02218e1f3c6cc3024123e79b153 -rea50b65284ae5683fd7e6b89fd8134cf46777722 --- Accel.c (.../Accel.c) (revision 14434061a23aa02218e1f3c6cc3024123e79b153) +++ Accel.c (.../Accel.c) (revision ea50b65284ae5683fd7e6b89fd8134cf46777722) @@ -486,14 +486,6 @@ SET_ALARM_WITH_2_F32_DATA( ALARM_ID_HD_EXCESSIVE_TILT, x, y ) #endif } - } - else if ( ( TRUE == tiltErrorDetected ) && ( ( fabs( x ) > MAX_TILT_ANGLE_TO_CLEAR_ALARM ) || ( fabs( y ) > MAX_TILT_ANGLE_TO_CLEAR_ALARM ) ) ) - { -#ifdef _DG_ - SET_ALARM_WITH_2_F32_DATA( ALARM_ID_DG_EXCESSIVE_TILT, x, y ) -#else - SET_ALARM_WITH_2_F32_DATA( ALARM_ID_HD_EXCESSIVE_TILT, x, y ) -#endif } else if ( ( TRUE == tiltErrorDetected ) && ( ( fabs( x ) > MAX_TILT_ANGLE_TO_CLEAR_ALARM ) || ( fabs( y ) > MAX_TILT_ANGLE_TO_CLEAR_ALARM ) ) ) { @@ -502,7 +494,7 @@ #else SET_ALARM_WITH_2_F32_DATA( ALARM_ID_HD_EXCESSIVE_TILT, x, y ) #endif - } + } else if ( ( fabs( x ) <= MAX_TILT_ANGLE_TO_CLEAR_ALARM ) && ( fabs( y ) <= MAX_TILT_ANGLE_TO_CLEAR_ALARM ) ) { accelTiltErrorTimerCounter = 0; Index: Common.h =================================================================== diff -u -r69026a5e09f0adb43b19b41eee993dd1d68b5b75 -rea50b65284ae5683fd7e6b89fd8134cf46777722 --- Common.h (.../Common.h) (revision 69026a5e09f0adb43b19b41eee993dd1d68b5b75) +++ Common.h (.../Common.h) (revision ea50b65284ae5683fd7e6b89fd8134cf46777722) @@ -105,13 +105,19 @@ #define SHIFT_BITS_BY_4 4U ///< Number of bits to shift in order to shift a nibble #define FLOAT_TO_INT_ROUNDUP_OFFSET 0.5 ///< Offset to add to a floating point value for rounding rounding when converting to integer #define ML_PER_LITER 1000 ///< Number of milliliters in a liter +#define MA_PER_AMP 1000 ///< Number of milliamps in an amp #define MS_PER_SECOND 1000 ///< Number of milliseconds in a second #define US_PER_SECOND 1000000 ///< Number of microseconds in a millisecond #define SEC_PER_MIN 60 ///< Number of seconds in a minute #define FRACTION_TO_PERCENT_FACTOR 100.0 ///< Percentage factor (100) #define MIN_PER_HOUR 60 ///< Number of minutes in an hour #define PI 3.1415927 ///< PI #define SECONDS_IN_A_DAY 86400 ///< Number of seconds in a day +#define BITS_8_FULL_SCALE 256 ///< Full scale range for 8 bit ADC or DAC +#define BITS_10_FULL_SCALE 1024 ///< Full scale range for 10 bit ADC or DAC +#define BITS_12_FULL_SCALE 4096 ///< Full scale range for 12 bit ADC or DAC +#define BITS_14_FULL_SCALE 16384 ///< Full scale range for 14 bit ADC or DAC +#define BITS_16_FULL_SCALE 65536 ///< Full scale range for 16 bit ADC or DAC // **** Common Macros **** Index: NVDataMgmt.c =================================================================== diff -u -r8119125ec55f7e9c9c8f011544b3f2fb8a4f8308 -rea50b65284ae5683fd7e6b89fd8134cf46777722 --- NVDataMgmt.c (.../NVDataMgmt.c) (revision 8119125ec55f7e9c9c8f011544b3f2fb8a4f8308) +++ NVDataMgmt.c (.../NVDataMgmt.c) (revision ea50b65284ae5683fd7e6b89fd8134cf46777722) @@ -1733,7 +1733,7 @@ U08* bufferAddress = specs.structAddressPtr; U32 maxBufferLength = specs.maxReadBufferSize / EEPROM_OPS_SIZE_OF_CONVERTER; - Fapi_doMarginRead ( (U32*)startAddress, (U32*)bufferAddress, maxBufferLength, Fapi_NormalRead ); + Fapi_doMarginRead( (U32*)startAddress, (U32*)bufferAddress, maxBufferLength, Fapi_NormalRead ); currentTime = getMSTimerCount(); state = NVDATAMGMT_SELF_TEST_STATE_READ_CAL_RECORD; } @@ -1761,7 +1761,7 @@ U08* bufferAddress = specs.structAddressPtr; U32 maxBufferLength = specs.maxReadBufferSize / EEPROM_OPS_SIZE_OF_CONVERTER; - Fapi_doMarginRead ( (U32*)startAddress, (U32*)bufferAddress, maxBufferLength, Fapi_NormalRead ); + Fapi_doMarginRead( (U32*)startAddress, (U32*)bufferAddress, maxBufferLength, Fapi_NormalRead ); currentTime = getMSTimerCount(); state = NVDATAMGMT_SELF_TEST_STATE_READ_SYS_RECORD; } @@ -1785,7 +1785,7 @@ { if ( RTC_RAM_STATE_READY == getRTCRAMState() ) { - PROCESS_RECORD_SPECS_T specs = RECORDS_SPECS [ NVDATAMGMT_SERVICE_RECORD ]; + PROCESS_RECORD_SPECS_T specs = RECORDS_SPECS[ NVDATAMGMT_SERVICE_RECORD ]; U32 startAddress = specs.startAddress; U32 maxBufferLength = specs.maxReadBufferSize; @@ -1814,7 +1814,7 @@ if ( ( RTC_RAM_STATUS_IDLE == getRTCRAMStatus() ) || ( TRUE == timeoutStatus ) ) { - PROCESS_RECORD_SPECS_T specs = RECORDS_SPECS [ NVDATAMGMT_SERVICE_RECORD ]; + PROCESS_RECORD_SPECS_T specs = RECORDS_SPECS[ NVDATAMGMT_SERVICE_RECORD ]; U08* bufferAddress = specs.structAddressPtr; U32 maxBufferLength = specs.maxReadBufferSize; @@ -1823,7 +1823,7 @@ #ifdef _DG_ if ( RTC_RAM_STATE_READY == getRTCRAMState() ) { - PROCESS_RECORD_SPECS_T specs = RECORDS_SPECS [ NVDATAMGMT_SCHEDULED_RUNS_RECORD ]; + PROCESS_RECORD_SPECS_T specs = RECORDS_SPECS[ NVDATAMGMT_SCHEDULED_RUNS_RECORD ]; U32 startAddress = specs.startAddress; U32 maxBufferLength = specs.maxReadBufferSize; @@ -1853,11 +1853,11 @@ static NVDATAMGMT_SELF_TEST_STATE_T handleSelfTestReadScheduledRunsRecord( void ) { NVDATAMGMT_SELF_TEST_STATE_T state = NVDATAMGMT_SELF_TEST_STATE_READ_SCHEDULED_RUNS_RECORD; - BOOL timeoutStatus = didCommandTimeout ( ALARM_ID_RTC_RAM_OPS_ERROR, (U08*)&state ); + BOOL timeoutStatus = didCommandTimeout( ALARM_ID_RTC_RAM_OPS_ERROR, (U08*)&state ); if ( getRTCRAMStatus() == RTC_RAM_STATUS_IDLE || timeoutStatus == TRUE ) { - PROCESS_RECORD_SPECS_T specs = RECORDS_SPECS [ NVDATAMGMT_SCHEDULED_RUNS_RECORD ]; + PROCESS_RECORD_SPECS_T specs = RECORDS_SPECS[ NVDATAMGMT_SCHEDULED_RUNS_RECORD ]; U08* bufferAddress = specs.structAddressPtr; U32 maxBufferLength = specs.maxReadBufferSize; @@ -1881,16 +1881,16 @@ static NVDATAMGMT_SELF_TEST_STATE_T handleSelfTestReadHDTreatmentTime ( void ) { NVDATAMGMT_SELF_TEST_STATE_T state = NVDATAMGMT_SELF_TEST_STATE_READ_TREATMENT_TIME; - BOOL timeoutStatus = didCommandTimeout ( ALARM_ID_RTC_RAM_OPS_ERROR, (U08*)&state ); + BOOL timeoutStatus = didCommandTimeout( ALARM_ID_RTC_RAM_OPS_ERROR, (U08*)&state ); // If the RTC RAM is ready, read the results if ( getRTCRAMStatus() == RTC_RAM_STATUS_IDLE || timeoutStatus == TRUE ) { - getDataFromRAM ( (U08*)&hdUsageInfoGroup, sizeof(HD_USAGE_INFO_RECORD_T) ); + getDataFromRAM( (U08*)&hdUsageInfoGroup, sizeof(HD_USAGE_INFO_RECORD_T) ); // If the RAM is ready, request a read for the log records (RAM) if ( getRTCRAMState() == RTC_RAM_STATE_READY ) { - readFromRAM ( LOG_RECORD_START_ADDRESS, sizeof(LOG_RECORD_T) ); + readFromRAM( LOG_RECORD_START_ADDRESS, sizeof(LOG_RECORD_T) ); currentTime = getMSTimerCount(); state = NVDATAMGMT_SELF_TEST_STATE_READ_LOG_RECORD; } @@ -2088,25 +2088,25 @@ { if ( ops == NVDATAMGMT_ERASE_SECTOR ) { - Fapi_issueAsyncCommandWithAddress ( Fapi_EraseSector, (U32*)startAddress ); + Fapi_issueAsyncCommandWithAddress( Fapi_EraseSector, (U32*)startAddress ); state = NVDATAMGMT_EXEC_STATE_ERASE_EEPROM; } else if ( ops == NVDATAMGMT_WRITE && location == NVDATAMGMT_EEPROM ) { - Fapi_issueProgrammingCommand ( (U32*)startAddress, (U08*)bufferAddress, maxBufferLength, 0x00, 0, Fapi_DataOnly ); + Fapi_issueProgrammingCommand( (U32*)startAddress, (U08*)bufferAddress, maxBufferLength, 0x00, 0, Fapi_DataOnly ); state = NVDATAMGMT_EXEC_STATE_WRITE_TO_EEPROM; } else if ( ops == NVDATAMGMT_READ && location == NVDATAMGMT_EEPROM ) { - Fapi_doMarginRead ( (U32*)startAddress, (U32*)bufferAddress, maxBufferLength, Fapi_NormalRead ); + Fapi_doMarginRead( (U32*)startAddress, (U32*)bufferAddress, maxBufferLength / EEPROM_OPS_SIZE_OF_CONVERTER, Fapi_NormalRead ); state = NVDATAMGMT_EXEC_STATE_READ_FROM_EEPROM; } else if ( ops == NVDATAMGMT_WRITE && location == NVDATAMGMT_RTC ) { if ( getRTCRAMState() == RTC_RAM_STATE_READY ) { currentTime = getMSTimerCount(); - writeToRAM ( startAddress, bufferAddress, maxBufferLength ); + writeToRAM( startAddress, bufferAddress, maxBufferLength ); state = NVDATAMGMT_EXEC_STATE_WRITE_TO_RTC; } } @@ -2150,13 +2150,11 @@ { currentTime = getMSTimerCount(); U32 startAddress = jobSpecs.startAddress + recordAddressOffset; + U32 maxBufferLength = ( jobSpecs.maxWriteBufferSize / EEPROM_OPS_SIZE_OF_CONVERTER ); // Clear the buffer from the previous content memset( writtenRecordCheckBuffer, 0, sizeof(writtenRecordCheckBuffer)); - // The length should be divided by 4 - U32 maxBufferLength = jobSpecs.maxWriteBufferSize / EEPROM_OPS_SIZE_OF_CONVERTER; - // Issue a FAPI read command but only the bytes that were written, so use maxWriteBufferSize Fapi_doMarginRead ( (U32*)startAddress, (U32*)writtenRecordCheckBuffer, maxBufferLength, Fapi_NormalRead ); Index: RTC.c =================================================================== diff -u -rb5a078a245783d10796592bd7e96ff36a5fb5a03 -rea50b65284ae5683fd7e6b89fd8134cf46777722 --- RTC.c (.../RTC.c) (revision b5a078a245783d10796592bd7e96ff36a5fb5a03) +++ RTC.c (.../RTC.c) (revision ea50b65284ae5683fd7e6b89fd8134cf46777722) @@ -15,10 +15,13 @@ * ***************************************************************************/ #include "mibspi.h" + +#include "FPGA.h" #include "OperationModes.h" #include "RTC.h" #include "SystemCommMessages.h" #include "Timers.h" +#include "Utilities.h" #ifdef USE_LIBRARY_TIME_FUNCTIONS #include // For epoch conversion functions mktime and gmtime @@ -105,8 +108,8 @@ #define RTC_WRITE_TO_RAM 0x003C ///< RTC write to RAM command (0x003C) #define RTC_READ_FROM_RAM 0x00BD ///< RTC read from RAM command (0x00BD) -#define RTC_ACCURACY_TIMEOUT 1050U ///< RTC accuracy timeout in ms (1050) // TODO - fix test so expecting 1000 ms -#define RTC_ACCURACY_TIMEOUT_TOLERANCE 50U ///< RTC accuracy timeout tolerance in ms (1050) +#define RTC_ACCURACY_TOLERANCE 75U ///< RTC accuracy tolerance in ms +#define FPGA_ACCURACY_TOLERANCE 12U ///< FPGA accuracy tolerance in ms #define RTC_PUBLISH_INTERVAL 18U ///< RTC publish interval in counts (18) #define TIMER_COUNTER_TO_REQUEST_READ 18U ///< Timer counter for reading time from RTC (18) @@ -144,7 +147,6 @@ RTC_SELF_TEST_STATE_START = 0, ///< Self test start RTC_SELF_TEST_STATE_CHECK_CTRL_REGS, ///< Self test check control registers RTC_SELF_TEST_STATE_WAIT_FOR_FIRST_SECOND, ///< Self test wait for first second - RTC_SELF_TEST_STATE_WAIT_FOR_SECOND_SECOND, ///< Self test wait for second second RTC_SELF_TEST_STATE_CHECK_ACCURACY, ///< Self test check time accuracy (compare 1st to 2nd second vs. timer counter) RTC_SELF_TEST_STATE_COMPLETE, ///< Self test complete NUM_OF_RTC_SELF_TEST_STATES ///< Total number of self-test states @@ -200,7 +202,7 @@ static U32 RTCSelfTestTimer = 0; ///< Self test timer. static U32 RTCPreviousSecond = 0; ///< Previous second for self-test comparison. static U32 RAMBufferLength = 0; ///< RAM buffer length for RAM operations. -static U32 lastEpochTime = 0; ///< last epoch time. +static U32 lastEpochTime = 0; ///< Last epoch time. static U32 previousTransferLength = 0; ///< Previous transfer length. static U32 timeCounter = 1; ///< Initial time counter (1). @@ -218,6 +220,7 @@ static U16 prepRAMBuffer[ RTC_RAM_PREP_BUFFER_LENGTH ]; ///< Buffer to send prep read/write commands to RTC RAM. static U16 RAMBuffer[ MIBSPI_MAX_BUFFER_LENGTH ]; ///< Buffer to read RTC RAM data. +static U16 previousFPGATimerCount = 0; ///< Previous FPGA timer count; /// Array of days in each month. Assumes non-leap year. Must adjust days in February if leap year. static U32 daysInMonth[ 12 ] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }; @@ -240,7 +243,6 @@ static RTC_SELF_TEST_STATE_T handleSelfTestStart( void ); static RTC_SELF_TEST_STATE_T handleSelfTestCheckCtrlRegs( void ); static RTC_SELF_TEST_STATE_T handleSelfTestWaitForFirstSecond( void ); -static RTC_SELF_TEST_STATE_T handleSelfTestWaitForSecondSecond( void ); static RTC_SELF_TEST_STATE_T handleSelfTestCheckAccuracy( void ); static RTC_EXEC_STATE_T handleExecWaitForPostState( void ); @@ -372,10 +374,6 @@ RTCSelfTestState = handleSelfTestWaitForFirstSecond(); break; - case RTC_SELF_TEST_STATE_WAIT_FOR_SECOND_SECOND: - RTCSelfTestState = handleSelfTestWaitForSecondSecond(); - break; - case RTC_SELF_TEST_STATE_CHECK_ACCURACY: RTCSelfTestState = handleSelfTestCheckAccuracy(); break; @@ -501,8 +499,6 @@ hasWriteToRAMRequested = TRUE; RAMBufferLength = length; prepRAMBuffer [ RTC_PREP_RAM_INDEX ] = RTC_PREP_RAM_READ_WRITE; - //prepRAMBuffer[ RTC_RAM_HIGH_ADDRESS_INDEX ] = ( address >> SHIFT_8_BITS_FOR_BYTE_SHIFT ); - //prepRAMBuffer[ RTC_RAM_LOW_ADDRESS_INDEX ] = ( address & MASK_OFF_MSB ); prepRAMBuffer [ RTC_RAM_HIGH_ADDRESS_INDEX ] = 0x0000; prepRAMBuffer [ RTC_RAM_LOW_ADDRESS_INDEX ] = castedAddress; txBuffer [ BUFFER_INDEX_0 ] = RTC_WRITE_TO_RAM; @@ -1413,7 +1409,7 @@ RTC_SELF_TEST_STATE_T result = RTC_SELF_TEST_STATE_WAIT_FOR_FIRST_SECOND; BOOL isStatusOk = serviceRTC( txBuffer, rxBuffer, RTC_GENERAL_BUFFER_LENGTH ); - if ( RTCServiceState == RTC_SERVICE_COMPLETE && isStatusOk ) + if ( ( RTCServiceState == RTC_SERVICE_COMPLETE ) && ( TRUE == isStatusOk ) ) { if ( isRTCFunctional() ) { @@ -1422,48 +1418,8 @@ if ( RTCCurrentSecond != RTCPreviousSecond ) { RTCPreviousSecond = RTCCurrentSecond; + previousFPGATimerCount = getFPGATimerCount(); RTCSelfTestTimer = getMSTimerCount(); - - result = RTC_SELF_TEST_STATE_WAIT_FOR_SECOND_SECOND; - } - } - else - { - RTCSelfTestResult = SELF_TEST_STATUS_FAILED; - result = RTC_SELF_TEST_STATE_COMPLETE; - } - } - else if ( RTCServiceState == RTC_SERVICE_COMPLETE ) - { - RTCSelfTestResult = SELF_TEST_STATUS_FAILED; - result = RTC_SELF_TEST_STATE_COMPLETE; - } - - return result; -} - -/*********************************************************************//** - * @brief - * The handleSelfTestWaitForSecondSecond continuously reads the RTC and compares - * latest second from RTC to the previous second and if it has changed, it will - * set the state machine to the next state. - * @details Inputs: RTCServiceState, txBuffer, rxBuffer, RTCCurrentSecond - * @details Outputs: RTCCurrentSecond - * @return next state - *************************************************************************/ -static RTC_SELF_TEST_STATE_T handleSelfTestWaitForSecondSecond( void ) -{ - RTC_SELF_TEST_STATE_T result = RTC_SELF_TEST_STATE_WAIT_FOR_SECOND_SECOND; - BOOL isStatusOk = serviceRTC( txBuffer, rxBuffer, RTC_GENERAL_BUFFER_LENGTH ); - - if ( RTCServiceState == RTC_SERVICE_COMPLETE && isStatusOk ) // TODO - should probably have a timeout on these waits - { - if ( isRTCFunctional() ) - { - U32 RTCCurrentSecond = rxBuffer[ RTC_SECONDS_INDEX ]; - - if ( RTCCurrentSecond != RTCPreviousSecond ) - { result = RTC_SELF_TEST_STATE_CHECK_ACCURACY; } } @@ -1476,7 +1432,7 @@ else if ( RTCServiceState == RTC_SERVICE_COMPLETE ) { RTCSelfTestResult = SELF_TEST_STATUS_FAILED; - result = RTC_SELF_TEST_STATE_COMPLETE; + result = RTC_SELF_TEST_STATE_COMPLETE; } return result; @@ -1496,23 +1452,27 @@ static RTC_SELF_TEST_STATE_T handleSelfTestCheckAccuracy( void ) { RTC_SELF_TEST_STATE_T result = RTC_SELF_TEST_STATE_CHECK_ACCURACY; + BOOL isStatusOk = serviceRTC( txBuffer, rxBuffer, RTC_GENERAL_BUFFER_LENGTH ); - if ( didTimeout( RTCSelfTestTimer, RTC_ACCURACY_TIMEOUT ) ) + if ( ( TRUE == isStatusOk ) && ( rxBuffer[ RTC_SECONDS_INDEX ] != RTCPreviousSecond ) ) { - U32 elapsedTime = calcTimeSince( RTCSelfTestTimer ); - S32 deltaTime = (S32)elapsedTime - (S32)RTC_ACCURACY_TIMEOUT; + S32 const elapsedTime = (S32)calcTimeSince( RTCSelfTestTimer ); + S32 const deltaTime = elapsedTime - (S32)MS_PER_SECOND; + S32 const elapsedFPGATime = (S32)u16DiffWithWrap( previousFPGATimerCount, getFPGATimerCount() ); + result = RTC_SELF_TEST_STATE_COMPLETE; + RTCSelfTestResult = SELF_TEST_STATUS_PASSED; - if ( abs( deltaTime ) > RTC_ACCURACY_TIMEOUT_TOLERANCE ) + if ( abs( deltaTime ) > RTC_ACCURACY_TOLERANCE ) { RTCSelfTestResult = SELF_TEST_STATUS_FAILED; - SET_ALARM_WITH_2_U32_DATA( ALARM_ID_RTC_OR_TIMER_ACCURACY_FAILURE, (U32)deltaTime, RTC_ACCURACY_TIMEOUT_TOLERANCE ); + SET_ALARM_WITH_2_U32_DATA( ALARM_ID_RTC_OR_TIMER_ACCURACY_FAILURE, (U32)deltaTime, RTC_ACCURACY_TOLERANCE ); } - else + + if ( abs( elapsedFPGATime - elapsedTime ) > FPGA_ACCURACY_TOLERANCE ) { - RTCSelfTestResult = SELF_TEST_STATUS_PASSED; + RTCSelfTestResult = SELF_TEST_STATUS_FAILED; + SET_ALARM_WITH_2_U32_DATA( ALARM_ID_RTC_OR_TIMER_ACCURACY_FAILURE, (U32)elapsedFPGATime, (U32)elapsedTime ); } - - result = RTC_SELF_TEST_STATE_COMPLETE; } return result;