Index: NVDataMgmt.c =================================================================== diff -u -ra3514aa5cf959bdc0c0af7d1bc43864881af1438 -rd7988c07f520940859b019645f7bb29d3202197d --- NVDataMgmt.c (.../NVDataMgmt.c) (revision a3514aa5cf959bdc0c0af7d1bc43864881af1438) +++ NVDataMgmt.c (.../NVDataMgmt.c) (revision d7988c07f520940859b019645f7bb29d3202197d) @@ -19,11 +19,12 @@ #include "F021.h" #include "NVDataMgmt.h" #include "RTC.h" - +#include "Utilities.h" #include "system.h" // Private defines #define MAX_QUEUE_SIZE 10U +#define QUEUE_FRONT_INDEX 0U #define ROUNDED_HCLK_FREQ FLOAT_TO_INT_WITH_ROUND(HCLK_FREQ) #define BANK7_SECTOR_0_31_ENABLE_BIT_MASK 0x0000000F #define BANK7_SECTOR_32_63_ENABLE_BIT_MASK 0x00000000 @@ -49,19 +50,26 @@ #define LOG_RECORDS_START_ADDRESS 0x0014 #define LOG_RECORDS_LENGTH_BYTES 6U +#define READ_BUFFER_SIZE 64U #define BUFFER_INDEX_0 0U #define BUFFER_INDEX_1 1U #define BUFFER_INDEX_2 2U #define BUFFER_INDEX_3 3U #define BUFFER_INDEX_4 4U #define BUFFER_INDEX_5 5U +#define MAX_SYS_SERIAL_NUMBER_CHARACTERS 7U +#define MAX_HW_SERIAL_NUMBER_CHARACTERS 5U +#define MAX_MFG_DATE_CHARACTERS 10U +#define MAX_CRC_LENGTH_BYTES 2U + + typedef enum NVDataMgmt_Self_Test_States { NVDATAMGMT_SELF_TEST_STATE_START = 0, NVDATAMGMT_SELF_TEST_STATE_READ_BOOTLOADER_FLAG, NVDATAMGMT_SELF_TEST_STATE_READ_LOG_RECORD, - NVDATAMGMT_SELF_TEST_STATE_READ_MFG_DATA, + NVDATAMGMT_SELF_TEST_STATE_READ_MFG_RECORDS, NVDATAMGMT_SELF_TEST_STATE_CHECK_CRC, NVDATAMGMT_SELF_TEST_STATE_COMPLETE, NUM_OF_NVDATAMGMT_SELF_TEST_STATES @@ -73,71 +81,92 @@ NVDATAMGMT_EXEC_STATE_IDLE, NVDATAMGMT_EXEC_STATE_WRITE, NVDATAMGMT_EXEC_STATE_READ, + NVDATAMGMT_EXEC_STATE_ERASE, NVDATAMGMT_EXEC_STATE_FAULT, NUM_OF_NVDATAMGMT_EXEC_STATES } NVDATAMGMT_EXEC_STATE_T; -typedef enum NVDataMgmt_Read_Write +typedef enum NVDataMgmt_Operation { NVDATAMGMT_WRITE = 0, - NVDATAMGMT_READ -} NVDATAMGMT_READ_WRITE_STATE_T; + NVDATAMGMT_READ, + NVDATAMGMT_ERASE +} NVDATAMGMT_OPERATION_STATE_T; typedef enum NVDataMgmt_Location { NVDATAMGMT_EEPROM = 0, NVDATAMGMT_RTC -} NVDATAMGMT_MEMORY_LOCATION_STATE_T; +} NVDATAMGMT_LOCATION_STATE_T; // Private functions static NVDATAMGMT_SELF_TEST_STATE_T handleSelfTestStart( void ); -static NVDATAMGMT_SELF_TEST_STATE_T handleSelfTestReadMfgData( void ); +static NVDATAMGMT_SELF_TEST_STATE_T handleSelfTestReadMfgRecord( void ); static NVDATAMGMT_SELF_TEST_STATE_T handleSelfTestReadBootloaderFlag( void ); static NVDATAMGMT_SELF_TEST_STATE_T handleSelfTestReadLogRecord( void ); static NVDATAMGMT_SELF_TEST_STATE_T handleSelfTestCheckCRC( void ); -/*static NVDATAMGMT_EXEC_STATE_T handleExecWaitForPost( void ); -static NVDATAMGMT_EXEC_STATE_T handleExecIdle( void ); -static NVDATAMGMT_EXEC_STATE_T handleExecWrite( void ); -static NVDATAMGMT_EXEC_STATE_T handleExecRead( void );*/ +static NVDATAMGMT_EXEC_STATE_T handleExecWaitForPostState( void ); +static NVDATAMGMT_EXEC_STATE_T handleExecIdleState( void ); +static NVDATAMGMT_EXEC_STATE_T handleExecWriteState( void ); +static NVDATAMGMT_EXEC_STATE_T handleExecReadState( void ); +// Queue functions +static void enqueue( void ); +static void dequeue( void ); +static BOOL isQueueEmpty ( void ); +static U08 getQueueSize( void ); + // Private variables -#pragma pack(push,4) -struct memoryOps +#pragma pack(push,1) +struct MEMORY_OPS_T { - NVDATAMGMT_READ_WRITE_STATE_T readWrite; - NVDATAMGMT_MEMORY_LOCATION_STATE_T memoryLocation; - U32 startAddress; - U16* buffer; + NVDATAMGMT_OPERATION_STATE_T memoryOperation; + NVDATAMGMT_LOCATION_STATE_T memoryLocation; + U32* startAddress; + U08* buffer; U32 length; }; -#pragma pack(pop) -#pragma pack(push,4) typedef struct { U16 recordsCount; U16 nextWriteIndex; U16 nextReadIndex; -} LOG_RECORDS; -#pragma pack(push,4) +} LOG_RECORD_T; +typedef struct mfg_Data +{ + char SYSSerialNumber [ MAX_SYS_SERIAL_NUMBER_CHARACTERS ]; + char HWSerialNumber [ MAX_HW_SERIAL_NUMBER_CHARACTERS ]; + char mfgDate [ MAX_MFG_DATE_CHARACTERS ]; +} MFG_DATA_T; -struct memoryOps jobQueue[ MAX_QUEUE_SIZE ]; -static LOG_RECORDS logRecords; +typedef struct +{ + MFG_DATA_T mfgData; + U16 crc; +} MFG_RECORD_T; +#pragma pack(pop) + +struct MEMORY_OPS_T jobQueue[ MAX_QUEUE_SIZE ]; +static S16 queueRearIndex = -1; +static LOG_RECORD_T logRecord; +static MFG_RECORD_T mfgRecord; static Fapi_StatusType EEPROMStatus = Fapi_Status_Success; static NVDATAMGMT_SELF_TEST_STATE_T NVDataMgmtSelfTestState = NVDATAMGMT_SELF_TEST_STATE_START; static NVDATAMGMT_EXEC_STATE_T NVDataMgmtExecState = NVDATAMGMT_EXEC_STATE_WAIT_FOR_POST; static SELF_TEST_STATUS_T NVDataMgmtSelfTestResult = SELF_TEST_STATUS_IN_PROGRESS; static BOOL isServiceOnEntry = TRUE; static U32 bootloaderFlag = 0; -static U16 RTCRAMBuffer[ 8 ] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; +static U08 readBuffer[ READ_BUFFER_SIZE ]; -// for testing only, remove -static U32 readBuffer[8] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; +// REMOVE THIS CODE +static U08 tempBufferForTest[5] = {'A', 0x2, 0x45, 'X', 0x78}; +// REMOVE THIS CODE /************************************************************************* * @brief initNVDataMgmt @@ -151,7 +180,12 @@ void initNVDataMgmt( void ) { // TODO: initialize all the necessary variables - NVDataMgmtSelfTestState = NVDATAMGMT_SELF_TEST_STATE_START; + NVDataMgmtSelfTestState = NVDATAMGMT_SELF_TEST_STATE_START; + EEPROMStatus = Fapi_Status_Success; + NVDataMgmtExecState = NVDATAMGMT_EXEC_STATE_WAIT_FOR_POST; + NVDataMgmtSelfTestResult = SELF_TEST_STATUS_IN_PROGRESS; + isServiceOnEntry = TRUE; + queueRearIndex = -1; EEPROMStatus = Fapi_initializeFlashBanks( ROUNDED_HCLK_FREQ ); EEPROMStatus = Fapi_setActiveFlashBank( Fapi_FlashBank7 ); } @@ -182,6 +216,16 @@ return state; } +/************************************************************************* + * @brief handleSelfTestReadBootloaderFlag + * The handleSelfTestReadBootloaderFlag reads the bootloader flag + * from RTC RAM + * @details + * Inputs : none + * Outputs : NVDATAMGMT_SELF_TEST_STATE_T + * @param none + * @return NVDATAMGMT_SELF_TEST_STATE_T + *************************************************************************/ NVDATAMGMT_SELF_TEST_STATE_T handleSelfTestReadBootloaderFlag( void ) { NVDATAMGMT_SELF_TEST_STATE_T state = NVDATAMGMT_SELF_TEST_STATE_READ_BOOTLOADER_FLAG; @@ -194,10 +238,10 @@ { U08 i; U32 tempValue; - getDataFromRAM( RTCRAMBuffer, BOOTLOADER_FLAG_LENGTH_BYTES ); + getDataFromRAM( readBuffer, BOOTLOADER_FLAG_LENGTH_BYTES ); for ( i = 0; i < BOOTLOADER_FLAG_LENGTH_BYTES; i++ ) { - tempValue = RTCRAMBuffer [ i ] << i * SHIFT_8_BITS_FOR_BYTE_SHIFT; + tempValue = readBuffer [ i ] << i * SHIFT_8_BITS_FOR_BYTE_SHIFT; bootloaderFlag = bootloaderFlag + tempValue; } state = NVDATAMGMT_SELF_TEST_STATE_READ_LOG_RECORD; @@ -206,6 +250,15 @@ return state; } +/************************************************************************* + * @brief handleSelfTestReadLogRecord + * The handleSelfTestReadLogRecord reads the log record from RTC RAM + * @details + * Inputs : none + * Outputs : NVDATAMGMT_SELF_TEST_STATE_T + * @param none + * @return NVDATAMGMT_SELF_TEST_STATE_T + *************************************************************************/ NVDATAMGMT_SELF_TEST_STATE_T handleSelfTestReadLogRecord ( void ) { NVDATAMGMT_SELF_TEST_STATE_T state = NVDATAMGMT_SELF_TEST_STATE_READ_LOG_RECORD; @@ -216,36 +269,91 @@ } if ( getRTCRAMStatus() == RTC_RAM_STATUS_IDLE ) { - getDataFromRAM( RTCRAMBuffer, LOG_RECORDS_LENGTH_BYTES ); - logRecords.recordsCount = ( RTCRAMBuffer[ BUFFER_INDEX_0 ] << SHIFT_8_BITS_FOR_BYTE_SHIFT ) - + RTCRAMBuffer[ BUFFER_INDEX_1 ]; - logRecords.nextWriteIndex = ( RTCRAMBuffer[ BUFFER_INDEX_2 ] << SHIFT_8_BITS_FOR_BYTE_SHIFT ) - + RTCRAMBuffer[ BUFFER_INDEX_3 ]; - logRecords.nextReadIndex = ( RTCRAMBuffer[ BUFFER_INDEX_4 ] << SHIFT_8_BITS_FOR_BYTE_SHIFT ) - + RTCRAMBuffer[ BUFFER_INDEX_5 ]; - state = NVDATAMGMT_SELF_TEST_STATE_READ_MFG_DATA; + getDataFromRAM( readBuffer, LOG_RECORDS_LENGTH_BYTES ); + logRecord.recordsCount = ( readBuffer [ BUFFER_INDEX_0 ] << SHIFT_8_BITS_FOR_BYTE_SHIFT ) + + readBuffer [ BUFFER_INDEX_1 ]; + logRecord.nextWriteIndex = ( readBuffer [ BUFFER_INDEX_2 ] << SHIFT_8_BITS_FOR_BYTE_SHIFT ) + + readBuffer [ BUFFER_INDEX_3 ]; + logRecord.nextReadIndex = ( readBuffer [ BUFFER_INDEX_4 ] << SHIFT_8_BITS_FOR_BYTE_SHIFT ) + + readBuffer [ BUFFER_INDEX_5 ]; + state = NVDATAMGMT_SELF_TEST_STATE_READ_MFG_RECORDS; isServiceOnEntry = TRUE; } return state; } -NVDATAMGMT_SELF_TEST_STATE_T handleSelfTestReadMfgData( void ) +/************************************************************************* + * @brief handleSelfTestReadMfgRecords + * The handleSelfTestReadMfgRecords reads the manufacturing record from + * EEPROM + * @details + * Inputs : none + * Outputs : NVDATAMGMT_SELF_TEST_STATE_T + * @param none + * @return NVDATAMGMT_SELF_TEST_STATE_T + *************************************************************************/ +NVDATAMGMT_SELF_TEST_STATE_T handleSelfTestReadMfgRecord( void ) { - NVDATAMGMT_SELF_TEST_STATE_T state = NVDATAMGMT_SELF_TEST_STATE_READ_MFG_DATA; + NVDATAMGMT_SELF_TEST_STATE_T state = NVDATAMGMT_SELF_TEST_STATE_READ_MFG_RECORDS; if ( isServiceOnEntry ) { - EEPROMStatus = Fapi_doMarginRead( (uint32_t*)BANK7_SECTOR0_START_ADDRESS, readBuffer, 8, Fapi_NormalRead ); + U32 length = MAX_SYS_SERIAL_NUMBER_CHARACTERS + MAX_HW_SERIAL_NUMBER_CHARACTERS + + MAX_MFG_DATE_CHARACTERS + MAX_CRC_LENGTH_BYTES; + EEPROMStatus = Fapi_doMarginRead( (U32*)BANK7_SECTOR0_START_ADDRESS, (U32*)readBuffer, length, Fapi_NormalRead ); isServiceOnEntry = FALSE; } else if ( EEPROMStatus == Fapi_Status_Success ) { + U08 i; + for ( i = 0; i < MAX_SYS_SERIAL_NUMBER_CHARACTERS; i++ ) + { + mfgRecord.mfgData.SYSSerialNumber [ i ] = readBuffer [ i ]; + } + for ( i = 0; i < MAX_HW_SERIAL_NUMBER_CHARACTERS; i++ ) + { + mfgRecord.mfgData.HWSerialNumber [ i ] = readBuffer [ i + MAX_SYS_SERIAL_NUMBER_CHARACTERS ]; + } + for ( i = 0; i < MAX_MFG_DATE_CHARACTERS; i++ ) + { + mfgRecord.mfgData.mfgDate [ i ] = readBuffer [ i + MAX_SYS_SERIAL_NUMBER_CHARACTERS + MAX_HW_SERIAL_NUMBER_CHARACTERS ]; + } + mfgRecord.crc = ( readBuffer [ MAX_SYS_SERIAL_NUMBER_CHARACTERS + MAX_HW_SERIAL_NUMBER_CHARACTERS + MAX_MFG_DATE_CHARACTERS + 1 ] + << SHIFT_8_BITS_FOR_BYTE_SHIFT ) + + readBuffer [ MAX_SYS_SERIAL_NUMBER_CHARACTERS + MAX_HW_SERIAL_NUMBER_CHARACTERS + MAX_MFG_DATE_CHARACTERS ]; state = NVDATAMGMT_SELF_TEST_STATE_CHECK_CRC; isServiceOnEntry = TRUE; } return state; } /************************************************************************* + * @brief handleSelfTestCheckCRC + * The handleSelfTestCheckCRC calculates the CRC of the records and compares + * them to the CRC that was read. If they don't match, it will fail POST + * @details + * Inputs : none + * Outputs : NVDATAMGMT_SELF_TEST_STATE_T + * @param none + * @return NVDATAMGMT_SELF_TEST_STATE_T + *************************************************************************/ +NVDATAMGMT_SELF_TEST_STATE_T handleSelfTestCheckCRC( void ) +{ + NVDATAMGMT_SELF_TEST_STATE_T state = NVDATAMGMT_SELF_TEST_STATE_COMPLETE; + U16 calculatedCRC; + calculatedCRC = crc16( (U08*)&mfgRecord.mfgData, sizeof( MFG_DATA_T ) ); + + if ( calculatedCRC == mfgRecord.crc ) + { + NVDataMgmtSelfTestResult = SELF_TEST_STATUS_PASSED; + } + else + { + NVDataMgmtSelfTestResult = SELF_TEST_STATUS_FAILED; + } + return state; +} + +/************************************************************************* * @brief execNVDataMgmtSelfTest * The execNVDataMgmtSelfTest runs the NVDataMgmt POST during the self test * @details @@ -273,19 +381,20 @@ NVDataMgmtSelfTestState = handleSelfTestReadLogRecord(); break; - case NVDATAMGMT_SELF_TEST_STATE_READ_MFG_DATA: + case NVDATAMGMT_SELF_TEST_STATE_READ_MFG_RECORDS: - NVDataMgmtSelfTestState = handleSelfTestReadMfgData(); + NVDataMgmtSelfTestState = handleSelfTestReadMfgRecord(); break; case NVDATAMGMT_SELF_TEST_STATE_CHECK_CRC: - // FOR TESTING PURPOSES. REMOVE THIS CODE - NVDataMgmtSelfTestState = NVDATAMGMT_SELF_TEST_STATE_COMPLETE; - NVDataMgmtSelfTestResult = SELF_TEST_STATUS_PASSED; + NVDataMgmtSelfTestState = handleSelfTestCheckCRC(); break; case NVDATAMGMT_SELF_TEST_STATE_COMPLETE: + + // Done with the state + // TODO: If POST failed, set the proper alarm break; default: @@ -297,33 +406,171 @@ return NVDataMgmtSelfTestResult; } - +/************************************************************************* + * @brief execNVDataMgmt + * The execNVDataMgmt runs the NVDataMgmt main tasks + * @details + * Inputs : none + * Outputs : none + * @param none + * @return none + *************************************************************************/ void execNVDataMgmt( void ) { switch ( NVDataMgmtExecState ) { case NVDATAMGMT_EXEC_STATE_WAIT_FOR_POST: + + NVDataMgmtExecState = handleExecWaitForPostState(); break; case NVDATAMGMT_EXEC_STATE_IDLE: + + NVDataMgmtExecState = handleExecIdleState(); break; case NVDATAMGMT_EXEC_STATE_WRITE: + + NVDataMgmtExecState = handleExecWriteState(); break; case NVDATAMGMT_EXEC_STATE_READ: + + NVDataMgmtExecState = handleExecReadState(); break; case NVDATAMGMT_EXEC_STATE_FAULT: + + // Something failed set the alarms + // TODO: set the alarms and stuff break; default: + + NVDataMgmtExecState = NVDATAMGMT_EXEC_STATE_FAULT; break; } } +NVDATAMGMT_EXEC_STATE_T handleExecWaitForPostState( void ) +{ + NVDATAMGMT_EXEC_STATE_T state = NVDATAMGMT_EXEC_STATE_WAIT_FOR_POST; + if ( NVDataMgmtSelfTestState == NVDATAMGMT_SELF_TEST_STATE_COMPLETE && + NVDataMgmtSelfTestResult == SELF_TEST_STATUS_PASSED ) + { + // TODO: REMOVE THIS CODE + enqueue(); + // TODO: REMOVE THIS CODE + state = NVDATAMGMT_EXEC_STATE_IDLE; + } + else if ( NVDataMgmtSelfTestState == NVDATAMGMT_SELF_TEST_STATE_COMPLETE ) + { + // TODO: Check this state, do we have to go to FAULT if POST failed? + state = NVDATAMGMT_EXEC_STATE_FAULT; + } + return state; +} +static NVDATAMGMT_EXEC_STATE_T handleExecIdleState( void ) +{ + NVDATAMGMT_EXEC_STATE_T state = NVDATAMGMT_EXEC_STATE_IDLE; + if ( !isQueueEmpty() ) + { + NVDATAMGMT_OPERATION_STATE_T ops = jobQueue [ QUEUE_FRONT_INDEX ].memoryOperation; + if ( ops == NVDATAMGMT_WRITE ) + { + state = NVDATAMGMT_EXEC_STATE_WRITE; + } + else if ( ops == NVDATAMGMT_READ ) + { + state = NVDATAMGMT_EXEC_STATE_READ; + } + } + return state; +} +static NVDATAMGMT_EXEC_STATE_T handleExecWriteState( void ) +{ + NVDATAMGMT_EXEC_STATE_T state = NVDATAMGMT_EXEC_STATE_WRITE; + if ( isServiceOnEntry ) + { + EEPROMStatus = Fapi_issueAsyncCommandWithAddress(Fapi_EraseSector, jobQueue [ QUEUE_FRONT_INDEX ].startAddress); + while ( EEPROMStatus != Fapi_Status_Success) {} + // TODO: Convert the buffer to U08* + EEPROMStatus = Fapi_issueProgrammingCommand ( jobQueue [ QUEUE_FRONT_INDEX ].startAddress, + jobQueue [ QUEUE_FRONT_INDEX ].buffer, + jobQueue [ QUEUE_FRONT_INDEX ].length, + 0x00, 0, Fapi_DataOnly ); + isServiceOnEntry = FALSE; + } + else if ( EEPROMStatus == Fapi_Status_Success ) + { + state = NVDATAMGMT_EXEC_STATE_IDLE; + dequeue(); + isServiceOnEntry = TRUE; + } + return state; +} +static NVDATAMGMT_EXEC_STATE_T handleExecReadState( void ) +{ + NVDATAMGMT_EXEC_STATE_T state = NVDATAMGMT_EXEC_STATE_READ; + if ( isServiceOnEntry ) + { + EEPROMStatus = Fapi_doMarginRead ( jobQueue [ QUEUE_FRONT_INDEX ].startAddress, + (U32*)jobQueue [ QUEUE_FRONT_INDEX ].buffer, + jobQueue [ QUEUE_FRONT_INDEX ].length, Fapi_NormalRead ); + isServiceOnEntry = FALSE; + } + else if ( EEPROMStatus == Fapi_Status_Success ) + { + state = NVDATAMGMT_EXEC_STATE_IDLE; + dequeue(); + isServiceOnEntry = TRUE; + } + return state; +} +static void enqueue( void ) +{ + // REMOVE THIS CODE. FOR TESTING ONLY + queueRearIndex++; + jobQueue[queueRearIndex].memoryOperation = NVDATAMGMT_WRITE; + jobQueue[queueRearIndex].memoryLocation = NVDATAMGMT_EEPROM; + jobQueue[queueRearIndex].startAddress = (U32*)BANK7_SECTOR1_START_ADDRESS; + jobQueue[queueRearIndex].buffer = tempBufferForTest; + jobQueue[queueRearIndex].length = sizeof(tempBufferForTest); + queueRearIndex++; + jobQueue[queueRearIndex].memoryOperation = NVDATAMGMT_READ; + jobQueue[queueRearIndex].memoryLocation = NVDATAMGMT_EEPROM; + jobQueue[queueRearIndex].startAddress = (U32*)BANK7_SECTOR1_START_ADDRESS; + jobQueue[queueRearIndex].buffer = readBuffer; + jobQueue[queueRearIndex].length = 8; + // REMOVE THIS CODE. FOR TESTING ONLY +} +static void dequeue( void ) +{ + U08 i; + for ( i = 0; i < queueRearIndex; i++ ) + { + jobQueue [ i ] = jobQueue [ i + 1 ]; + } + queueRearIndex--; +} +static BOOL isQueueEmpty ( void ) +{ + BOOL isEmpty = TRUE; + if ( queueRearIndex >= QUEUE_FRONT_INDEX ) + { + isEmpty = FALSE; + } + return isEmpty; +} +static U08 getQueueSize( void ) +{ + return queueRearIndex; +} + + + Index: NVDataMgmt.h =================================================================== diff -u -re1b34b080d041c571ca4aad8a31104d2773c17df -rd7988c07f520940859b019645f7bb29d3202197d --- NVDataMgmt.h (.../NVDataMgmt.h) (revision e1b34b080d041c571ca4aad8a31104d2773c17df) +++ NVDataMgmt.h (.../NVDataMgmt.h) (revision d7988c07f520940859b019645f7bb29d3202197d) @@ -35,12 +35,9 @@ BOOL getMfgData( char* buffer ); +BOOL setTreatmentTime( U32 mins ); +BOOL setLitersOfFilterWater( U32 liter ); - - - - - #endif /* FWCOMMON_NVDATAMGMT_H_ */ Index: RTC.c =================================================================== diff -u -ra3514aa5cf959bdc0c0af7d1bc43864881af1438 -rd7988c07f520940859b019645f7bb29d3202197d --- RTC.c (.../RTC.c) (revision a3514aa5cf959bdc0c0af7d1bc43864881af1438) +++ RTC.c (.../RTC.c) (revision d7988c07f520940859b019645f7bb29d3202197d) @@ -517,12 +517,12 @@ * @param none * @return none *************************************************************************/ -void getDataFromRAM( U16* externalBuffer, U32 length ) +void getDataFromRAM( U08* externalBuffer, U32 length ) { U08 i; for ( i = 0; i < length; i++ ) { - externalBuffer[ i ] = RAMBuffer[ i + 1 ]; + externalBuffer[ i ] = RAMBuffer[ i + 1 ] & MASK_OFF_MSB; } } Index: RTC.h =================================================================== diff -u -r9e60eaa3f9b152acef1fa1c99bea1fc255813f59 -rd7988c07f520940859b019645f7bb29d3202197d --- RTC.h (.../RTC.h) (revision 9e60eaa3f9b152acef1fa1c99bea1fc255813f59) +++ RTC.h (.../RTC.h) (revision d7988c07f520940859b019645f7bb29d3202197d) @@ -55,6 +55,6 @@ RTC_RAM_STATE_T getRTCRAMState( void ); -void getDataFromRAM( U16* externalBuffer, U32 length ); +void getDataFromRAM( U08* externalBuffer, U32 length ); #endif