# MCUXpresso SDK API Reference Manual: Common Driver

All Data Structures Functions Variables Typedefs Enumerations Enumerator Groups Pages
Common Driver

## Overview

The MCUXpresso SDK provides a driver for the common module of MCUXpresso SDK devices.

## Macros

#define | FSL_DRIVER_TRANSFER_DOUBLE_WEAK_IRQ 1
| Macro to use the default weak IRQ handler in drivers. More...
#define | MAKE_STATUS(group, code) ((((group)*100L) + (code)))
| Construct a status code value from a group and code number. More...
#define | MAKE_VERSION(major, minor, bugfix) (((major)*65536L) + ((minor)*256L) + (bugfix))
| Construct the version number for drivers. More...
#define | DEBUG_CONSOLE_DEVICE_TYPE_NONE 0U
| No debug console. More...
#define | DEBUG_CONSOLE_DEVICE_TYPE_UART 1U
| Debug console based on UART. More...
#define | DEBUG_CONSOLE_DEVICE_TYPE_LPUART 2U
| Debug console based on LPUART. More...
#define | DEBUG_CONSOLE_DEVICE_TYPE_LPSCI 3U
| Debug console based on LPSCI. More...
#define | DEBUG_CONSOLE_DEVICE_TYPE_USBCDC 4U
| Debug console based on USBCDC. More...
#define | DEBUG_CONSOLE_DEVICE_TYPE_FLEXCOMM 5U
| Debug console based on FLEXCOMM. More...
#define | DEBUG_CONSOLE_DEVICE_TYPE_IUART 6U
| Debug console based on i.MX UART. More...
#define | DEBUG_CONSOLE_DEVICE_TYPE_VUSART 7U
| Debug console based on LPC_VUSART. More...
#define | DEBUG_CONSOLE_DEVICE_TYPE_MINI_USART 8U
| Debug console based on LPC_USART. More...
#define | DEBUG_CONSOLE_DEVICE_TYPE_SWO 9U
| Debug console based on SWO. More...
#define | DEBUG_CONSOLE_DEVICE_TYPE_QSCI 10U
| Debug console based on QSCI. More...
#define | ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0]))
| Computes the number of elements in an array. More...

## Typedefs

typedef int32_t | status_t
| Type used for all status and error return values. More...

## Enumerations

enum

