]> git.sur5r.net Git - freertos/blobdiff - FreeRTOS/Demo/CORTEX_MPU_M33F_NXP_LPC55S69_MCUXpresso/NXP_Code/drivers/fsl_flexcomm.c
commit 9f316c246baafa15c542a5aea81a94f26e3d6507
[freertos] / FreeRTOS / Demo / CORTEX_MPU_M33F_NXP_LPC55S69_MCUXpresso / NXP_Code / drivers / fsl_flexcomm.c
index 0f86bbfd9c3f15959b51913cc8f8db14dbafd876..28cfb38bd8dfa5d223e98e0055b671413de3796f 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
  * Copyright (c) 2016, Freescale Semiconductor, Inc.\r
- * Copyright 2016-2017 NXP\r
+ * Copyright 2016-2019 NXP\r
  * All rights reserved.\r
  *\r
  * SPDX-License-Identifier: BSD-3-Clause\r
 #define FSL_COMPONENT_ID "platform.drivers.flexcomm"\r
 #endif\r
 \r
+/*!\r
+ * @brief Used for conversion between `void*` and `uint32_t`.\r
+ */\r
+typedef union pvoid_to_u32\r
+{\r
+    void *pvoid;\r
+    uint32_t u32;\r
+} pvoid_to_u32_t;\r
+\r
 /*******************************************************************************\r
  * Prototypes\r
  ******************************************************************************/\r
