1 /* 2 * Copyright 2020-2023 NXP 3 * 4 * SPDX-License-Identifier: BSD-3-Clause 5 */ 6 /** 7 * @file Power_Ip_FLASH.c 8 * @version 3.0.0 9 * 10 * @brief POWER driver implementations. 11 * @details POWER driver implementations. 12 * 13 * @addtogroup POWER_DRIVER Power Ip Driver 14 * @{ 15 */ 16 17 #ifdef __cplusplus 18 extern "C" 19 { 20 #endif 21 22 23 24 25 /*================================================================================================== 26 INCLUDE FILES 27 1) system and project includes 28 2) needed interfaces from external units 29 3) internal and external interfaces from this unit 30 ==================================================================================================*/ 31 #include "Power_Ip_FLASH.h" 32 33 #if (defined(POWER_IP_ENABLE_USER_MODE_SUPPORT) && (STD_ON == POWER_IP_ENABLE_USER_MODE_SUPPORT)) 34 #if (defined(MCAL_PMC_REG_PROT_AVAILABLE)) 35 #if (STD_ON == MCAL_PMC_REG_PROT_AVAILABLE) 36 #define USER_MODE_REG_PROT_ENABLED (STD_ON) 37 #include "RegLockMacros.h" 38 #endif /* (STD_ON == MCAL_PMC_REG_PROT_AVAILABLE) */ 39 #endif 40 #endif /* (STD_ON == POWER_IP_ENABLE_USER_MODE_SUPPORT) */ 41 /*================================================================================================== 42 * SOURCE FILE VERSION INFORMATION 43 ==================================================================================================*/ 44 #define POWER_IP_FLASH_VENDOR_ID_C 43 45 #define POWER_IP_FLASH_AR_RELEASE_MAJOR_VERSION_C 4 46 #define POWER_IP_FLASH_AR_RELEASE_MINOR_VERSION_C 7 47 #define POWER_IP_FLASH_AR_RELEASE_REVISION_VERSION_C 0 48 #define POWER_IP_FLASH_SW_MAJOR_VERSION_C 3 49 #define POWER_IP_FLASH_SW_MINOR_VERSION_C 0 50 #define POWER_IP_FLASH_SW_PATCH_VERSION_C 0 51 52 /*================================================================================================== 53 FILE VERSION CHECKS 54 =================================================================================================*/ 55 /* Check if current file and Power_Ip_FLASH header file are of the same vendor */ 56 #if (POWER_IP_FLASH_VENDOR_ID_C != POWER_IP_FLASH_VENDOR_ID) 57 #error "Power_Ip_FLASH.c and Power_Ip_FLASH.h have different vendor ids" 58 #endif 59 /* Check if current file and Power_Ip_FLASH header file are of the same Autosar version */ 60 #if ((POWER_IP_FLASH_AR_RELEASE_MAJOR_VERSION_C != POWER_IP_FLASH_AR_RELEASE_MAJOR_VERSION) || \ 61 (POWER_IP_FLASH_AR_RELEASE_MINOR_VERSION_C != POWER_IP_FLASH_AR_RELEASE_MINOR_VERSION) || \ 62 (POWER_IP_FLASH_AR_RELEASE_REVISION_VERSION_C != POWER_IP_FLASH_AR_RELEASE_REVISION_VERSION) \ 63 ) 64 #error "AutoSar Version Numbers of Power_Ip_FLASH.c and Power_Ip_FLASH.h are different" 65 #endif 66 /* Check if current file and Power_Ip_FLASH header file are of the same Software version */ 67 #if ((POWER_IP_FLASH_SW_MAJOR_VERSION_C != POWER_IP_FLASH_SW_MAJOR_VERSION) || \ 68 (POWER_IP_FLASH_SW_MINOR_VERSION_C != POWER_IP_FLASH_SW_MINOR_VERSION) || \ 69 (POWER_IP_FLASH_SW_PATCH_VERSION_C != POWER_IP_FLASH_SW_PATCH_VERSION) \ 70 ) 71 #error "Software Version Numbers of Power_Ip_FLASH.c and Power_Ip_FLASH.h are different" 72 #endif 73 74 #if (defined(POWER_IP_ENABLE_USER_MODE_SUPPORT) && (STD_ON == POWER_IP_ENABLE_USER_MODE_SUPPORT)) 75 #if (defined(MCAL_PMC_REG_PROT_AVAILABLE)) 76 #if (STD_ON == MCAL_PMC_REG_PROT_AVAILABLE) 77 #ifndef DISABLE_MCAL_INTERMODULE_ASR_CHECK 78 /* Check if Power_Ip_FLASH.c file and RegLockMacros.h file are of the same Autosar version */ 79 #if ((POWER_IP_FLASH_AR_RELEASE_MAJOR_VERSION_C != REGLOCKMACROS_AR_RELEASE_MAJOR_VERSION) || \ 80 (POWER_IP_FLASH_AR_RELEASE_MINOR_VERSION_C != REGLOCKMACROS_AR_RELEASE_MINOR_VERSION)) 81 #error "AutoSar Version Numbers of Power_Ip_FLASH.c and RegLockMacros.h are different" 82 #endif 83 #endif 84 #endif /* (STD_ON == MCAL_PMC_REG_PROT_AVAILABLE) */ 85 #endif 86 #endif /* (STD_ON == POWER_IP_ENABLE_USER_MODE_SUPPORT) */ 87 /*================================================================================================== 88 * LOCAL MACROS 89 ==================================================================================================*/ 90 91 92 /*================================================================================================== 93 LOCAL TYPEDEFS (STRUCTURES, UNIONS, ENUMS) 94 ==================================================================================================*/ 95 96 97 /*================================================================================================== 98 LOCAL CONSTANTS 99 ==================================================================================================*/ 100 101 102 /*================================================================================================== 103 LOCAL VARIABLES 104 ==================================================================================================*/ 105 106 107 /*================================================================================================== 108 GLOBAL CONSTANTS 109 ==================================================================================================*/ 110 111 112 /*================================================================================================== 113 GLOBAL VARIABLES 114 ==================================================================================================*/ 115 116 117 /*================================================================================================== 118 LOCAL FUNCTION PROTOTYPES 119 ==================================================================================================*/ 120 121 /*================================================================================================== 122 LOCAL FUNCTIONS 123 ==================================================================================================*/ 124 125 /*================================================================================================== 126 GLOBAL FUNCTIONS 127 ==================================================================================================*/ 128 #define MCU_START_SEC_CODE 129 130 #include "Mcu_MemMap.h" 131 132 #if (defined(POWER_IP_ENTER_LOW_POWER_MODE) && (POWER_IP_ENTER_LOW_POWER_MODE == STD_ON)) 133 134 #if (defined(POWER_IP_ENABLE_USER_MODE_SUPPORT) && (STD_ON == POWER_IP_ENABLE_USER_MODE_SUPPORT)) 135 #if (defined(MCAL_C40ASF_REG_PROT_AVAILABLE)) 136 #if(STD_ON == MCAL_C40ASF_REG_PROT_AVAILABLE) 137 /** 138 * @brief This function will enable writing in User mode by configuring REG_PROT 139 */ Power_Ip_FLASH_C40ASF_SetUserAccessAllowed(void)140void Power_Ip_FLASH_C40ASF_SetUserAccessAllowed(void) 141 { 142 #if (defined(IP_FLASH_BASE)) 143 SET_USER_ACCESS_ALLOWED(IP_FLASH_BASE, C40ASF_PROT_MEM_U32); 144 #endif 145 } 146 #endif /* (STD_ON == MCAL_C40ASF_REG_PROT_AVAILABLE) */ 147 #endif /* (MCAL_C40ASF_REG_PROT_AVAILABLE) */ 148 #endif /* (STD_ON == POWER_IP_ENABLE_USER_MODE_SUPPORT) */ 149 150 /** 151 * @brief This function checks if there is an ongoing Flash high voltage operation. 152 * @details Checks whether the embedded flash array is idle or not. 153 * Called by: 154 * - Power_Ip_SetMode() from IPW. 155 * 156 * @param[in] void 157 * 158 * @return boolean 159 * @retval TRUE The embedded flash array is executing a high-voltage operation. 160 * @retval FALSE The embedded flash array is idle. 161 * 162 */ Power_Ip_FLASH_HighVoltageOperationOngoing(void)163boolean Power_Ip_FLASH_HighVoltageOperationOngoing(void) 164 { 165 boolean FlashBusy = FALSE; 166 uint32 McrReg; 167 168 /* Read value of Flash Module Configuration */ 169 McrReg = IP_FLASH->MCR; 170 171 if ( 0U != (McrReg & FLASH_MCR_EHV_MASK) ) 172 { 173 FlashBusy = TRUE; 174 } 175 176 return FlashBusy; 177 } 178 #endif /* (POWER_IP_ENTER_LOW_POWER_MODE == STD_ON) */ 179 180 #define MCU_STOP_SEC_CODE 181 182 #include "Mcu_MemMap.h" 183 184 #ifdef __cplusplus 185 } 186 #endif 187 188 /** @} */ 189 190