_status_groups {
kStatusGroup_Generic = 0,
kStatusGroup_FLASH = 1,
kStatusGroup_LPSPI = 4,
kStatusGroup_FLEXIO_SPI = 5,
kStatusGroup_DSPI = 6,
kStatusGroup_FLEXIO_UART = 7,
kStatusGroup_FLEXIO_I2C = 8,
kStatusGroup_LPI2C = 9,
kStatusGroup_UART = 10,
kStatusGroup_I2C = 11,
kStatusGroup_LPSCI = 12,
kStatusGroup_LPUART = 13,
kStatusGroup_SPI = 14,
kStatusGroup_XRDC = 15,
kStatusGroup_SEMA42 = 16,
kStatusGroup_SDHC = 17,
kStatusGroup_SDMMC = 18,
kStatusGroup_SAI = 19,
kStatusGroup_MCG = 20,
kStatusGroup_SCG = 21,
kStatusGroup_SDSPI = 22,
kStatusGroup_FLEXIO_I2S = 23,
kStatusGroup_FLEXIO_MCULCD = 24,
kStatusGroup_FLASHIAP = 25,
kStatusGroup_FLEXCOMM_I2C = 26,
kStatusGroup_I2S = 27,
kStatusGroup_IUART = 28,
kStatusGroup_CSI = 29,
kStatusGroup_MIPI_DSI = 30,
kStatusGroup_SDRAMC = 35,
kStatusGroup_POWER = 39,
kStatusGroup_ENET = 40,
kStatusGroup_PHY = 41,
kStatusGroup_TRGMUX = 42,
kStatusGroup_SMARTCARD = 43,
kStatusGroup_LMEM = 44,
kStatusGroup_QSPI = 45,
kStatusGroup_DMA = 50,
kStatusGroup_EDMA = 51,
kStatusGroup_DMAMGR = 52,
kStatusGroup_FLEXCAN = 53,
kStatusGroup_LTC = 54,
kStatusGroup_FLEXIO_CAMERA = 55,
kStatusGroup_LPC_SPI = 56,
kStatusGroup_LPC_USART = 57,
kStatusGroup_DMIC = 58,
kStatusGroup_SDIF = 59,
kStatusGroup_SPIFI = 60,
kStatusGroup_OTP = 61,
kStatusGroup_MCAN = 62,
kStatusGroup_CAAM = 63,
kStatusGroup_ECSPI = 64,
kStatusGroup_USDHC = 65,
kStatusGroup_LPC_I2C = 66,
kStatusGroup_DCP = 67,
kStatusGroup_MSCAN = 68,
kStatusGroup_ESAI = 69,
kStatusGroup_FLEXSPI = 70,
kStatusGroup_MMDC = 71,
kStatusGroup_PDM = 72,
kStatusGroup_SDMA = 73,
kStatusGroup_ICS = 74,
kStatusGroup_SPDIF = 75,
kStatusGroup_LPC_MINISPI = 76,
kStatusGroup_HASHCRYPT = 77,
kStatusGroup_LPC_SPI_SSP = 78,
kStatusGroup_I3C = 79,
kStatusGroup_LPC_I2C_1 = 97,
kStatusGroup_NOTIFIER = 98,
kStatusGroup_DebugConsole = 99,
kStatusGroup_SEMC = 100,
kStatusGroup_ApplicationRangeStart = 101,
kStatusGroup_IAP = 102,
kStatusGroup_SFA = 103,
kStatusGroup_SPC = 104,
kStatusGroup_PUF = 105,
kStatusGroup_TOUCH_PANEL = 106,
kStatusGroup_VBAT = 107,
kStatusGroup_HAL_GPIO = 121,
kStatusGroup_HAL_UART = 122,
kStatusGroup_HAL_TIMER = 123,
kStatusGroup_HAL_SPI = 124,
kStatusGroup_HAL_I2C = 125,
kStatusGroup_HAL_FLASH = 126,
kStatusGroup_HAL_PWM = 127,
kStatusGroup_HAL_RNG = 128,
kStatusGroup_HAL_I2S = 129,
kStatusGroup_HAL_ADC_SENSOR = 130,
kStatusGroup_TIMERMANAGER = 135,
kStatusGroup_SERIALMANAGER = 136,
kStatusGroup_LED = 137,
kStatusGroup_BUTTON = 138,
kStatusGroup_EXTERN_EEPROM = 139,
kStatusGroup_SHELL = 140,
kStatusGroup_MEM_MANAGER = 141,
kStatusGroup_LIST = 142,
kStatusGroup_OSA = 143,
kStatusGroup_COMMON_TASK = 144,
kStatusGroup_MSG = 145,
kStatusGroup_SDK_OCOTP = 146,
kStatusGroup_SDK_FLEXSPINOR = 147,
kStatusGroup_CODEC = 148,
kStatusGroup_ASRC = 149,
kStatusGroup_OTFAD = 150,
kStatusGroup_SDIOSLV = 151,
kStatusGroup_MECC = 152,
kStatusGroup_ENET_QOS = 153,
kStatusGroup_LOG = 154,
kStatusGroup_I3CBUS = 155,
kStatusGroup_QSCI = 156,
kStatusGroup_SNT = 157,
kStatusGroup_QUEUEDSPI = 158,
kStatusGroup_POWER_MANAGER = 159,
kStatusGroup_IPED = 160,
kStatusGroup_ELS_PKC = 161,
kStatusGroup_CSS_PKC = 162,
kStatusGroup_HOSTIF = 163,
kStatusGroup_CLIF = 164,
kStatusGroup_BMA = 165,
kStatusGroup_NETC = 166
}

| Status group numbers. More...

enum

{
kStatus_Success = MAKE_STATUS(kStatusGroup_Generic, 0),
kStatus_Fail = MAKE_STATUS(kStatusGroup_Generic, 1),
kStatus_ReadOnly = MAKE_STATUS(kStatusGroup_Generic, 2),
kStatus_OutOfRange = MAKE_STATUS(kStatusGroup_Generic, 3),
kStatus_InvalidArgument = MAKE_STATUS(kStatusGroup_Generic, 4),
kStatus_Timeout = MAKE_STATUS(kStatusGroup_Generic, 5),
kStatus_NoTransferInProgress,
kStatus_Busy = MAKE_STATUS(kStatusGroup_Generic, 7),
kStatus_NoData
}

| Generic status return codes. More...

## Functions