@@ -66,11 +75,11 @@ static bool FLEXCOMM_PeripheralIsPresent(FLEXCOMM_Type *base, FLEXCOMM_PERIPH_T
     }\r
     else if (periph <= FLEXCOMM_PERIPH_I2S_TX)\r
     {\r
-        return (base->PSELID & (uint32_t)(1 << ((uint32_t)periph + 3))) > (uint32_t)0 ? true : false;\r
+        return (base->PSELID & (1UL << ((uint32_t)periph + 3U))) > 0UL ? true : false;\r
     }\r
     else if (periph == FLEXCOMM_PERIPH_I2S_RX)\r
     {\r
-        return (base->PSELID & (1 << 7)) > (uint32_t)0 ? true : false;\r
+        return (base->PSELID & (1U << 7U)) > (uint32_t)0U ? true : false;\r
     }\r
     else\r
     {\r
@@ -82,18 +91,20 @@ static bool FLEXCOMM_PeripheralIsPresent(FLEXCOMM_Type *base, FLEXCOMM_PERIPH_T
 /*! brief Returns instance number for FLEXCOMM module with given base address. */\r
 uint32_t FLEXCOMM_GetInstance(void *base)\r
 {\r
-    int i;\r
+    uint32_t i;\r
+    pvoid_to_u32_t BaseAddr;\r
+    BaseAddr.pvoid = base;\r
 \r
-    for (i = 0; i < FSL_FEATURE_SOC_FLEXCOMM_COUNT; i++)\r
+    for (i = 0U; i < (uint32_t)FSL_FEATURE_SOC_FLEXCOMM_COUNT; i++)\r
     {\r
-        if ((uint32_t)base == s_flexcommBaseAddrs[i])\r
+        if (BaseAddr.u32 == s_flexcommBaseAddrs[i])\r
         {\r
-            return i;\r
+            break;\r
         }\r
     }\r
 \r
-    assert(false);\r
-    return 0;\r
+    assert(i < FSL_FEATURE_SOC_FLEXCOMM_COUNT);\r
+    return i;\r
 }\r
 \r
 /* Changes FLEXCOMM mode */\r
@@ -106,13 +117,14 @@ static status_t FLEXCOMM_SetPeriph(FLEXCOMM_Type *base, FLEXCOMM_PERIPH_T periph
     }\r
 \r
     /* Flexcomm is locked to different peripheral type than expected  */\r
-    if ((base->PSELID & FLEXCOMM_PSELID_LOCK_MASK) && ((base->PSELID & FLEXCOMM_PSELID_PERSEL_MASK) != periph))\r
+    if (((base->PSELID & FLEXCOMM_PSELID_LOCK_MASK) != 0U) &&\r
+        ((base->PSELID & FLEXCOMM_PSELID_PERSEL_MASK) != (uint32_t)periph))\r
     {\r
         return kStatus_Fail;\r
     }\r
 \r
     /* Check if we are asked to lock */\r
-    if (lock)\r
+    if (lock != 0)\r
     {\r
         base->PSELID = (uint32_t)periph | FLEXCOMM_PSELID_LOCK_MASK;\r
     }\r
@@ -127,12 +139,7 @@ static status_t FLEXCOMM_SetPeriph(FLEXCOMM_Type *base, FLEXCOMM_PERIPH_T periph
 /*! brief Initializes FLEXCOMM and selects peripheral mode according to the second parameter. */\r
 status_t FLEXCOMM_Init(void *base, FLEXCOMM_PERIPH_T periph)\r
 {\r
-    int idx = FLEXCOMM_GetInstance(base);\r
-\r
-    if (idx < 0)\r
-    {\r
-        return kStatus_InvalidArgument;\r
-    }\r
+    uint32_t idx = FLEXCOMM_GetInstance(base);\r
 \r
 #if !(defined(FSL_SDK_DISABLE_DRIVER_CLOCK_CONTROL) && FSL_SDK_DISABLE_DRIVER_CLOCK_CONTROL)\r
     /* Enable the peripheral clock */\r
@@ -159,7 +166,7 @@ void FLEXCOMM_SetIRQHandler(void *base, flexcomm_irq_handler_t handler, void *ha
 \r
     /* Clear handler first to avoid execution of the handler with wrong handle */\r
     s_flexcommIrqHandler[instance] = NULL;\r
-    s_flexcommHandle[instance] = handle;\r
+    s_flexcommHandle[instance]     = handle;\r
     s_flexcommIrqHandler[instance] = handler;\r
 /* Add for ARM errata 838869, affects Cortex-M4, Cortex-M4F Store immediate overlapping\r
   exception return operation might vector to incorrect interrupt */\r
@@ -173,7 +180,7 @@ void FLEXCOMM_SetIRQHandler(void *base, flexcomm_irq_handler_t handler, void *ha
 void FLEXCOMM0_DriverIRQHandler(void)\r
 {\r
     assert(s_flexcommIrqHandler[0]);\r
-    s_flexcommIrqHandler[0]((void *)s_flexcommBaseAddrs[0], s_flexcommHandle[0]);\r
+    s_flexcommIrqHandler[0]((uint32_t *)s_flexcommBaseAddrs[0], s_flexcommHandle[0]);\r
 /* Add for ARM errata 838869, affects Cortex-M4, Cortex-M4F Store immediate overlapping\r
   exception return operation might vector to incorrect interrupt */\r
 #if defined __CORTEX_M && (__CORTEX_M == 4U)\r
@@ -186,7 +193,7 @@ void FLEXCOMM0_DriverIRQHandler(void)
 void FLEXCOMM1_DriverIRQHandler(void)\r
 {\r
     assert(s_flexcommIrqHandler[1]);\r
-    s_flexcommIrqHandler[1]((void *)s_flexcommBaseAddrs[1], s_flexcommHandle[1]);\r
+    s_flexcommIrqHandler[1]((uint32_t *)s_flexcommBaseAddrs[1], s_flexcommHandle[1]);\r
 /* Add for ARM errata 838869, affects Cortex-M4, Cortex-M4F Store immediate overlapping\r
   exception return operation might vector to incorrect interrupt */\r
 #if defined __CORTEX_M && (__CORTEX_M == 4U)\r
@@ -199,7 +206,7 @@ void FLEXCOMM1_DriverIRQHandler(void)
 void FLEXCOMM2_DriverIRQHandler(void)\r
 {\r
     assert(s_flexcommIrqHandler[2]);\r
-    s_flexcommIrqHandler[2]((void *)s_flexcommBaseAddrs[2], s_flexcommHandle[2]);\r
+    s_flexcommIrqHandler[2]((uint32_t *)s_flexcommBaseAddrs[2], s_flexcommHandle[2]);\r
 /* Add for ARM errata 838869, affects Cortex-M4, Cortex-M4F Store immediate overlapping\r
   exception return operation might vector to incorrect interrupt */\r
 #if defined __CORTEX_M && (__CORTEX_M == 4U)\r
@@ -212,7 +219,7 @@ void FLEXCOMM2_DriverIRQHandler(void)
 void FLEXCOMM3_DriverIRQHandler(void)\r
 {\r
     assert(s_flexcommIrqHandler[3]);\r
-    s_flexcommIrqHandler[3]((void *)s_flexcommBaseAddrs[3], s_flexcommHandle[3]);\r
+    s_flexcommIrqHandler[3]((uint32_t *)s_flexcommBaseAddrs[3], s_flexcommHandle[3]);\r
 /* Add for ARM errata 838869, affects Cortex-M4, Cortex-M4F Store immediate overlapping\r
   exception return operation might vector to incorrect interrupt */\r
 #if defined __CORTEX_M && (__CORTEX_M == 4U)\r
@@ -225,7 +232,7 @@ void FLEXCOMM3_DriverIRQHandler(void)
 void FLEXCOMM4_DriverIRQHandler(void)\r
 {\r
     assert(s_flexcommIrqHandler[4]);\r
-    s_flexcommIrqHandler[4]((void *)s_flexcommBaseAddrs[4], s_flexcommHandle[4]);\r
+    s_flexcommIrqHandler[4]((uint32_t *)s_flexcommBaseAddrs[4], s_flexcommHandle[4]);\r
 /* Add for ARM errata 838869, affects Cortex-M4, Cortex-M4F Store immediate overlapping\r
   exception return operation might vector to incorrect interrupt */\r
 #if defined __CORTEX_M && (__CORTEX_M == 4U)\r
@@ -239,7 +246,7 @@ void FLEXCOMM4_DriverIRQHandler(void)
 void FLEXCOMM5_DriverIRQHandler(void)\r
 {\r
     assert(s_flexcommIrqHandler[5]);\r
-    s_flexcommIrqHandler[5]((void *)s_flexcommBaseAddrs[5], s_flexcommHandle[5]);\r
+    s_flexcommIrqHandler[5]((uint32_t *)s_flexcommBaseAddrs[5], s_flexcommHandle[5]);\r
 /* Add for ARM errata 838869, affects Cortex-M4, Cortex-M4F Store immediate overlapping\r
   exception return operation might vector to incorrect interrupt */\r
 #if defined __CORTEX_M && (__CORTEX_M == 4U)\r
@@ -252,7 +259,7 @@ void FLEXCOMM5_DriverIRQHandler(void)
 void FLEXCOMM6_DriverIRQHandler(void)\r
 {\r
     assert(s_flexcommIrqHandler[6]);\r
-    s_flexcommIrqHandler[6]((void *)s_flexcommBaseAddrs[6], s_flexcommHandle[6]);\r
+    s_flexcommIrqHandler[6]((uint32_t *)s_flexcommBaseAddrs[6], s_flexcommHandle[6]);\r
 /* Add for ARM errata 838869, affects Cortex-M4, Cortex-M4F Store immediate overlapping\r
   exception return operation might vector to incorrect interrupt */\r
 #if defined __CORTEX_M && (__CORTEX_M == 4U)\r
@@ -265,7 +272,7 @@ void FLEXCOMM6_DriverIRQHandler(void)
 void FLEXCOMM7_DriverIRQHandler(void)\r
 {\r
     assert(s_flexcommIrqHandler[7]);\r
-    s_flexcommIrqHandler[7]((void *)s_flexcommBaseAddrs[7], s_flexcommHandle[7]);\r
+    s_flexcommIrqHandler[7]((uint32_t *)s_flexcommBaseAddrs[7], s_flexcommHandle[7]);\r
 /* Add for ARM errata 838869, affects Cortex-M4, Cortex-M4F Store immediate overlapping\r
   exception return operation might vector to incorrect interrupt */\r
 #if defined __CORTEX_M && (__CORTEX_M == 4U)\r
@@ -278,7 +285,7 @@ void FLEXCOMM7_DriverIRQHandler(void)
 void FLEXCOMM8_DriverIRQHandler(void)\r
 {\r
     assert(s_flexcommIrqHandler[8]);\r
-    s_flexcommIrqHandler[8]((void *)s_flexcommBaseAddrs[8], s_flexcommHandle[8]);\r
+    s_flexcommIrqHandler[8]((uint32_t *)s_flexcommBaseAddrs[8], s_flexcommHandle[8]);\r
 /* Add for ARM errata 838869, affects Cortex-M4, Cortex-M4F Store immediate overlapping\r
   exception return operation might vector to incorrect interrupt */\r
 #if defined __CORTEX_M && (__CORTEX_M == 4U)\r
@@ -291,7 +298,59 @@ void FLEXCOMM8_DriverIRQHandler(void)
 void FLEXCOMM9_DriverIRQHandler(void)\r
 {\r
     assert(s_flexcommIrqHandler[9]);\r
-    s_flexcommIrqHandler[9]((void *)s_flexcommBaseAddrs[9], s_flexcommHandle[9]);\r
+    s_flexcommIrqHandler[9]((uint32_t *)s_flexcommBaseAddrs[9], s_flexcommHandle[9]);\r
+/* Add for ARM errata 838869, affects Cortex-M4, Cortex-M4F Store immediate overlapping\r
+  exception return operation might vector to incorrect interrupt */\r
+#if defined __CORTEX_M && (__CORTEX_M == 4U)\r
+    __DSB();\r
+#endif\r
+}\r
+#endif\r
+\r
+#if defined(FLEXCOMM10)\r
+void FLEXCOMM10_DriverIRQHandler(void)\r
+{\r
+    assert(s_flexcommIrqHandler[10]);\r
+    s_flexcommIrqHandler[10]((uint32_t *)s_flexcommBaseAddrs[10], s_flexcommHandle[10]);\r
+/* Add for ARM errata 838869, affects Cortex-M4, Cortex-M4F Store immediate overlapping\r
+  exception return operation might vector to incorrect interrupt */\r
+#if defined __CORTEX_M && (__CORTEX_M == 4U)\r
+    __DSB();\r
+#endif\r
+}\r
+#endif\r
+\r
+#if defined(FLEXCOMM11)\r
+void FLEXCOMM11_DriverIRQHandler(void)\r
+{\r
+    assert(s_flexcommIrqHandler[11]);\r
+    s_flexcommIrqHandler[11]((uint32_t *)s_flexcommBaseAddrs[11], s_flexcommHandle[11]);\r
+/* Add for ARM errata 838869, affects Cortex-M4, Cortex-M4F Store immediate overlapping\r
+  exception return operation might vector to incorrect interrupt */\r
+#if defined __CORTEX_M && (__CORTEX_M == 4U)\r
+    __DSB();\r
+#endif\r
+}\r
+#endif\r
+\r
+#if defined(FLEXCOMM12)\r
+void FLEXCOMM12_DriverIRQHandler(void)\r
+{\r
+    assert(s_flexcommIrqHandler[12]);\r
+    s_flexcommIrqHandler[12]((uint32_t *)s_flexcommBaseAddrs[12], s_flexcommHandle[12]);\r
+/* Add for ARM errata 838869, affects Cortex-M4, Cortex-M4F Store immediate overlapping\r
+  exception return operation might vector to incorrect interrupt */\r
+#if defined __CORTEX_M && (__CORTEX_M == 4U)\r
+    __DSB();\r
+#endif\r
+}\r
+#endif\r
+\r
+#if defined(FLEXCOMM13)\r
+void FLEXCOMM13_DriverIRQHandler(void)\r
+{\r
+    assert(s_flexcommIrqHandler[13]);\r
+    s_flexcommIrqHandler[13]((uint32_t *)s_flexcommBaseAddrs[13], s_flexcommHandle[13]);\r
 /* Add for ARM errata 838869, affects Cortex-M4, Cortex-M4F Store immediate overlapping\r
   exception return operation might vector to incorrect interrupt */\r
 #if defined __CORTEX_M && (__CORTEX_M == 4U)\r
@@ -323,7 +382,24 @@ void FLEXCOMM15_DriverIRQHandler(void)
     uint32_t instance;\r
 \r
     /* Look up instance number */\r
-    instance = FLEXCOMM_GetInstance(FLEXCOMM14);\r
+    instance = FLEXCOMM_GetInstance(FLEXCOMM15);\r
+    assert(s_flexcommIrqHandler[instance]);\r
+    s_flexcommIrqHandler[instance]((void *)s_flexcommBaseAddrs[instance], s_flexcommHandle[instance]);\r
+/* Add for ARM errata 838869, affects Cortex-M4, Cortex-M4F Store immediate overlapping\r
+  exception return operation might vector to incorrect interrupt */\r
+#if defined __CORTEX_M && (__CORTEX_M == 4U)\r
+    __DSB();\r
+#endif\r
+}\r
+#endif\r
+\r
+#if defined(FLEXCOMM16)\r
+void FLEXCOMM16_DriverIRQHandler(void)\r
+{\r
+    uint32_t instance;\r
+\r
+    /* Look up instance number */\r
+    instance = FLEXCOMM_GetInstance(FLEXCOMM16);\r
     assert(s_flexcommIrqHandler[instance]);\r
     s_flexcommIrqHandler[instance]((void *)s_flexcommBaseAddrs[instance], s_flexcommHandle[instance]);\r
 /* Add for ARM errata 838869, affects Cortex-M4, Cortex-M4F Store immediate overlapping\r