File indexing completed on 2025-05-11 08:23:00
0001
0002
0003
0004
0005
0006
0007
0008
0009 #include "fsl_pit.h"
0010
0011
0012 #ifndef FSL_COMPONENT_ID
0013 #define FSL_COMPONENT_ID "platform.drivers.pit"
0014 #endif
0015
0016
0017
0018
0019
0020
0021
0022
0023
0024
0025
0026 static uint32_t PIT_GetInstance(PIT_Type *base);
0027
0028
0029
0030
0031
0032 static PIT_Type *const s_pitBases[] = PIT_BASE_PTRS;
0033
0034 #if !(defined(FSL_SDK_DISABLE_DRIVER_CLOCK_CONTROL) && FSL_SDK_DISABLE_DRIVER_CLOCK_CONTROL)
0035
0036 static const clock_ip_name_t s_pitClocks[] = PIT_CLOCKS;
0037 #endif
0038
0039
0040
0041
0042 static uint32_t PIT_GetInstance(PIT_Type *base)
0043 {
0044 uint32_t instance;
0045
0046
0047 for (instance = 0; instance < ARRAY_SIZE(s_pitBases); instance++)
0048 {
0049 if (s_pitBases[instance] == base)
0050 {
0051 break;
0052 }
0053 }
0054
0055 assert(instance < ARRAY_SIZE(s_pitBases));
0056
0057 return instance;
0058 }
0059
0060
0061
0062
0063
0064
0065
0066
0067
0068 void PIT_Init(PIT_Type *base, const pit_config_t *config)
0069 {
0070 assert(NULL != config);
0071
0072 #if !(defined(FSL_SDK_DISABLE_DRIVER_CLOCK_CONTROL) && FSL_SDK_DISABLE_DRIVER_CLOCK_CONTROL)
0073
0074 CLOCK_EnableClock(s_pitClocks[PIT_GetInstance(base)]);
0075 #endif
0076
0077 #if defined(FSL_FEATURE_PIT_HAS_MDIS) && FSL_FEATURE_PIT_HAS_MDIS
0078
0079 base->MCR &= ~PIT_MCR_MDIS_MASK;
0080 #endif
0081
0082 #if defined(FSL_FEATURE_PIT_TIMER_COUNT) && (FSL_FEATURE_PIT_TIMER_COUNT)
0083
0084 for (uint8_t i = 0U; i < (uint32_t)FSL_FEATURE_PIT_TIMER_COUNT; i++)
0085 {
0086 base->CHANNEL[i].TCTRL &= ~(PIT_TCTRL_TEN_MASK | PIT_TCTRL_TIE_MASK | PIT_TCTRL_CHN_MASK);
0087 }
0088 #endif
0089
0090
0091 if (true == config->enableRunInDebug)
0092 {
0093 base->MCR &= ~PIT_MCR_FRZ_MASK;
0094 }
0095 else
0096 {
0097 base->MCR |= PIT_MCR_FRZ_MASK;
0098 }
0099 }
0100
0101
0102
0103
0104
0105
0106 void PIT_Deinit(PIT_Type *base)
0107 {
0108 #if defined(FSL_FEATURE_PIT_HAS_MDIS) && FSL_FEATURE_PIT_HAS_MDIS
0109
0110 base->MCR |= PIT_MCR_MDIS_MASK;
0111 #endif
0112
0113 #if !(defined(FSL_SDK_DISABLE_DRIVER_CLOCK_CONTROL) && FSL_SDK_DISABLE_DRIVER_CLOCK_CONTROL)
0114
0115 CLOCK_DisableClock(s_pitClocks[PIT_GetInstance(base)]);
0116 #endif
0117 }
0118
0119 #if defined(FSL_FEATURE_PIT_HAS_LIFETIME_TIMER) && FSL_FEATURE_PIT_HAS_LIFETIME_TIMER
0120
0121
0122
0123
0124
0125
0126
0127
0128
0129
0130
0131
0132
0133
0134 uint64_t PIT_GetLifetimeTimerCount(PIT_Type *base)
0135 {
0136 uint32_t valueH = 0U;
0137 uint32_t valueL = 0U;
0138
0139
0140 valueH = base->LTMR64H;
0141 valueL = base->LTMR64L;
0142
0143 return (((uint64_t)valueH << 32U) + (uint64_t)(valueL));
0144 }
0145
0146 #endif