void * | SDK_Malloc (size_t size, size_t alignbytes)
| Allocate memory with given alignment and aligned size. More...
void | SDK_Free (void *ptr)
| Free memory. More...
void | SDK_DelayAtLeastUs (uint32_t delayTime_us, uint32_t coreClock_Hz)
| Delay at least for some time. More...
static status_t | EnableIRQ (IRQn_Type interrupt)
| Enable specific interrupt. More...
static status_t | DisableIRQ (IRQn_Type interrupt)
| Disable specific interrupt. More...
static status_t | EnableIRQWithPriority (IRQn_Type interrupt, uint8_t priNum)
| Enable the IRQ, and also set the interrupt priority. More...
static status_t | IRQ_SetPriority (IRQn_Type interrupt, uint8_t priNum)
| Set the IRQ priority. More...
static status_t | IRQ_ClearPendingIRQ (IRQn_Type interrupt)
| Clear the pending IRQ flag. More...
static uint32_t | DisableGlobalIRQ (void)
| Disable the global IRQ. More...
static void | EnableGlobalIRQ (uint32_t primask)
| Enable the global IRQ. More...

## Driver version

#define | FSL_COMMON_DRIVER_VERSION (MAKE_VERSION(2, 4, 0))
| common driver version. More...

## Min/max macros

#define | MIN(a, b) (((a) < (b)) ? (a) : (b))
#define | MAX(a, b) (((a) > (b)) ? (a) : (b))

## UINT16_MAX/UINT32_MAX value

#define | UINT16_MAX ((uint16_t)-1)
#define | UINT32_MAX ((uint32_t)-1)

## Suppress fallthrough warning macro

#define | SUPPRESS_FALL_THROUGH_WARNING()

## Atomic modification

These macros are used for atomic access, such as read-modify-write to the peripheral registers.

- SDK_ATOMIC_LOCAL_ADD
- SDK_ATOMIC_LOCAL_SET
- SDK_ATOMIC_LOCAL_CLEAR
- SDK_ATOMIC_LOCAL_TOGGLE
- SDK_ATOMIC_LOCAL_CLEAR_AND_SET

Take SDK_ATOMIC_LOCAL_CLEAR_AND_SET as an example: the parameter `addr` means the address of the peripheral register or variable you want to modify atomically, the parameter `clearBits` is the bits to clear, the parameter `setBits` it the bits to set. For example, to set a 32-bit register bit1:bit0 to 0b10, use like this:

volatile uint32_t * reg = (volatile uint32_t *)REG_ADDR;
SDK_ATOMIC_LOCAL_CLEAR_AND_SET(reg, 0x03, 0x02);

In this example, the register bit1:bit0 are cleared and bit1 is set, as a result, register bit1:bit0 = 0b10.

Note
  For the platforms don't support exclusive load and store, these macros disable the global interrupt to pretect the modification.
  These macros only guarantee the local processor atomic operations. For the multi-processor devices, use hardware semaphore such as SEMA42 to guarantee exclusive access if necessary.

#define | SDK_ATOMIC_LOCAL_ADD(addr, val)
#define | SDK_ATOMIC_LOCAL_SUB(addr, val)
#define | SDK_ATOMIC_LOCAL_SET(addr, bits)
#define | SDK_ATOMIC_LOCAL_CLEAR(addr, bits)
#define | SDK_ATOMIC_LOCAL_TOGGLE(addr, bits)
#define | SDK_ATOMIC_LOCAL_CLEAR_AND_SET(addr, clearBits, setBits)

## Timer utilities

#define | USEC_TO_COUNT(us, clockFreqInHz) (uint64_t)(((uint64_t)(us) * (clockFreqInHz)) / 1000000U)
| Macro to convert a microsecond period to raw count value.
#define | COUNT_TO_USEC(count, clockFreqInHz) (uint64_t)((uint64_t)(count)*1000000U / (clockFreqInHz))
| Macro to convert a raw count value to microsecond.
#define | MSEC_TO_COUNT(ms, clockFreqInHz) (uint64_t)((uint64_t)(ms) * (clockFreqInHz) / 1000U)
| Macro to convert a millisecond period to raw count value.
#define | COUNT_TO_MSEC(count, clockFreqInHz) (uint64_t)((uint64_t)(count)*1000U / (clockFreqInHz))
| Macro to convert a raw count value to millisecond.

## Alignment variable definition macros

