#ifdef ENABLE_QAC_TEST #pragma PRQA_MESSAGES_OFF 0292 #endif /********************************************************************************************************************* * Library : Data Flash Access Library for Renesas RH850 devices * * File Name : $Source: r_fdl_global.h $ * Lib. Version : $RH850_FDL_LIB_VERSION_T01: V2.11 $ * Mod. Revision : $Revision: 1.43 $ * Mod. Date : $Date: 2016/06/07 09:29:27JST $ * Device(s) : RV40 Flash based RH850 microcontroller * Description : FDL internal definitions and global functions *********************************************************************************************************************/ /********************************************************************************************************************* * DISCLAIMER * This software is supplied by Renesas Electronics Corporation and is only intended for use with Renesas products. * No other uses are authorized. This software is owned by Renesas Electronics Corporation and is protected under all * applicable laws, including copyright laws. * THIS SOFTWARE IS PROVIDED "AS IS" AND RENESAS MAKES NO WARRANTIES REGARDING THIS SOFTWARE, WHETHER EXPRESS, IMPLIED * OR STATUTORY, INCLUDING BUT NOT LIMITED TO WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND * NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED. * TO THE MAXIMUM EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS ELECTRONICS CORPORATION NOR ANY OF ITS * AFFILIATED COMPANIES SHALL BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR ANY * REASON RELATED TO THIS SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH * DAMAGES. * Renesas reserves the right, without notice, to make changes to this software and to discontinue the availability of * this software. By using this software, you agree to the additional terms and conditions found by accessing the * following link: * http://www.renesas.com/disclaimer * * Copyright (C) 2015-2016 Renesas Electronics Corporation. All rights reserved. *********************************************************************************************************************/ #ifdef ENABLE_QAC_TEST #pragma PRQA_MESSAGES_ON 0292 #endif /********************************************************************************************************************* * MISRA Rule: MISRA-C 2004 rule 3.1 (QAC message 0292) * Reason: To support automatic insertion of revision, module name etc. by the source revision control system * it is necessary to violate the rule, because the system uses non basic characters as placeholders. * Verification: The placeholders are used in commentaries only. Therefore rule violation cannot influence code * compilation. *********************************************************************************************************************/ #ifndef R_FDL_GLOBAL_H #define R_FDL_GLOBAL_H /********************************************************************************************************************* * Include list *********************************************************************************************************************/ #include "r_typedefs.h" #include "r_fdl.h" #include "r_fdl_env.h" #if R_FDL_COMPILER == R_FDL_COMP_GHS uint32_t __STSR(int32_t regID, int32_t selID); #elif R_FDL_COMPILER == R_FDL_COMP_IAR __intrinsic int32_t __STSR(int32_t reg, int32_t selID); #elif R_FDL_COMPILER == R_FDL_COMP_REC #endif /********************************************************************************************************************* * Global constants (define, const, ...) *********************************************************************************************************************/ /* -------------------- Library version string ----------------------------- */ #define R_FDL_VERSION_STRING "DH850T01xxxxxxV211" /* -------------------- Misc constants ------------------------------------- */ /* Reset value of request pointers */ #define R_FDL_REQUEST_POINTER_UNDEFINED (r_fdl_request_t *)(0x00000000uL) #define R_FDL_DESCRIPTOR_POINTER_UNDEFINED (r_fdl_descriptor_t *)(0x00000000uL) #define R_FDL_NULL (0x00000000uL) /* -------------------- Size of RAM buffer for Code exececution ------------ */ /* Estimation of stack variable size: - Code size R_FDL_FCUFct_InitRAM_Asm: 166 Bytes (GHS/REC/IAR) - Code 1st address must be 16Byte aligned (fetch size): +16Bytes - Code last address must be 16Byte aligned (fetch size) - Prefetch: 4*16Byte --> 176Bytes (166Bytes aligned to 16Bytes) + 16Bytes + 64Bytes = 256Bytes = 128half words (=instruction alignment) - Code size R_FDL_IFct_GetFWParam_Asm: always less than R_FDL_FCUFct_InitRAM_Asm */ #define R_FDL_RAM_CODE_SIZE_HW (128) /* ----- Unique timeout value is 40us ----- */ /* Clear cache register check loop timeout */ /* clocks per timeout loop */ #define R_FDL_TIMEOUT_CC_CLK_P_LOOP (3) /* timeout loop_count: (40us * f_MHz) / (clk per loop) --- but rounding up to be considered */ #define R_FDL_TIMEOUT_CC ( ( (40 * g_fdl_str.RTCfg_pstr->cpuFrequencyMHz_u16) \ + (R_FDL_TIMEOUT_CC_CLK_P_LOOP - 1) ) / R_FDL_TIMEOUT_CC_CLK_P_LOOP ) /* IO register check loop timeout */ /* clocks per timeout loop */ #define R_FDL_TIMEOUT_CHKREG_CLK_P_LOOP (19) /* timeout loop_count: (40us * f_MHz) / (clk per loop) --- but rounding up to be considered */ #define R_FDL_TIMEOUT_CHKREG ( ( (40 * g_fdl_str.RTCfg_pstr->cpuFrequencyMHz_u16) \ + (R_FDL_TIMEOUT_CHKREG_CLK_P_LOOP - 1) ) / R_FDL_TIMEOUT_CHKREG_CLK_P_LOOP ) /********************************************************************************************************************* * Global type definitions *********************************************************************************************************************/ /** \enum r_fdl_flag_t standard FDL internal flag definition */ typedef enum R_FDL_FLAG_T { R_FDL_FALSE, /**< Flag false */ R_FDL_TRUE /**< Flag true */ } r_fdl_flag_t; /** \enum r_fdl_int_status_t definition of the FDL operational status */ typedef enum R_FDL_INT_STATUS_T { R_FDL_ISTAT_NOINIT = 0x00000000uL, /**< Pattern for uninitialized library (0x00000000) */ R_FDL_ISTAT_INIT = 0x55555554uL, /**< Pattern for initialized library after R_FDL_Init */ R_FDL_ISTAT_NORMALOP = 0x55555555uL, /**< Pattern for prepared library after R_FDL_CMD_PREPARE_ENV execution */ R_FDL_ISTAT_SUSPEND_PR = 0x55555556uL, /**< Pattern for library in suspend processing */ R_FDL_ISTAT_SUSPENDED = 0x55555557uL, /**< Pattern for library in suspend status */ R_FDL_ISTAT_STANDBY_PR = 0x55555558uL, /**< Pattern for library in standby processing */ R_FDL_ISTAT_STANDBY = 0x55555559uL /**< Pattern for library in standby */ } r_fdl_int_status_t; /** \typedef r_fdl_pFct_ExeInRAM pointer to a function. Is used in e.g. R_FDL_FCUFct_InitRAM_... */ typedef void (* r_fdl_pFct_ExeInRAM)(uint32_t * param_pu32); /** \enum r_fdl_op_status_t definition of the internal operation status required for switch mode handling */ typedef enum R_FDL_OP_STATUS_T { R_FDL_OP_IDLE = 0, /**< No on-going operation */ R_FDL_OP_EXECUTE_SYNC_ON = 1, /**< Operation ready to start, switch mode to P/E requested */ R_FDL_OP_PREPARE_START = 2, /**< Prepare environment operation ready to start, switch mode to P/E requested */ R_FDL_OP_PREPARE_RST_FCU = 3, /**< Prepare environment operation started, switch mode to P/E requested */ R_FDL_OP_PREPARE_END = 4, /**< Prepare environment operation on-going, FCU reset performed, switch mode to read requested */ R_FDL_OP_RESUME_SYNC_ON = 5, /**< Resume request accepted, switch mode to P/E requested */ R_FDL_OP_RESUME_MULTI_SYNC_ON = 6, /**< Resume request accepted to restart a multiple operation, switch mode to P/E requested */ R_FDL_OP_BUSY = 7, /**< On-going operation */ R_FDL_OP_SUSPEND_SYNC_OFF = 8, /**< Suspend processing finished, switch mode to read requested */ R_FDL_OP_END_SYNC_OFF = 9 /**< Operation finished, switch mode to read requested */ } r_fdl_op_status_t; /** \struct r_fdl_multiOp_t structure containing the data required for multi operations (erase multiple blocks, write multiple half words data) */ typedef struct R_FDL_MULTIOP_T { uint32_t flashAdd_u32; /**< source data pointer */ uint32_t bufAdd_u32; /**< destination data pointer */ uint32_t flashAddEnd_u32; /**< last source address to write */ r_fdl_accessType_t accessType_enu; /**< access type */ } r_fdl_multiOp_t; /** \struct r_fdl_data_t this structure contains all FDL internal data */ typedef struct R_FDL_DATA_T { const r_fdl_descriptor_t * RTCfg_pstr; /**< pointer to descriptor structure, initialized by R_FDL_ISTAT_INIT */ r_fdl_multiOp_t mulOp_str; /**< multi operation (erase/write) variables. Set when a multi operation is started, checked/updated when a single erase/write is finished */ r_fdl_multiOp_t spdMulOp_str; /**< multi operation variables backup for FDL suspend */ r_fdl_request_t * reqSuspend_pstr; /**< request structure pointer backup buffer for suspend/resume */ r_fdl_request_t * reqInt_pstr; /**< request structure pointer for current operation */ r_fdl_op_status_t opStatus_enu; /**< Operation status required for switch mode handling */ uint32_t opFailAddr_u32; /**< fail address of the blank check operation */ uint32_t dfSize_u32; /**< Data Flash size, required for boundary checks */ uint32_t baseAddrECC_u32; /**< ECC base address determined on firmware parameter version */ uint32_t chksumEndAddr_u32; /**< Checksum end address */ uint32_t chksumVal_u32; /**< Checksum value */ uint16_t flashMode_u16; /**< Current Flash operating mode: P/E or Read */ r_fdl_status_t spdResStatus_enu; /**< result backup buffer for suspend/resume */ r_fdl_status_t opResult_enu; /**< result backup buffer for switch mode handling */ r_fdl_flag_t cancelRequest_enu; /**< cancel request indication to the handler */ r_fdl_flag_t spdSpdRequest_enu; /**< suspend request indication to the handler */ r_fdl_flag_t spdResRequest_enu; /**< resume request indication to the handler */ r_fdl_int_status_t stByIStatBackUp_enu; /**< internal status backup for StandBy processing */ r_fdl_int_status_t iStat_enu; /**< FDL operational status variable */ } r_fdl_data_t; /********************************************************************************************************************* * Global macros *********************************************************************************************************************/ /* Static functions definition */ #ifndef R_FDL_STATIC #define R_FDL_STATIC static #endif /********************************************************************************************************************* * Global function prototypes *********************************************************************************************************************/ r_fdl_status_t R_FDL_FCUFct_CheckFatalError (void); r_fdl_flag_t R_FDL_FCUFct_ChkReady (void); r_fdl_flag_t R_FDL_FCUFct_ChkSuspendable (void); r_fdl_flag_t R_FDL_FCUFct_ChkStartable (r_fdl_command_t cmd_enu); void R_FDL_FCUFct_ClearStatus (void); r_fdl_status_t R_FDL_FCUFct_GetStat (void); r_fdl_status_t R_FDL_FCUFct_InitRAM (void); r_fdl_status_t R_FDL_FCUFct_ReadOperation (volatile uint32_t * pAddSrc_u32, uint32_t addDest_u32, uint32_t cnt_u32); r_fdl_flag_t R_FDL_FCUFct_ResumeChkNeed (void); void R_FDL_FCUFct_Resume (void); r_fdl_status_t R_FDL_FCUFct_SetFrequency (void); r_fdl_status_t R_FDL_FCUFct_GetDFSize (uint32_t *size); r_fdl_status_t R_FDL_FCUFct_StartBCEraseOperation (uint32_t addStart_u32, uint32_t addEnd_u32, uint8_t fcuCmd_u08, r_fdl_accessType_t accType_enu); r_fdl_status_t R_FDL_FCUFct_StartWriteOperation (uint32_t addSrc_u32, uint32_t addDest_u32, uint32_t cnt_u32, r_fdl_accessType_t accType_enu); void R_FDL_FCUFct_Suspend (void); r_fdl_status_t R_FDL_FCUFct_SwitchMode_Start (uint16_t mode_u16); r_fdl_status_t R_FDL_FCUFct_SwitchMode_Check (void); r_fdl_status_t R_FDL_IFct_ChkAccessBoundaries (uint32_t addrStart_u32, uint32_t bCnt_u32, r_fdl_accessType_t accType_enu, uint32_t granularity_u32); void R_FDL_IFct_WriteMemoryU08 (uint32_t addr_u32, uint8_t val_u08); void R_FDL_IFct_CalcFOpUnitCnt_BC (uint32_t * cnt_pu32, uint32_t addr_u32); r_fdl_status_t R_FDL_FCUFct_ForcedStop (void); void R_FDL_FCUFct_Switch_FAEINT (r_fdl_flag_t on_t); r_fdl_status_t R_FDL_FCUFct_VerifyChecksum (void); /********************************************************************************************************************* * Global data declarations *********************************************************************************************************************/ #define R_FDL_START_SEC_VAR #include "r_fdl_mem_map.h" #if R_FDL_COMPILER == R_FDL_COMP_GHS #define R_FDL_NOINIT #elif R_FDL_COMPILER == R_FDL_COMP_IAR #define R_FDL_NOINIT __no_init #elif R_FDL_COMPILER == R_FDL_COMP_REC #define R_FDL_NOINIT #endif extern R_FDL_NOINIT r_fdl_data_t g_fdl_str; /**< fdl global variable structure */ #define R_FDL_STOP_SEC_VAR #include "r_fdl_mem_map.h" #ifndef R_FDL_EXE_INIT_CODE_ON_STACK #define R_FDL_START_SEC_CODERAM #include "r_fdl_mem_map.h" /* Code size calculation described in r_fdl_global.h */ extern R_FDL_NOINIT uint16_t g_fdl_ramCodeBuf_au16[R_FDL_RAM_CODE_SIZE_HW]; #define R_FDL_STOP_SEC_CODERAM #include "r_fdl_mem_map.h" #endif /*********************************************************************************************************************/ /********************************************************************************************************************* * Add test defines and typedefs *********************************************************************************************************************/ #ifdef PATCH_TO_SIMULATE_ERRORS #include "FDL-tc_common.h" #endif /* specific defines for coverage measurement */ #ifdef _BullseyeCoverage #define R_FDL_COV_SAVEOFF _Pragma ("BullseyeCoverage save off") #define R_FDL_COV_RESTORE _Pragma ("BullseyeCoverage restore") #else #define R_FDL_COV_SAVEOFF #define R_FDL_COV_RESTORE #endif /*********************************************************************************************************************/ #endif /* ifndef R_FDL_GLOBAL_H */