File indexing completed on 2025-05-11 08:22:59
0001
0002
0003
0004
0005
0006
0007
0008
0009 #ifndef _FSL_FLEXRAM_H_
0010 #define _FSL_FLEXRAM_H_
0011
0012 #include "fsl_common.h"
0013 #include "fsl_flexram_allocate.h"
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023
0024
0025
0026
0027 #define FSL_FLEXRAM_DRIVER_VERSION (MAKE_VERSION(2U, 2U, 0U))
0028
0029
0030
0031 #ifndef FLEXRAM_ECC_ERROR_DETAILED_INFO
0032 #define FLEXRAM_ECC_ERROR_DETAILED_INFO \
0033 0U
0034 #endif
0035
0036
0037 enum
0038 {
0039 kFLEXRAM_Read = 0U,
0040 kFLEXRAM_Write = 1U,
0041 };
0042
0043
0044 enum
0045 {
0046 kFLEXRAM_OCRAMAccessError = FLEXRAM_INT_STATUS_OCRAM_ERR_STATUS_MASK,
0047 kFLEXRAM_DTCMAccessError = FLEXRAM_INT_STATUS_DTCM_ERR_STATUS_MASK,
0048 kFLEXRAM_ITCMAccessError = FLEXRAM_INT_STATUS_ITCM_ERR_STATUS_MASK,
0049
0050 #if defined(FSL_FEATURE_FLEXRAM_HAS_MAGIC_ADDR) && FSL_FEATURE_FLEXRAM_HAS_MAGIC_ADDR
0051 kFLEXRAM_OCRAMMagicAddrMatch = FLEXRAM_INT_STATUS_OCRAM_MAM_STATUS_MASK,
0052 kFLEXRAM_DTCMMagicAddrMatch = FLEXRAM_INT_STATUS_DTCM_MAM_STATUS_MASK,
0053 kFLEXRAM_ITCMMagicAddrMatch = FLEXRAM_INT_STATUS_ITCM_MAM_STATUS_MASK,
0054
0055 #if defined(FSL_FEATURE_FLEXRAM_HAS_ECC) && FSL_FEATURE_FLEXRAM_HAS_ECC
0056 kFLEXRAM_OCRAMECCMultiError = FLEXRAM_INT_STATUS_OCRAM_ECC_ERRM_INT_MASK,
0057 kFLEXRAM_OCRAMECCSingleError = FLEXRAM_INT_STATUS_OCRAM_ECC_ERRS_INT_MASK,
0058 kFLEXRAM_ITCMECCMultiError = FLEXRAM_INT_STATUS_ITCM_ECC_ERRM_INT_MASK,
0059 kFLEXRAM_ITCMECCSingleError = FLEXRAM_INT_STATUS_ITCM_ECC_ERRS_INT_MASK,
0060 kFLEXRAM_D0TCMECCMultiError = FLEXRAM_INT_STATUS_D0TCM_ECC_ERRM_INT_MASK,
0061 kFLEXRAM_D0TCMECCSingleError = FLEXRAM_INT_STATUS_D0TCM_ECC_ERRS_INT_MASK,
0062 kFLEXRAM_D1TCMECCMultiError = FLEXRAM_INT_STATUS_D1TCM_ECC_ERRM_INT_MASK,
0063 kFLEXRAM_D1TCMECCSingleError = FLEXRAM_INT_STATUS_D1TCM_ECC_ERRS_INT_MASK,
0064
0065 kFLEXRAM_InterruptStatusAll =
0066 FLEXRAM_INT_STATUS_OCRAM_ERR_STATUS_MASK | FLEXRAM_INT_STATUS_DTCM_ERR_STATUS_MASK |
0067 FLEXRAM_INT_STATUS_ITCM_ERR_STATUS_MASK | FLEXRAM_INT_STATUS_OCRAM_MAM_STATUS_MASK |
0068 FLEXRAM_INT_STATUS_DTCM_MAM_STATUS_MASK | FLEXRAM_INT_STATUS_ITCM_MAM_STATUS_MASK |
0069 FLEXRAM_INT_STATUS_OCRAM_ECC_ERRM_INT_MASK | FLEXRAM_INT_STATUS_OCRAM_ECC_ERRS_INT_MASK |
0070 FLEXRAM_INT_STATUS_ITCM_ECC_ERRM_INT_MASK | FLEXRAM_INT_STATUS_ITCM_ECC_ERRS_INT_MASK |
0071 FLEXRAM_INT_STATUS_D0TCM_ECC_ERRM_INT_MASK | FLEXRAM_INT_STATUS_D0TCM_ECC_ERRS_INT_MASK |
0072 FLEXRAM_INT_STATUS_D1TCM_ECC_ERRM_INT_MASK | FLEXRAM_INT_STATUS_D1TCM_ECC_ERRS_INT_MASK,
0073 #else
0074 kFLEXRAM_InterruptStatusAll = FLEXRAM_INT_STATUS_OCRAM_ERR_STATUS_MASK | FLEXRAM_INT_STATUS_DTCM_ERR_STATUS_MASK |
0075 FLEXRAM_INT_STATUS_ITCM_ERR_STATUS_MASK | FLEXRAM_INT_STATUS_OCRAM_MAM_STATUS_MASK |
0076 FLEXRAM_INT_STATUS_DTCM_MAM_STATUS_MASK | FLEXRAM_INT_STATUS_ITCM_MAM_STATUS_MASK,
0077 #endif
0078
0079
0080 #else
0081 kFLEXRAM_InterruptStatusAll = FLEXRAM_INT_STATUS_OCRAM_ERR_STATUS_MASK | FLEXRAM_INT_STATUS_DTCM_ERR_STATUS_MASK |
0082 FLEXRAM_INT_STATUS_ITCM_ERR_STATUS_MASK,
0083 #endif
0084
0085 };
0086
0087
0088
0089
0090
0091
0092
0093
0094 typedef enum _flexram_tcm_access_mode
0095 {
0096 kFLEXRAM_TCMAccessFastMode = 0U,
0097 kFLEXRAM_TCMAccessWaitMode = 1U,
0098 } flexram_tcm_access_mode_t;
0099
0100
0101 enum
0102 {
0103 kFLEXRAM_TCMSize32KB = 32 * 1024U,
0104 kFLEXRAM_TCMSize64KB = 64 * 1024U,
0105 kFLEXRAM_TCMSize128KB = 128 * 1024U,
0106 kFLEXRAM_TCMSize256KB = 256 * 1024U,
0107 kFLEXRAM_TCMSize512KB = 512 * 1024U,
0108 };
0109
0110 #if (defined(FSL_FEATURE_FLEXRAM_HAS_ECC) && FSL_FEATURE_FLEXRAM_HAS_ECC)
0111
0112 typedef enum _flexram_memory_type
0113 {
0114 kFLEXRAM_OCRAM = 0U,
0115 kFLEXRAM_ITCM = 1U,
0116 kFLEXRAM_D0TCM = 2U,
0117 kFLEXRAM_D1TCM = 3U,
0118 } flexram_memory_type_t;
0119
0120
0121 typedef struct _flexram_ecc_error_type
0122 {
0123 uint8_t SingleBitPos;
0124 uint8_t SecondBitPos;
0125 bool Fource1BitDataInversion;
0126 bool FourceOneNCDataInversion;
0127
0128 bool FourceConti1BitDataInversion;
0129
0130 bool FourceContiNCDataInversion;
0131
0132 } flexram_ecc_error_type_t;
0133
0134
0135 typedef struct _flexram_ocram_ecc_single_error_info
0136 {
0137 #if defined(FLEXRAM_ECC_ERROR_DETAILED_INFO) && FLEXRAM_ECC_ERROR_DETAILED_INFO
0138 uint8_t OcramSingleErrorECCCipher;
0139 uint8_t OcramSingleErrorECCSyndrome;
0140
0141 #else
0142 uint32_t OcramSingleErrorInfo;
0143 #endif
0144 uint32_t OcramSingleErrorAddr;
0145 uint32_t OcramSingleErrorDataLSB;
0146 uint32_t OcramSingleErrorDataMSB;
0147 } flexram_ocram_ecc_single_error_info_t;
0148
0149
0150
0151 typedef struct _flexram_ocram_ecc_multi_error_info
0152 {
0153 #if defined(FLEXRAM_ECC_ERROR_DETAILED_INFO) && FLEXRAM_ECC_ERROR_DETAILED_INFO
0154 uint8_t OcramMultiErrorECCCipher;
0155 #else
0156 uint32_t OcramMultiErrorInfo;
0157 #endif
0158 uint32_t OcramMultiErrorAddr;
0159 uint32_t OcramMultiErrorDataLSB;
0160 uint32_t OcramMultiErrorDataMSB;
0161 } flexram_ocram_ecc_multi_error_info_t;
0162
0163
0164 typedef struct _flexram_itcm_ecc_single_error_info
0165 {
0166 #if defined(FLEXRAM_ECC_ERROR_DETAILED_INFO) && FLEXRAM_ECC_ERROR_DETAILED_INFO
0167 uint8_t ItcmSingleErrorTCMWriteRead;
0168
0169 uint8_t ItcmSingleErrorTCMAccessSize;
0170
0171 uint8_t ItcmSingleErrorTCMMaster;
0172
0173 uint8_t ItcmSingleErrorTCMPrivilege;
0174
0175 uint8_t ItcmSingleErrorBitPostion;
0176 #else
0177 uint32_t ItcmSingleErrorInfo;
0178 #endif
0179 uint32_t ItcmSingleErrorAddr;
0180 uint32_t ItcmSingleErrorDataLSB;
0181 uint32_t ItcmSingleErrorDataMSB;
0182 } flexram_itcm_ecc_single_error_info_t;
0183
0184
0185
0186 typedef struct _flexram_itcm_ecc_multi_error_info
0187 {
0188 #if defined(FLEXRAM_ECC_ERROR_DETAILED_INFO) && FLEXRAM_ECC_ERROR_DETAILED_INFO
0189 uint8_t ItcmMultiErrorTCMWriteRead;
0190
0191 uint8_t ItcmMultiErrorTCMAccessSize;
0192
0193 uint8_t ItcmMultiErrorTCMMaster;
0194
0195 uint8_t ItcmMultiErrorTCMPrivilege;
0196
0197 uint8_t ItcmMultiErrorECCSyndrome;
0198
0199 #else
0200 uint32_t ItcmMultiErrorInfo;
0201 #endif
0202 uint32_t ItcmMultiErrorAddr;
0203 uint32_t ItcmMultiErrorDataLSB;
0204 uint32_t ItcmMultiErrorDataMSB;
0205 } flexram_itcm_ecc_multi_error_info_t;
0206
0207
0208 typedef struct _flexram_dtcm_ecc_single_error_info
0209 {
0210 #if defined(FLEXRAM_ECC_ERROR_DETAILED_INFO) && FLEXRAM_ECC_ERROR_DETAILED_INFO
0211 uint8_t DtcmSingleErrorTCMWriteRead;
0212
0213 uint8_t DtcmSingleErrorTCMAccessSize;
0214
0215 uint8_t DtcmSingleErrorTCMMaster;
0216
0217 uint8_t DtcmSingleErrorTCMPrivilege;
0218
0219 uint8_t DtcmSingleErrorBitPostion;
0220 #else
0221 uint32_t DtcmSingleErrorInfo;
0222 #endif
0223 uint32_t DtcmSingleErrorAddr;
0224 uint32_t DtcmSingleErrorData;
0225 } flexram_dtcm_ecc_single_error_info_t;
0226
0227
0228
0229 typedef struct _flexram_dtcm_ecc_multi_error_info
0230 {
0231 #if defined(FLEXRAM_ECC_ERROR_DETAILED_INFO) && FLEXRAM_ECC_ERROR_DETAILED_INFO
0232 uint8_t DtcmMultiErrorTCMWriteRead;
0233
0234 uint8_t DtcmMultiErrorTCMAccessSize;
0235
0236 uint8_t DtcmMultiErrorTCMMaster;
0237
0238 uint8_t DtcmMultiErrorTCMPrivilege;
0239
0240 uint8_t DtcmMultiErrorECCSyndrome;
0241
0242 #else
0243 uint32_t DtcmMultiErrorInfo;
0244 #endif
0245 uint32_t DtcmMultiErrorAddr;
0246 uint32_t DtcmMultiErrorData;
0247 } flexram_dtcm_ecc_multi_error_info_t;
0248
0249 #endif
0250
0251
0252
0253
0254
0255 #if defined(__cplusplus)
0256 extern "C" {
0257 #endif
0258
0259
0260
0261
0262
0263
0264
0265
0266
0267
0268
0269 void FLEXRAM_Init(FLEXRAM_Type *base);
0270
0271
0272
0273
0274
0275 void FLEXRAM_Deinit(FLEXRAM_Type *base);
0276
0277
0278
0279
0280
0281
0282
0283
0284
0285
0286
0287
0288 static inline uint32_t FLEXRAM_GetInterruptStatus(FLEXRAM_Type *base)
0289 {
0290 return base->INT_STATUS & (uint32_t)kFLEXRAM_InterruptStatusAll;
0291 }
0292
0293
0294
0295
0296
0297
0298
0299 static inline void FLEXRAM_ClearInterruptStatus(FLEXRAM_Type *base, uint32_t status)
0300 {
0301 base->INT_STATUS |= status;
0302 }
0303
0304
0305
0306
0307
0308
0309
0310 static inline void FLEXRAM_EnableInterruptStatus(FLEXRAM_Type *base, uint32_t status)
0311 {
0312 base->INT_STAT_EN |= status;
0313 }
0314
0315
0316
0317
0318
0319
0320
0321 static inline void FLEXRAM_DisableInterruptStatus(FLEXRAM_Type *base, uint32_t status)
0322 {
0323 base->INT_STAT_EN &= ~status;
0324 }
0325
0326
0327
0328
0329
0330
0331
0332
0333
0334
0335
0336
0337
0338
0339 static inline void FLEXRAM_EnableInterruptSignal(FLEXRAM_Type *base, uint32_t status)
0340 {
0341 base->INT_SIG_EN |= status;
0342 }
0343
0344
0345
0346
0347
0348
0349
0350 static inline void FLEXRAM_DisableInterruptSignal(FLEXRAM_Type *base, uint32_t status)
0351 {
0352 base->INT_SIG_EN &= ~status;
0353 }
0354
0355
0356
0357
0358
0359
0360
0361
0362 static inline void FLEXRAM_SetTCMReadAccessMode(FLEXRAM_Type *base, flexram_tcm_access_mode_t mode)
0363 {
0364 base->TCM_CTRL &= ~FLEXRAM_TCM_CTRL_TCM_RWAIT_EN_MASK;
0365 base->TCM_CTRL |= (uint32_t)mode;
0366 }
0367
0368
0369
0370
0371
0372
0373
0374 static inline void FLEXRAM_SetTCMWriteAccessMode(FLEXRAM_Type *base, flexram_tcm_access_mode_t mode)
0375 {
0376 base->TCM_CTRL &= ~FLEXRAM_TCM_CTRL_TCM_WWAIT_EN_MASK;
0377 base->TCM_CTRL |= (uint32_t)mode;
0378 }
0379
0380
0381
0382
0383
0384
0385
0386 static inline void FLEXRAM_EnableForceRamClockOn(FLEXRAM_Type *base, bool enable)
0387 {
0388 if (enable)
0389 {
0390 base->TCM_CTRL |= FLEXRAM_TCM_CTRL_FORCE_CLK_ON_MASK;
0391 }
0392 else
0393 {
0394 base->TCM_CTRL &= ~FLEXRAM_TCM_CTRL_FORCE_CLK_ON_MASK;
0395 }
0396 }
0397
0398 #if defined(FSL_FEATURE_FLEXRAM_HAS_MAGIC_ADDR) && FSL_FEATURE_FLEXRAM_HAS_MAGIC_ADDR
0399
0400
0401
0402
0403
0404
0405
0406 static inline void FLEXRAM_SetOCRAMMagicAddr(FLEXRAM_Type *base, uint16_t magicAddr, uint32_t rwSel)
0407 {
0408 base->OCRAM_MAGIC_ADDR = FLEXRAM_OCRAM_MAGIC_ADDR_OCRAM_WR_RD_SEL(rwSel) |
0409 FLEXRAM_OCRAM_MAGIC_ADDR_OCRAM_MAGIC_ADDR((uint32_t)magicAddr >> 3);
0410 }
0411
0412
0413
0414
0415
0416
0417
0418
0419 static inline void FLEXRAM_SetDTCMMagicAddr(FLEXRAM_Type *base, uint16_t magicAddr, uint32_t rwSel)
0420 {
0421 base->DTCM_MAGIC_ADDR = FLEXRAM_DTCM_MAGIC_ADDR_DTCM_WR_RD_SEL(rwSel) |
0422 FLEXRAM_DTCM_MAGIC_ADDR_DTCM_MAGIC_ADDR((uint32_t)magicAddr >> 3);
0423 }
0424
0425
0426
0427
0428
0429
0430
0431
0432 static inline void FLEXRAM_SetITCMMagicAddr(FLEXRAM_Type *base, uint16_t magicAddr, uint32_t rwSel)
0433 {
0434 base->ITCM_MAGIC_ADDR = FLEXRAM_ITCM_MAGIC_ADDR_ITCM_WR_RD_SEL(rwSel) |
0435 FLEXRAM_ITCM_MAGIC_ADDR_ITCM_MAGIC_ADDR((uint32_t)magicAddr >> 3);
0436 }
0437 #endif
0438
0439 #if (defined(FSL_FEATURE_FLEXRAM_HAS_ECC) && FSL_FEATURE_FLEXRAM_HAS_ECC)
0440
0441
0442
0443
0444
0445
0446 void FLEXRAM_EnableECC(FLEXRAM_Type *base, bool OcramECCEnable, bool TcmECCEnable);
0447
0448
0449
0450
0451
0452
0453
0454 void FLEXRAM_ErrorInjection(FLEXRAM_Type *base, flexram_memory_type_t memory, flexram_ecc_error_type_t *error);
0455
0456
0457
0458
0459
0460
0461 void FLEXRAM_GetOcramSingleErroInfo(FLEXRAM_Type *base, flexram_ocram_ecc_single_error_info_t *info);
0462
0463
0464
0465
0466
0467
0468 void FLEXRAM_GetOcramMultiErroInfo(FLEXRAM_Type *base, flexram_ocram_ecc_multi_error_info_t *info);
0469
0470
0471
0472
0473
0474
0475 void FLEXRAM_GetItcmSingleErroInfo(FLEXRAM_Type *base, flexram_itcm_ecc_single_error_info_t *info);
0476
0477
0478
0479
0480
0481
0482 void FLEXRAM_GetItcmMultiErroInfo(FLEXRAM_Type *base, flexram_itcm_ecc_multi_error_info_t *info);
0483
0484
0485
0486
0487
0488
0489
0490 void FLEXRAM_GetDtcmSingleErroInfo(FLEXRAM_Type *base, flexram_dtcm_ecc_single_error_info_t *info, uint8_t bank);
0491
0492
0493
0494
0495
0496
0497
0498 void FLEXRAM_GetDtcmMultiErroInfo(FLEXRAM_Type *base, flexram_dtcm_ecc_multi_error_info_t *info, uint8_t bank);
0499
0500 #endif
0501
0502 #if defined(__cplusplus)
0503 }
0504 #endif
0505
0506
0507
0508 #endif