#define | SDK_L1DCACHE_ALIGN(var) SDK_ALIGN(var, FSL_FEATURE_L1DCACHE_LINESIZE_BYTE)
| Macro to define a variable with L1 d-cache line size alignment.
#define | SDK_SIZEALIGN(var, alignbytes) ((unsigned int)((var) + ((alignbytes)-1U)) & (unsigned int)(~(unsigned int)((alignbytes)-1U)))
| Macro to define a variable with L2 cache line size alignment. More...

## Macro Definition Documentation

#define FSL_DRIVER_TRANSFER_DOUBLE_WEAK_IRQ 1

#define MAKE_STATUS | ( |  | group,
|  |  | code
| ) |  | ((((group)*100L) + (code)))

#define MAKE_VERSION | ( |  | major,
|  |  | minor,
|  |  | bugfix
| ) |  | (((major)*65536L) + ((minor)*256L) + (bugfix))

The driver version is a 32-bit number, for both 32-bit platforms(such as Cortex M) and 16-bit platforms(such as DSC).

    | Unused    || Major Version || Minor Version ||  Bug Fix    |
    31        25  24           17  16            9  8            0

#define FSL_COMMON_DRIVER_VERSION (MAKE_VERSION(2, 4, 0))

#define DEBUG_CONSOLE_DEVICE_TYPE_NONE 0U

#define DEBUG_CONSOLE_DEVICE_TYPE_UART 1U

#define DEBUG_CONSOLE_DEVICE_TYPE_LPUART 2U

#define DEBUG_CONSOLE_DEVICE_TYPE_LPSCI 3U

#define DEBUG_CONSOLE_DEVICE_TYPE_USBCDC 4U

#define DEBUG_CONSOLE_DEVICE_TYPE_FLEXCOMM 5U

#define DEBUG_CONSOLE_DEVICE_TYPE_IUART 6U

#define DEBUG_CONSOLE_DEVICE_TYPE_VUSART 7U

#define DEBUG_CONSOLE_DEVICE_TYPE_MINI_USART 8U

#define DEBUG_CONSOLE_DEVICE_TYPE_SWO 9U

#define DEBUG_CONSOLE_DEVICE_TYPE_QSCI 10U

#define ARRAY_SIZE | ( |  | x | ) | (sizeof(x) / sizeof((x)[0]))

#define SDK_SIZEALIGN | ( |  | var,
|  |  | alignbytes
| ) |  | ((unsigned int)((var) + ((alignbytes)-1U)) & (unsigned int)(~(unsigned int)((alignbytes)-1U)))

Macro to change a value to a given size aligned value

## Typedef Documentation

typedef int32_t status_t

## Enumeration Type Documentation

enum _status_groups

