Index: FlashDriver/Fapi_UserDefinedFunctions.c =================================================================== diff -u --- FlashDriver/Fapi_UserDefinedFunctions.c (revision 0) +++ FlashDriver/Fapi_UserDefinedFunctions.c (revision 34d06953f880f3dd2b50f5361cfe31a70c579a38) @@ -0,0 +1,78 @@ +/********************************************************************************************************************** + * FILE DESCRIPTION + * ------------------------------------------------------------------------------------------------------------------- + * + * Project: Hercules� ARM� Safety MCUs - F021 Flash API + * Version: v2.00.00 Build(000776) - Alpha + * Build Date: 2012-12-25 + * + * + * Description: Contains all user defined callback functions used by the F021 Flash API. + *--------------------------------------------------------------------------------------------------------------------- + * Author: John R Hall + *--------------------------------------------------------------------------------------------------------------------- + * + *********************************************************************************************************************/ + +/* +* Copyright (C) 2009-2018 Texas Instruments Incorporated - www.ti.com +* +* +* Redistribution and use in source and binary forms, with or without +* modification, are permitted provided that the following conditions +* are met: +* +* Redistributions of source code must retain the above copyright +* notice, this list of conditions and the following disclaimer. +* +* Redistributions in binary form must reproduce the above copyright +* notice, this list of conditions and the following disclaimer in the +* documentation and/or other materials provided with the +* distribution. +* +* Neither the name of Texas Instruments Incorporated nor the names of +* its contributors may be used to endorse or promote products derived +* from this software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +* +*/ + + +/********************************************************************************************************************** + * INCLUDES + *********************************************************************************************************************/ +#include "F021.h" + +/********************************************************************************************************************** + * Fapi_serviceWatchdogTimer + *********************************************************************************************************************/ +/*! Callback function to service watchdog timer. Used by the Blank, Read, and Verify fuctions. + * + * \param [in] none + * \param [out] none + * \return Fapi_StatusType + * \retval Fapi_Status_Success + * \note TI FEE API. + *********************************************************************************************************************/ +Fapi_StatusType Fapi_serviceWatchdogTimer(void) +{ + /* User to add their own watchdog servicing code here */ + + return(Fapi_Status_Success); +} + +/********************************************************************************************************************** + * END OF FILE: Fapi_UserDefinedFunctions.c + *********************************************************************************************************************/ + Index: NVDataMgmt.c =================================================================== diff -u -re1b34b080d041c571ca4aad8a31104d2773c17df -r34d06953f880f3dd2b50f5361cfe31a70c579a38 --- NVDataMgmt.c (.../NVDataMgmt.c) (revision e1b34b080d041c571ca4aad8a31104d2773c17df) +++ NVDataMgmt.c (.../NVDataMgmt.c) (revision 34d06953f880f3dd2b50f5361cfe31a70c579a38) @@ -16,8 +16,10 @@ // Includes -#include "NVDataMgmt.h" #include "F021.h" +#include "NVDataMgmt.h" +#include "RTC.h" + #include "system.h" // Private defines @@ -93,14 +95,15 @@ // Private variables -struct memoryOps job[ MAX_QUEUE_SIZE ]; -static Fapi_StatusType EEPROMStatus; +struct memoryOps jobQueue[ MAX_QUEUE_SIZE ]; +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 readBuffer[8] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; - /************************************************************************* * @brief initNVDataMgmt * The initNVDataMgmt initializes EEPROM @@ -112,14 +115,55 @@ *************************************************************************/ void initNVDataMgmt( void ) { + // TODO: initialize all the necessary variables NVDataMgmtSelfTestState = NVDATAMGMT_SELF_TEST_STATE_START; EEPROMStatus = Fapi_initializeFlashBanks( ROUNDED_HCLK_FREQ ); EEPROMStatus = Fapi_setActiveFlashBank( Fapi_FlashBank7 ); +} - EEPROMStatus = Fapi_enableEepromBankSectors( BANK7_SECTOR_0_31_ENABLE_BIT_MASK, BANK7_SECTOR_32_63_ENABLE_BIT_MASK ); +/************************************************************************* + * @brief handleSelfTestStart + * The handleSelfTestStart enables the EEPROM bank sectors + * @details + * Inputs : none + * Outputs : NVDATAMGMT_SELF_TEST_STATE_T + * @param none + * @return NVDATAMGMT_SELF_TEST_STATE_T + *************************************************************************/ +NVDATAMGMT_SELF_TEST_STATE_T handleSelfTestStart( void ) +{ + NVDATAMGMT_SELF_TEST_STATE_T state = NVDATAMGMT_SELF_TEST_STATE_START; + if ( isServiceOnEntry ) + { + EEPROMStatus = Fapi_enableEepromBankSectors( BANK7_SECTOR_0_31_ENABLE_BIT_MASK, + BANK7_SECTOR_32_63_ENABLE_BIT_MASK ); + isServiceOnEntry = FALSE; + } + else if ( EEPROMStatus == Fapi_Status_Success ) + { + state = NVDATAMGMT_SELF_TEST_STATE_READ_MEMORY_DATA; + isServiceOnEntry = TRUE; + } + return state; } +NVDATAMGMT_SELF_TEST_STATE_T handleSelfTestReadMemoryData( void ) +{ + NVDATAMGMT_SELF_TEST_STATE_T state = NVDATAMGMT_SELF_TEST_STATE_READ_MEMORY_DATA; + + if ( isServiceOnEntry ) + { + EEPROMStatus = Fapi_doMarginRead((uint32_t*)BANK7_SECTOR0_START_ADDRESS, readBuffer, 8, Fapi_NormalRead); + isServiceOnEntry = FALSE; + } + else if ( EEPROMStatus == Fapi_Status_Success ) + { + isServiceOnEntry = TRUE; + } + return state; +} + /************************************************************************* * @brief execNVDataMgmtSelfTest * The execNVDataMgmtSelfTest runs the NVDataMgmt POST during the self test @@ -134,9 +178,13 @@ switch( NVDataMgmtSelfTestState ) { case NVDATAMGMT_SELF_TEST_STATE_START: + + NVDataMgmtSelfTestState = handleSelfTestStart(); break; case NVDATAMGMT_SELF_TEST_STATE_READ_MEMORY_DATA: + + NVDataMgmtSelfTestState = handleSelfTestReadMemoryData(); break; case NVDATAMGMT_SELF_TEST_STATE_CHECK_CRC: @@ -154,6 +202,8 @@ return NVDataMgmtSelfTestResult; } + + void execNVDataMgmt( void ) { Index: RTC.c =================================================================== diff -u -r02f990b33c415985dcd9c765c49604226cb371e3 -r34d06953f880f3dd2b50f5361cfe31a70c579a38 --- RTC.c (.../RTC.c) (revision 02f990b33c415985dcd9c765c49604226cb371e3) +++ RTC.c (.../RTC.c) (revision 34d06953f880f3dd2b50f5361cfe31a70c579a38) @@ -1168,7 +1168,6 @@ { U32 RTCCurrentSecond = rxBuffer[ RTC_SECONDS_INDEX ]; RTCPreviousSecond = RTCCurrentSecond; - result = RTC_SELF_TEST_STATE_WAIT_FOR_FIRST_SECOND; } else