123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576 |
- #ifndef _FSL_COMMON_H_
- #define _FSL_COMMON_H_
- #include <assert.h>
- #include <stdbool.h>
- #include <stdint.h>
- #include <string.h>
- #include <stdlib.h>
- #if defined(__ICCARM__)
- #include <stddef.h>
- #endif
- #include "fsl_device_registers.h"
- #define MAKE_STATUS(group, code) ((((group)*100) + (code)))
- #define MAKE_VERSION(major, minor, bugfix) (((major) << 16) | ((minor) << 8) | (bugfix))
- #define FSL_COMMON_DRIVER_VERSION (MAKE_VERSION(2, 0, 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
- 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_MICFIL = 72,
- kStatusGroup_SDMA = 73,
- kStatusGroup_ICS = 74,
- kStatusGroup_SPDIF = 75,
- kStatusGroup_LPC_MINISPI = 76,
- kStatusGroup_NOTIFIER = 98,
- kStatusGroup_DebugConsole = 99,
- kStatusGroup_SEMC = 100,
- kStatusGroup_ApplicationRangeStart = 101,
- };
- enum _generic_status
- {
- 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 = MAKE_STATUS(kStatusGroup_Generic, 6),
- };
- typedef int32_t status_t;
- #include "fsl_clock.h"
- #if ((defined(FSL_FEATURE_SOC_SYSCON_COUNT) && (FSL_FEATURE_SOC_SYSCON_COUNT > 0)) || \
- (defined(FSL_FEATURE_SOC_ASYNC_SYSCON_COUNT) && (FSL_FEATURE_SOC_ASYNC_SYSCON_COUNT > 0)))
- #include "fsl_reset.h"
- #endif
- #ifndef FSL_DRIVER_TRANSFER_DOUBLE_WEAK_IRQ
- #define FSL_DRIVER_TRANSFER_DOUBLE_WEAK_IRQ 1
- #endif
- #if !defined(MIN)
- #define MIN(a, b) ((a) < (b) ? (a) : (b))
- #endif
- #if !defined(MAX)
- #define MAX(a, b) ((a) > (b) ? (a) : (b))
- #endif
- #if !defined(ARRAY_SIZE)
- #define ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0]))
- #endif
- #if !defined(UINT16_MAX)
- #define UINT16_MAX ((uint16_t)-1)
- #endif
- #if !defined(UINT32_MAX)
- #define UINT32_MAX ((uint32_t)-1)
- #endif
- #define USEC_TO_COUNT(us, clockFreqInHz) (uint64_t)((uint64_t)us * clockFreqInHz / 1000000U)
- #define COUNT_TO_USEC(count, clockFreqInHz) (uint64_t)((uint64_t)count * 1000000U / clockFreqInHz)
- #define MSEC_TO_COUNT(ms, clockFreqInHz) (uint64_t)((uint64_t)ms * clockFreqInHz / 1000U)
- #define COUNT_TO_MSEC(count, clockFreqInHz) (uint64_t)((uint64_t)count * 1000U / clockFreqInHz)
- #if (defined(__ICCARM__))
- _Pragma("diag_suppress=Pm120")
- #define SDK_PRAGMA(x) _Pragma(#x)
- _Pragma("diag_error=Pm120")
- #define SDK_ALIGN(var, alignbytes) SDK_PRAGMA(data_alignment = alignbytes) var
- #if defined(FSL_FEATURE_L1DCACHE_LINESIZE_BYTE)
- #define SDK_L1DCACHE_ALIGN(var) SDK_PRAGMA(data_alignment = FSL_FEATURE_L1DCACHE_LINESIZE_BYTE) var
- #endif
- #if defined(FSL_FEATURE_L2CACHE_LINESIZE_BYTE)
- #define SDK_L2CACHE_ALIGN(var) SDK_PRAGMA(data_alignment = FSL_FEATURE_L2CACHE_LINESIZE_BYTE) var
- #endif
- #elif defined(__ARMCC_VERSION)
- #define SDK_ALIGN(var, alignbytes) __align(alignbytes) var
- #if defined(FSL_FEATURE_L1DCACHE_LINESIZE_BYTE)
- #define SDK_L1DCACHE_ALIGN(var) __align(FSL_FEATURE_L1DCACHE_LINESIZE_BYTE) var
- #endif
- #if defined(FSL_FEATURE_L2CACHE_LINESIZE_BYTE)
- #define SDK_L2CACHE_ALIGN(var) __align(FSL_FEATURE_L2CACHE_LINESIZE_BYTE) var
- #endif
- #elif defined(__GNUC__)
- #define SDK_ALIGN(var, alignbytes) var __attribute__((aligned(alignbytes)))
- #if defined(FSL_FEATURE_L1DCACHE_LINESIZE_BYTE)
- #define SDK_L1DCACHE_ALIGN(var) var __attribute__((aligned(FSL_FEATURE_L1DCACHE_LINESIZE_BYTE)))
- #endif
- #if defined(FSL_FEATURE_L2CACHE_LINESIZE_BYTE)
- #define SDK_L2CACHE_ALIGN(var) var __attribute__((aligned(FSL_FEATURE_L2CACHE_LINESIZE_BYTE)))
- #endif
- #else
- #error Toolchain not supported
- #define SDK_ALIGN(var, alignbytes) var
- #if defined(FSL_FEATURE_L1DCACHE_LINESIZE_BYTE)
- #define SDK_L1DCACHE_ALIGN(var) var
- #endif
- #if defined(FSL_FEATURE_L2CACHE_LINESIZE_BYTE)
- #define SDK_L2CACHE_ALIGN(var) var
- #endif
- #endif
- #define SDK_SIZEALIGN(var, alignbytes) \
- ((unsigned int)((var) + ((alignbytes)-1)) & (unsigned int)(~(unsigned int)((alignbytes)-1)))
- #if (defined(__ICCARM__))
- #if defined(FSL_FEATURE_L1ICACHE_LINESIZE_BYTE)
- #define AT_NONCACHEABLE_SECTION(var) var @"NonCacheable"
- #define AT_NONCACHEABLE_SECTION_ALIGN(var, alignbytes) SDK_PRAGMA(data_alignment = alignbytes) var @"NonCacheable"
- #define AT_NONCACHEABLE_SECTION_INIT(var) var @"NonCacheable.init"
- #define AT_NONCACHEABLE_SECTION_ALIGN_INIT(var, alignbytes) SDK_PRAGMA(data_alignment = alignbytes) var @"NonCacheable.init"
- #else
- #define AT_NONCACHEABLE_SECTION(var) var
- #define AT_NONCACHEABLE_SECTION_ALIGN(var, alignbytes) SDK_PRAGMA(data_alignment = alignbytes) var
- #define AT_NONCACHEABLE_SECTION_INIT(var) var
- #define AT_NONCACHEABLE_SECTION_ALIGN_INIT(var, alignbytes) SDK_PRAGMA(data_alignment = alignbytes) var
- #endif
- #elif(defined(__ARMCC_VERSION))
- #if defined(FSL_FEATURE_L1ICACHE_LINESIZE_BYTE)
- #define AT_NONCACHEABLE_SECTION(var) __attribute__((section("NonCacheable"), zero_init)) var
- #define AT_NONCACHEABLE_SECTION_ALIGN(var, alignbytes) \
- __attribute__((section("NonCacheable"), zero_init)) __align(alignbytes) var
- #define AT_NONCACHEABLE_SECTION_INIT(var) __attribute__((section("NonCacheable.init"))) var
- #define AT_NONCACHEABLE_SECTION_ALIGN_INIT(var, alignbytes) \
- __attribute__((section("NonCacheable.init"))) __align(alignbytes) var
- #else
- #define AT_NONCACHEABLE_SECTION(var) var
- #define AT_NONCACHEABLE_SECTION_ALIGN(var, alignbytes) __align(alignbytes) var
- #define AT_NONCACHEABLE_SECTION_INIT(var) var
- #define AT_NONCACHEABLE_SECTION_ALIGN_INIT(var, alignbytes) __align(alignbytes) var
- #endif
- #elif(defined(__GNUC__))
- #if defined(FSL_FEATURE_L1ICACHE_LINESIZE_BYTE)
- #define AT_NONCACHEABLE_SECTION_INIT(var) __attribute__((section("NonCacheable.init"))) var
- #define AT_NONCACHEABLE_SECTION_ALIGN_INIT(var, alignbytes) \
- __attribute__((section("NonCacheable.init"))) var __attribute__((aligned(alignbytes)))
- #define AT_NONCACHEABLE_SECTION(var) __attribute__((section("NonCacheable,\"aw\",%nobits @"))) var
- #define AT_NONCACHEABLE_SECTION_ALIGN(var, alignbytes) \
- __attribute__((section("NonCacheable,\"aw\",%nobits @"))) var __attribute__((aligned(alignbytes)))
- #else
- #define AT_NONCACHEABLE_SECTION(var) var
- #define AT_NONCACHEABLE_SECTION_ALIGN(var, alignbytes) var __attribute__((aligned(alignbytes)))
- #define AT_NONCACHEABLE_SECTION_INIT(var) var
- #define AT_NONCACHEABLE_SECTION_ALIGN_INIT(var, alignbytes) var __attribute__((aligned(alignbytes)))
- #endif
- #else
- #error Toolchain not supported.
- #define AT_NONCACHEABLE_SECTION(var) var
- #define AT_NONCACHEABLE_SECTION_ALIGN(var, alignbytes) var
- #define AT_NONCACHEABLE_SECTION_INIT(var) var
- #define AT_NONCACHEABLE_SECTION_ALIGN_INIT(var, alignbytes) var
- #endif
- #if defined(FSL_SDK_DRIVER_QUICK_ACCESS_ENABLE) && FSL_SDK_DRIVER_QUICK_ACCESS_ENABLE
- #if (defined(__ICCARM__))
- #define AT_QUICKACCESS_SECTION_CODE(func) func @"CodeQuickAccess"
- #define AT_QUICKACCESS_SECTION_DATA(func) func @"DataQuickAccess"
- #elif(defined(__ARMCC_VERSION))
- #define AT_QUICKACCESS_SECTION_CODE(func) __attribute__((section("CodeQuickAccess"))) func
- #define AT_QUICKACCESS_SECTION_DATA(func) __attribute__((section("DataQuickAccess"))) func
- #elif(defined(__GNUC__))
- #define AT_QUICKACCESS_SECTION_CODE(func) __attribute__((section("CodeQuickAccess"))) func
- #define AT_QUICKACCESS_SECTION_DATA(func) __attribute__((section("DataQuickAccess"))) func
- #else
- #error Toolchain not supported.
- #endif
- #else
- #if (defined(__ICCARM__))
- #define AT_QUICKACCESS_SECTION_CODE(func) func
- #define AT_QUICKACCESS_SECTION_DATA(func) func
- #elif(defined(__ARMCC_VERSION))
- #define AT_QUICKACCESS_SECTION_CODE(func) func
- #define AT_QUICKACCESS_SECTION_DATA(func) func
- #elif(defined(__GNUC__))
- #define AT_QUICKACCESS_SECTION_CODE(func) func
- #define AT_QUICKACCESS_SECTION_DATA(func) func
- #else
- #error Toolchain not supported.
- #endif
- #endif
- #if defined(__cplusplus)
- extern "C"
- {
- #endif
-
- static inline status_t EnableIRQ(IRQn_Type interrupt)
- {
- if (NotAvail_IRQn == interrupt)
- {
- return kStatus_Fail;
- }
- #if defined(FSL_FEATURE_NUMBER_OF_LEVEL1_INT_VECTORS) && (FSL_FEATURE_NUMBER_OF_LEVEL1_INT_VECTORS > 0)
- if (interrupt >= FSL_FEATURE_NUMBER_OF_LEVEL1_INT_VECTORS)
- {
- return kStatus_Fail;
- }
- #endif
- #if defined(__GIC_PRIO_BITS)
- GIC_EnableIRQ(interrupt);
- #else
- NVIC_EnableIRQ(interrupt);
- #endif
- return kStatus_Success;
- }
-
- static inline status_t DisableIRQ(IRQn_Type interrupt)
- {
- if (NotAvail_IRQn == interrupt)
- {
- return kStatus_Fail;
- }
- #if defined(FSL_FEATURE_NUMBER_OF_LEVEL1_INT_VECTORS) && (FSL_FEATURE_NUMBER_OF_LEVEL1_INT_VECTORS > 0)
- if (interrupt >= FSL_FEATURE_NUMBER_OF_LEVEL1_INT_VECTORS)
- {
- return kStatus_Fail;
- }
- #endif
- #if defined(__GIC_PRIO_BITS)
- GIC_DisableIRQ(interrupt);
- #else
- NVIC_DisableIRQ(interrupt);
- #endif
- return kStatus_Success;
- }
-
- static inline uint32_t DisableGlobalIRQ(void)
- {
- #if defined(CPSR_I_Msk)
- uint32_t cpsr = __get_CPSR() & CPSR_I_Msk;
- __disable_irq();
- return cpsr;
- #else
- uint32_t regPrimask = __get_PRIMASK();
- __disable_irq();
- return regPrimask;
- #endif
- }
-
- static inline void EnableGlobalIRQ(uint32_t primask)
- {
- #if defined(CPSR_I_Msk)
- __set_CPSR((__get_CPSR() & ~CPSR_I_Msk) | primask);
- #else
- __set_PRIMASK(primask);
- #endif
- }
- #if defined(ENABLE_RAM_VECTOR_TABLE)
-
- uint32_t InstallIRQHandler(IRQn_Type irq, uint32_t irqHandler);
- #endif
- #if (defined(FSL_FEATURE_SOC_SYSCON_COUNT) && (FSL_FEATURE_SOC_SYSCON_COUNT > 0))
-
- void EnableDeepSleepIRQ(IRQn_Type interrupt);
-
- void DisableDeepSleepIRQ(IRQn_Type interrupt);
- #endif
-
-
- void *SDK_Malloc(size_t size, size_t alignbytes);
-
-
-
- void SDK_Free(void *ptr);
- #if defined(__cplusplus)
- }
- #endif
- #endif
|