Enumerator
kStatusGroup_Generic | Group number for generic status codes.
kStatusGroup_FLASH | Group number for FLASH status codes.
kStatusGroup_LPSPI | Group number for LPSPI status codes.
kStatusGroup_FLEXIO_SPI | Group number for FLEXIO SPI status codes.
kStatusGroup_DSPI | Group number for DSPI status codes.
kStatusGroup_FLEXIO_UART | Group number for FLEXIO UART status codes.
kStatusGroup_FLEXIO_I2C | Group number for FLEXIO I2C status codes.
kStatusGroup_LPI2C | Group number for LPI2C status codes.
kStatusGroup_UART | Group number for UART status codes.
kStatusGroup_I2C | Group number for UART status codes.
kStatusGroup_LPSCI | Group number for LPSCI status codes.
kStatusGroup_LPUART | Group number for LPUART status codes.
kStatusGroup_SPI | Group number for SPI status code.
kStatusGroup_XRDC | Group number for XRDC status code.
kStatusGroup_SEMA42 | Group number for SEMA42 status code.
kStatusGroup_SDHC | Group number for SDHC status code.
kStatusGroup_SDMMC | Group number for SDMMC status code.
kStatusGroup_SAI | Group number for SAI status code.
kStatusGroup_MCG | Group number for MCG status codes.
kStatusGroup_SCG | Group number for SCG status codes.
kStatusGroup_SDSPI | Group number for SDSPI status codes.
kStatusGroup_FLEXIO_I2S | Group number for FLEXIO I2S status codes.
kStatusGroup_FLEXIO_MCULCD | Group number for FLEXIO LCD status codes.
kStatusGroup_FLASHIAP | Group number for FLASHIAP status codes.
kStatusGroup_FLEXCOMM_I2C | Group number for FLEXCOMM I2C status codes.
kStatusGroup_I2S | Group number for I2S status codes.
kStatusGroup_IUART | Group number for IUART status codes.
kStatusGroup_CSI | Group number for CSI status codes.
kStatusGroup_MIPI_DSI | Group number for MIPI DSI status codes.
kStatusGroup_SDRAMC | Group number for SDRAMC status codes.
kStatusGroup_POWER | Group number for POWER status codes.
kStatusGroup_ENET | Group number for ENET status codes.
kStatusGroup_PHY | Group number for PHY status codes.
kStatusGroup_TRGMUX | Group number for TRGMUX status codes.
kStatusGroup_SMARTCARD | Group number for SMARTCARD status codes.
kStatusGroup_LMEM | Group number for LMEM status codes.
kStatusGroup_QSPI | Group number for QSPI status codes.
kStatusGroup_DMA | Group number for DMA status codes.
kStatusGroup_EDMA | Group number for EDMA status codes.
kStatusGroup_DMAMGR | Group number for DMAMGR status codes.
kStatusGroup_FLEXCAN | Group number for FlexCAN status codes.
kStatusGroup_LTC | Group number for LTC status codes.
kStatusGroup_FLEXIO_CAMERA | Group number for FLEXIO CAMERA status codes.
kStatusGroup_LPC_SPI | Group number for LPC_SPI status codes.
kStatusGroup_LPC_USART | Group number for LPC_USART status codes.
kStatusGroup_DMIC | Group number for DMIC status codes.
kStatusGroup_SDIF | Group number for SDIF status codes.
kStatusGroup_SPIFI | Group number for SPIFI status codes.
kStatusGroup_OTP | Group number for OTP status codes.
kStatusGroup_MCAN | Group number for MCAN status codes.
kStatusGroup_CAAM | Group number for CAAM status codes.
kStatusGroup_ECSPI | Group number for ECSPI status codes.
kStatusGroup_USDHC | Group number for USDHC status codes.
kStatusGroup_LPC_I2C | Group number for LPC_I2C status codes.
kStatusGroup_DCP | Group number for DCP status codes.
kStatusGroup_MSCAN | Group number for MSCAN status codes.
kStatusGroup_ESAI | Group number for ESAI status codes.
kStatusGroup_FLEXSPI | Group number for FLEXSPI status codes.
kStatusGroup_MMDC | Group number for MMDC status codes.
kStatusGroup_PDM | Group number for MIC status codes.
kStatusGroup_SDMA | Group number for SDMA status codes.
kStatusGroup_ICS | Group number for ICS status codes.
kStatusGroup_SPDIF | Group number for SPDIF status codes.
kStatusGroup_LPC_MINISPI | Group number for LPC_MINISPI status codes.
kStatusGroup_HASHCRYPT | Group number for Hashcrypt status codes.
kStatusGroup_LPC_SPI_SSP | Group number for LPC_SPI_SSP status codes.
kStatusGroup_I3C | Group number for I3C status codes.
kStatusGroup_LPC_I2C_1 | Group number for LPC_I2C_1 status codes.
kStatusGroup_NOTIFIER | Group number for NOTIFIER status codes.
kStatusGroup_DebugConsole | Group number for debug console status codes.
kStatusGroup_SEMC | Group number for SEMC status codes.
kStatusGroup_ApplicationRangeStart | Starting number for application groups.
kStatusGroup_IAP | Group number for IAP status codes.
kStatusGroup_SFA | Group number for SFA status codes.
kStatusGroup_SPC | Group number for SPC status codes.
kStatusGroup_PUF | Group number for PUF status codes.
kStatusGroup_TOUCH_PANEL | Group number for touch panel status codes.
kStatusGroup_VBAT | Group number for VBAT status codes.
kStatusGroup_HAL_GPIO | Group number for HAL GPIO status codes.
kStatusGroup_HAL_UART | Group number for HAL UART status codes.
kStatusGroup_HAL_TIMER | Group number for HAL TIMER status codes.
kStatusGroup_HAL_SPI | Group number for HAL SPI status codes.
kStatusGroup_HAL_I2C | Group number for HAL I2C status codes.
kStatusGroup_HAL_FLASH | Group number for HAL FLASH status codes.
kStatusGroup_HAL_PWM | Group number for HAL PWM status codes.
kStatusGroup_HAL_RNG | Group number for HAL RNG status codes.
kStatusGroup_HAL_I2S | Group number for HAL I2S status codes.
kStatusGroup_HAL_ADC_SENSOR | Group number for HAL ADC SENSOR status codes.
kStatusGroup_TIMERMANAGER | Group number for TiMER MANAGER status codes.
kStatusGroup_SERIALMANAGER | Group number for SERIAL MANAGER status codes.
kStatusGroup_LED | Group number for LED status codes.
kStatusGroup_BUTTON | Group number for BUTTON status codes.
kStatusGroup_EXTERN_EEPROM | Group number for EXTERN EEPROM status codes.
kStatusGroup_SHELL | Group number for SHELL status codes.
kStatusGroup_MEM_MANAGER | Group number for MEM MANAGER status codes.
kStatusGroup_LIST | Group number for List status codes.
kStatusGroup_OSA | Group number for OSA status codes.
kStatusGroup_COMMON_TASK | Group number for Common task status codes.
kStatusGroup_MSG | Group number for messaging status codes.
kStatusGroup_SDK_OCOTP | Group number for OCOTP status codes.
kStatusGroup_SDK_FLEXSPINOR | Group number for FLEXSPINOR status codes.
kStatusGroup_CODEC | Group number for codec status codes.
kStatusGroup_ASRC | Group number for codec status ASRC.
kStatusGroup_OTFAD | Group number for codec status codes.
kStatusGroup_SDIOSLV | Group number for SDIOSLV status codes.
kStatusGroup_MECC | Group number for MECC status codes.
kStatusGroup_ENET_QOS | Group number for ENET_QOS status codes.
kStatusGroup_LOG | Group number for LOG status codes.
kStatusGroup_I3CBUS | Group number for I3CBUS status codes.
kStatusGroup_QSCI | Group number for QSCI status codes.
kStatusGroup_SNT | Group number for SNT status codes.
kStatusGroup_QUEUEDSPI | Group number for QSPI status codes.
kStatusGroup_POWER_MANAGER | Group number for POWER_MANAGER status codes.
kStatusGroup_IPED | Group number for IPED status codes.
kStatusGroup_ELS_PKC | Group number for ELS PKC status codes.
kStatusGroup_CSS_PKC | Group number for CSS PKC status codes.
kStatusGroup_HOSTIF | Group number for HOSTIF status codes.
kStatusGroup_CLIF | Group number for CLIF status codes.
kStatusGroup_BMA | Group number for BMA status codes.
kStatusGroup_NETC | Group number for NETC status codes.

anonymous enum

Enumerator
kStatus_Success | Generic status for Success.
kStatus_Fail | Generic status for Fail.
kStatus_ReadOnly | Generic status for read only failure.
kStatus_OutOfRange | Generic status for out of range access.
kStatus_InvalidArgument | Generic status for invalid argument check.
kStatus_Timeout | Generic status for timeout.
kStatus_NoTransferInProgress | Generic status for no transfer in progress.
kStatus_Busy | Generic status for module is busy.
kStatus_NoData | Generic status for no data is found for the operation.

## Function Documentation

void* SDK_Malloc | ( | size_t | size,
|  | size_t | alignbytes
| ) |  |

This is provided to support the dynamically allocated memory used in cache-able region.

Parameters

  size | The length required to malloc.
  alignbytes | The alignment size.

Return values

  The | allocated memory.

void SDK_Free | ( | void * | ptr | ) |

Parameters

  ptr | The memory to be release.

void SDK_DelayAtLeastUs | ( | uint32_t | delayTime_us,
|  | uint32_t | coreClock_Hz
| ) |  |

Please note that, this API uses while loop for delay, different run-time environments make the time not precise, if precise delay count was needed, please implement a new delay function with hardware timer.

Parameters

  delayTime_us | Delay time in unit of microsecond.
  coreClock_Hz | Core clock frequency with Hz.

static status_t EnableIRQ | ( | IRQn_Type | interrupt | ) |

inlinestatic

Enable LEVEL1 interrupt. For some devices, there might be multiple interrupt levels. For example, there are NVIC and intmux. Here the interrupts connected to NVIC are the LEVEL1 interrupts, because they are routed to the core directly. The interrupts connected to intmux are the LEVEL2 interrupts, they are routed to NVIC first then routed to core.

This function only enables the LEVEL1 interrupts. The number of LEVEL1 interrupts is indicated by the feature macro FSL_FEATURE_NUMBER_OF_LEVEL1_INT_VECTORS.

Parameters

  interrupt | The IRQ number.

Return values

  kStatus_Success | Interrupt enabled successfully
  kStatus_Fail | Failed to enable the interrupt

static status_t DisableIRQ | ( | IRQn_Type | interrupt | ) |

inlinestatic

Disable LEVEL1 interrupt. For some devices, there might be multiple interrupt levels. For example, there are NVIC and intmux. Here the interrupts connected to NVIC are the LEVEL1 interrupts, because they are routed to the core directly. The interrupts connected to intmux are the LEVEL2 interrupts, they are routed to NVIC first then routed to core.

This function only disables the LEVEL1 interrupts. The number of LEVEL1 interrupts is indicated by the feature macro FSL_FEATURE_NUMBER_OF_LEVEL1_INT_VECTORS.

Parameters

  interrupt | The IRQ number.

Return values

  kStatus_Success | Interrupt disabled successfully
  kStatus_Fail | Failed to disable the interrupt

static status_t EnableIRQWithPriority | ( | IRQn_Type | interrupt,
|  | uint8_t | priNum
| ) |  |

inlinestatic

Only handle LEVEL1 interrupt. For some devices, there might be multiple interrupt levels. For example, there are NVIC and intmux. Here the interrupts connected to NVIC are the LEVEL1 interrupts, because they are routed to the core directly. The interrupts connected to intmux are the LEVEL2 interrupts, they are routed to NVIC first then routed to core.

This function only handles the LEVEL1 interrupts. The number of LEVEL1 interrupts is indicated by the feature macro FSL_FEATURE_NUMBER_OF_LEVEL1_INT_VECTORS.

Parameters

  interrupt | The IRQ to Enable.
  priNum | Priority number set to interrupt controller register.

Return values

  kStatus_Success | Interrupt priority set successfully
  kStatus_Fail | Failed to set the interrupt priority.

static status_t IRQ_SetPriority | ( | IRQn_Type | interrupt,
|  | uint8_t | priNum
| ) |  |

inlinestatic

Only handle LEVEL1 interrupt. For some devices, there might be multiple interrupt levels. For example, there are NVIC and intmux. Here the interrupts connected to NVIC are the LEVEL1 interrupts, because they are routed to the core directly. The interrupts connected to intmux are the LEVEL2 interrupts, they are routed to NVIC first then routed to core.

This function only handles the LEVEL1 interrupts. The number of LEVEL1 interrupts is indicated by the feature macro FSL_FEATURE_NUMBER_OF_LEVEL1_INT_VECTORS.

Parameters

  interrupt | The IRQ to set.
  priNum | Priority number set to interrupt controller register.

Return values

  kStatus_Success | Interrupt priority set successfully
  kStatus_Fail | Failed to set the interrupt priority.

static status_t IRQ_ClearPendingIRQ | ( | IRQn_Type | interrupt | ) |

inlinestatic

Only handle LEVEL1 interrupt. For some devices, there might be multiple interrupt levels. For example, there are NVIC and intmux. Here the interrupts connected to NVIC are the LEVEL1 interrupts, because they are routed to the core directly. The interrupts connected to intmux are the LEVEL2 interrupts, they are routed to NVIC first then routed to core.

This function only handles the LEVEL1 interrupts. The number of LEVEL1 interrupts is indicated by the feature macro FSL_FEATURE_NUMBER_OF_LEVEL1_INT_VECTORS.

Parameters

  interrupt | The flag which IRQ to clear.

Return values

  kStatus_Success | Interrupt priority set successfully
  kStatus_Fail | Failed to set the interrupt priority.

static uint32_t DisableGlobalIRQ | ( | void |  | ) |

inlinestatic

Disable the global interrupt and return the current primask register. User is required to provided the primask register for the EnableGlobalIRQ().

Returns
  Current primask value.

static void EnableGlobalIRQ | ( | uint32_t | primask | ) |

inlinestatic

Set the primask register with the provided primask value but not just enable the primask. The idea is for the convenience of integration of RTOS. some RTOS get its own management mechanism of primask. User is required to use the EnableGlobalIRQ() and DisableGlobalIRQ() in pair.

Parameters

  primask | value of primask register to be restored. The primask value is supposed to be provided by the DisableGlobalIRQ().