1 /***************************************************************************//** 2 * \file cy_sysint.h 3 * \version 1.120 4 * 5 * \brief 6 * Provides an API declaration of the SysInt driver 7 * 8 ******************************************************************************** 9 * \copyright 10 * Copyright (c) (2016-2022), Cypress Semiconductor Corporation (an Infineon company) or 11 * an affiliate of Cypress Semiconductor Corporation. 12 * SPDX-License-Identifier: Apache-2.0 13 * 14 * Licensed under the Apache License, Version 2.0 (the "License"); 15 * you may not use this file except in compliance with the License. 16 * You may obtain a copy of the License at 17 * 18 * http://www.apache.org/licenses/LICENSE-2.0 19 * 20 * Unless required by applicable law or agreed to in writing, software 21 * distributed under the License is distributed on an "AS IS" BASIS, 22 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 23 * See the License for the specific language governing permissions and 24 * limitations under the License. 25 *******************************************************************************/ 26 27 /** 28 * \addtogroup group_sysint 29 * \{ 30 * The SysInt driver provides an API to configure the device peripheral interrupts. 31 * It provides a lightweight interface to complement 32 * the <a href="https://www.keil.com/pack/doc/CMSIS/Core/html/group__NVIC__gr.html">CMSIS core NVIC API</a>. 33 * The provided functions are applicable for all cores in a device and they can 34 * be used to configure and connect device peripheral interrupts to one or more 35 * cores. 36 * 37 * The functions and other declarations used in this driver are in cy_sysint.h. 38 * You can include cy_pdl.h to get access to all functions 39 * and declarations in the PDL. 40 * 41 * \section group_sysint_vector_table Vector Table 42 * \subsection group_sysint_CM0_CM4 CM0+/CM4 43 * The vector table defines the entry addresses of the processor exceptions and 44 * the device specific interrupts. It is located at the start address of the flash 45 * and is copied by the startup code to RAM. The symbol code __Vectors is the 46 * address of the vector table in the startup code and the register SCB->VTOR 47 * holds the start address of the vector table. See \ref group_system_config_device_vector_table 48 * section for the implementation details. 49 * The default interrupt handler functions are defined as weak functions to a dummy handler 50 * in the startup file. The naming convention is \<interrupt_name\>_IRQHandler. 51 * 52 * Defining these in the user application allows the linker to place them in 53 * the vector table in flash/ROM. For example: 54 * \code 55 * void ioss_interrupts_gpio_0_IRQHandler(void) 56 * { 57 * ... 58 * } 59 * \endcode 60 * And can be used like this: 61 * \snippet sysint/snippet/main.c snippet_Cy_SysInt_flashVT 62 * Using this method avoids the need for a RAM vector table. However in this scenario, 63 * interrupt handler re-location at run-time is not possible, unless the vector table is 64 * relocated to RAM. 65 * 66 * \subsection group_sysint_CM33 CM33 67 * CM33 with Security extension supports two vector tables, one for secure world and another 68 * for non-secure world. Secure interrupt vector table is placed in the secure ROM/FLASH, where as 69 * non-secure interrupt vector table is placed in the non-secure ROM/FLASH. In both scenarios, 70 * vector tables are copied by the startup code to secure and non-secure RAM respectively. 71 * The symbol code __s_vector_table is the address of the secure vector table and 72 * __ns_vector_table is for the non-secure world in the startup code. The register SCB->VTOR 73 * holds the start address of the vector table. See \ref group_system_config_device_vector_table 74 * section for the implementation details. 75 * 76 * CM33 without Security extension will support only non-secure interrupts. 77 * 78 * The default interrupt handler functions are defined to a dummy handler in the startup file. 79 * The naming convention is \<interrupt_name\>_IRQHandler. 80 * 81 * \subsection group_sysint_CM55 CM55 82 * CM55 is without Security extension and will support only non-secure interrupts. It is similar to CM33 non-secure part. 83 * Additionally CM55 core has support to block EWIC (External Wakeup Interrupt Controller). EWIC is a peripheral to the processor 84 * and it can be a source of wakeup in the system. EWIC block is disabled by default and needs to be enabled in order for the DS 85 * wakeup source to work. 86 * 87 * \subsection group_sysint_CM0_CM7 CAT1C CM0+/CM7 88 * The vector table defines the entry addresses of the processor exceptions and 89 * the device specific interrupts. Interrupt vector table is placed in the ROM/FLASH. The 90 * vector table is copied by the startup code to RAM. The symbol code __ramVectors is the address of the vector table. 91 * The register SCB->VTOR holds the start address of the vector table. See \ref group_system_config_device_vector_table 92 * section for the implementation details. 93 * Each system interrupt has to be mapped onto one out of eight external CPU interrupts. When a system interrupt is triggered, corresponding mapped 94 * CPU IRQ gets triggered which results in the execution of the default CPU IRQ handler. In this handler the system interrupt mapped to this 95 * CPU interrupt will be fetched and executed. 96 * 97 * The default CPU IRQ handler functions are defined as weak functions in the startup file. 98 * The naming convention followed is \<core\>_CpuIntr\<interrupt_number\>_Handler. 99 * Below is the code snippet. 100 * \code 101 * void Interrupt_Handler_Port0(void) 102 * { 103 * ... //User interrupt handler 104 * } 105 * \endcode 106 107 * \snippet sysint/snippet/main.c snippet_Cy_SysInt_Init 108 * 109 * \section group_sysint_driver_usage Driver Usage 110 * 111 * \subsection group_sysint_initialization Initialization 112 * 113 * Interrupt numbers are defined in a device-specific header file, such as 114 * cy8c68237bz_ble.h, and are consistent with interrupt handlers defined in the 115 * vector table. 116 * 117 * To configure an interrupt, call Cy_SysInt_Init(). Populate 118 * the configuration structure (cy_stc_sysint_t) and pass it as a parameter 119 * along with the ISR address. This initializes the interrupt and 120 * instructs the CPU to jump to the specified ISR vector upon a valid trigger. 121 * For CM0+ core, the configuration structure (cy_stc_sysint_t) 122 * must specify the device interrupt source (cm0pSrc) that feeds into the CM0+ NVIC 123 * mux (intrSrc). 124 * 125 * For CM4/CM33/CM55 core, system interrupt source 'n' is connected to the 126 * corresponding IRQn. Deep-sleep capable interrupts are allocated to Deep Sleep 127 * capable IRQn channels. 128 * 129 * For CAT1C CM7/CM0+ core, the configuration structure (cy_stc_sysint_t) must specify 130 * system interrupt source, CPU IRQ and the CPU IRQ priority. The system interrupt source is mapped to bit 0-15 of intrSrc parameter 131 * and CPU IRQ is mapped to bit 16-31 of intrSrc parameter. 132 * 133 * For CM0+ core, deep Sleep wakeup-capability is determined by the CPUSS_CM0_DPSLP_IRQ_NR 134 * parameter, where the first N number of muxes (NvicMux0 ... NvicMuxN-1) have the 135 * capability to trigger Deep Sleep interrupts. A Deep Sleep capable interrupt source 136 * must be connected to one of these muxes to be able to trigger in Deep Sleep. 137 * Refer to the IRQn_Type definition in the device header. 138 * 139 * 1. For CPUSS_ver1 the CM0+ core supports up to 32 interrupt channels (IRQn 0-31). To allow all device 140 * interrupts to be routable to the NVIC of this core, there is a 240:1 multiplexer 141 * at each of the 32 NVIC channels. 142 * 143 * 2. For CPUSS_ver2 the CM0+ core supports up to 8 hardware interrupt channels (IRQn 0-7) and software-only 144 * interrupt channels (IRQn 8-15). The device has up to 1023 interrupts that can be connected to any of the 145 * hardware interrupt channels. In this structure, multiple interrupt sources can be connected 146 * simultaneously to one NVIC channel. The application must then query the interrupt source on the 147 * channel and service the active interrupt(s). The priority of these interrupts is determined by the 148 * interrupt number as defined in the cy_en_intr_t enum, where the lower number denotes higher priority 149 * over the higher number. 150 * 151 * \subsection group_sysint_enable Enable 152 * 153 * After initializing an interrupt, use the CMSIS Core 154 * <a href="https://www.keil.com/pack/doc/CMSIS/Core/html/group__NVIC__gr.html#ga530ad9fda2ed1c8b70e439ecfe80591f">NVIC_EnableIRQ()</a> function 155 * to enable it. Given an initialization structure named config, 156 * the function should be called as follows: 157 * \code 158 * NVIC_EnableIRQ(config.intrSrc) 159 * \endcode 160 * 161 * \subsection group_sysint_service Writing an interrupt service routine 162 * 163 * Servicing interrupts in the Peripheral Drivers should follow a prescribed 164 * recipe to ensure all interrupts are serviced and duplicate interrupts are not 165 * received. Any peripheral-specific register that must be written to clear the 166 * source of the interrupt should be written as soon as possible in the interrupt 167 * service routine. However, note that due to buffering on the output bus to the 168 * peripherals, the write clearing of the interrupt may be delayed. After performing 169 * the normal interrupt service that should respond to the interrupting 170 * condition, the interrupt register that was initially written to clear the 171 * register should be read before returning from the interrupt service routine. 172 * This read ensures that the initial write has been flushed out to the hardware. 173 * Note, no additional processing should be performed based on the result of this 174 * read, as this read is intended only to ensure the write operation is flushed. 175 * 176 * This final read may indicate a pending interrupt. What this means is that in 177 * the interval between when the write actually happened at the peripheral and 178 * when the read actually happened at the peripheral, an interrupting condition 179 * occurred. This is ok and a return from the interrupt is still the correct 180 * action. As soon as conditions warrant, meaning interrupts are enabled and 181 * there are no higher priority interrupts pending, the interrupt will be 182 * triggered again to service the additional condition. 183 * 184 * \section group_sysint_section_configuration_considerations Configuration Considerations 185 * 186 * Certain CM0+ <a href="https://www.keil.com/pack/doc/CMSIS/Core/html/group__NVIC__gr.html#ga7e1129cd8a196f4284d41db3e82ad5c8">NVIC IRQn</a> 187 * channels are reserved for system use: 188 * <table class="doxtable"> 189 * <tr><th>NVIC channel (\ref IRQn_Type)</th><th>Interrupt source (\ref cy_en_intr_t)</th><th>Purpose</th></tr> 190 * <tr><td>#0 (NvicMux0_IRQn)</td><td>IPC Interrupt #0 (cpuss_interrupts_ipc_0_IRQn)</td><td>System Calls to ROM</td></tr> 191 * <tr><td>#1 (NvicMux1_IRQn)</td><td>IPC Interrupt #3 (cpuss_interrupts_ipc_3_IRQn)</td><td>System IPC pipe in the default startup</td></tr> 192 * </table> 193 * 194 * \note For CPUSS_ver2, each NVIC channel can be shared between multiple interrupt sources. 195 * However it is not recommended to share the application NVIC channel with the reserved channels. 196 * 197 * \note In CAT1C, NvicMux0_IRQn and NvicMux1_IRQn are used by ROM and not meant for user. 198 * 199 * \section group_sysint_more_information More Information 200 * 201 * Refer to the technical reference manual (TRM) and the device datasheet. 202 * 203 * \section group_sysint_changelog Changelog 204 * <table class="doxtable"> 205 * <tr><th>Version</th><th>Changes</th><th>Reason for Change</th></tr> 206 * <tr> 207 * <td>1.120</td> 208 * <td>Updated Pre-processor checks.</td> 209 * <td>Code enhancement.</td> 210 * </tr> 211 * <tr> 212 * <td>1.110</td> 213 * <td>Updated API \ref Cy_SysInt_Init.</td> 214 * <td>CM0P interrupt priority bug fix.</td> 215 * </tr> 216 * <tr> 217 * <td>1.100</td> 218 * <td>Added support for TRAVEO™ II Body Entry devices.<br> 219 * Pre-processor check for MXS40SRSS version now groups ver. 2 with ver. 3. Previously ver. 2 was grouped with ver. 1.</td> 220 * Added support for CM0+/CM4 dual core devices. Previously only supported CM0+/CM7 devices.</td> 221 * <td>Code enhancement and support for new devices.</td> 222 * </tr> 223 * <tr> 224 * <td>1.90.1</td> 225 * <td>Fixed MISRA 2012 8.5 and 8.6 violations.</td> 226 * <td>MISRA 2012 compliance..</td> 227 * </tr> 228 * <tr> 229 * <td>1.90</td> 230 * <td>Updated \ref Cy_SysInt_Init, \ref Cy_SysInt_SetVector and \ref Cy_SysInt_GetVector APIs.</td> 231 * <td>Code Clean up.</td> 232 * </tr> 233 * <tr> 234 * <td>1.80</td> 235 * <td>API's Cy_SysInt_SetInterruptSource(), Cy_SysInt_GetInterruptSource(), Cy_SysInt_DisconnectInterruptSource(), 236 * Cy_SysInt_SetNmiSource(), Cy_SysInt_GetNmiSource(), Cy_SysInt_SoftwareTrig(), Cy_SysInt_GetNvicConnection(), 237 * Cy_SysInt_GetInterruptActive(), Cy_SysInt_InitExtIRQ(), Cy_SysInt_InitIntIRQ(), Cy_SysInt_Init(), 238 * Cy_SysInt_SetVector(), Cy_SysInt_GetVector(), Cy_SysInt_SetSystemIrqVector(), Cy_SysInt_EnableSystemInt(), Cy_SysInt_DisableSystemInt() 239 * modified.</td> 240 * <td>New device support, Fix Coverity issues, Documentation enhancement.</td> 241 * </tr> 242 * <tr> 243 * <td>1.70</td> 244 * <td>Support for CAT1C, CAT1D.<br>Newly added API's Cy_SysInt_SetSystemIrqVector() to set the user ISR vector for the System Interrupt, 245 * Cy_SysInt_GetSystemIrqVector() to get the address of the current user ISR vector for the System Interrupt, 246 * Cy_SysInt_EnableSystemInt() to enable system interrupt, Cy_SysInt_DisableSystemInt() to disable system interrupt, 247 * Cy_SysInt_InitExtIRQ() to initialize the referenced external interrupt by setting the CPU IRQ priority and the interrupt vector, 248 * Cy_SysInt_InitIntIRQ() to initialize the referenced internal interrupt by setting the priority and the interrupt vector.</td> 249 * <td>New devices support.</td> 250 * </tr> 251 252 * <tr> 253 * <td>1.60</td> 254 * <td>Support for CM33.</td> 255 * <td>New devices support.</td> 256 * </tr> 257 * <tr> 258 * <td>1.50</td> 259 * <td>Fixed MISRA 2012 violations.</td> 260 * <td>MISRA 2012 compliance.</td> 261 * </tr> 262 * <tr> 263 * <td>1.40</td> 264 * <td>Updated the CY_SYSINT_IS_PC_0 macro to access the protected register 265 * for the secure CYB06xx7 devices via \ref group_pra driver. 266 * </td> 267 * <td>Added PSoC 64 devices support.</td> 268 * </tr> 269 * <tr> 270 * <td>1.30.1</td> 271 * <td>Minor documentation updates.</td> 272 * <td>Documentation enhancement.</td> 273 * </tr> 274 * <tr> 275 * <td>1.30</td> 276 * <td>The Cy_SysInt_SetNmiSource is updated with Protection Context check for CM0+.</td> 277 * <td>User experience enhancement.</td> 278 * </tr> 279 * <tr> 280 * <td>1.20.1</td> 281 * <td>The Vector Table section is extended with a code snippet.</td> 282 * <td>Documentation enhancement.</td> 283 * </tr> 284 * <tr> 285 * <td rowspan="3">1.20</td> 286 * <td>Flattened the organization of the driver source code into the single source directory and the single include directory.</td> 287 * <td>Driver library directory-structure simplification.</td> 288 * </tr> 289 * <tr> 290 * <td>Added CPUSS_ver2 support to the following API functions: 291 * - \ref Cy_SysInt_SetInterruptSource 292 * - \ref Cy_SysInt_SetNmiSource 293 * - \ref Cy_SysInt_GetNmiSource 294 * 295 * Added new API functions: 296 * - \ref Cy_SysInt_DisconnectInterruptSource 297 * - \ref Cy_SysInt_GetNvicConnection 298 * - \ref Cy_SysInt_GetInterruptActive 299 * 300 * Deprecated following functions: 301 * - Cy_SysInt_SetIntSource 302 * - Cy_SysInt_GetIntSource 303 * - Cy_SysInt_SetIntSourceNMI 304 * - Cy_SysInt_GetIntSourceNMI 305 * </td> 306 * <td>New devices support.</td> 307 * </tr> 308 * <tr> 309 * <td>Added register access layer. Use register access macros instead 310 * of direct register access using dereferenced pointers.</td> 311 * <td>Makes register access device-independent, so that the PDL does 312 * not need to be recompiled for each supported part number.</td> 313 * </tr> 314 * <tr> 315 * <td>1.10</td> 316 * <td>Cy_SysInt_GetState() function is redefined to call NVIC_GetEnableIRQ()</td> 317 * <td></td> 318 * </tr> 319 * <tr> 320 * <td>1.0</td> 321 * <td>Initial version</td> 322 * <td></td> 323 * </tr> 324 * </table> 325 * 326 * \defgroup group_sysint_macros Macros 327 * \defgroup group_sysint_globals Global variables 328 * \defgroup group_sysint_functions Functions 329 * \defgroup group_sysint_data_structures Data Structures 330 * \defgroup group_sysint_enums Enumerated Types 331 */ 332 333 334 #if !defined (CY_SYSINT_H) 335 #define CY_SYSINT_H 336 337 #include "cy_device.h" 338 339 #if defined (CY_IP_M33SYSCPUSS) || defined (CY_IP_M4CPUSS) || defined (CY_IP_M7CPUSS) || defined(CY_IP_M55APPCPUSS) 340 341 #include <stddef.h> 342 #include "cy_syslib.h" 343 #if defined(CY_DEVICE_SECURE) && defined(CY_DEVICE_PSOC6ABLE2) 344 #include "cy_pra.h" 345 #endif /* defined(CY_DEVICE_SECURE) && defined(CY_DEVICE_PSOC6ABLE2) */ 346 #include "cy_device_headers.h" 347 348 #if defined(__cplusplus) 349 extern "C" { 350 #endif 351 352 /*************************************** 353 * Global Variable 354 ***************************************/ 355 356 /** 357 * \addtogroup group_sysint_globals 358 * \{ 359 */ 360 361 #if defined (CY_IP_M4CPUSS) || defined (CY_IP_M7CPUSS) 362 CY_MISRA_DEVIATE_BLOCK_START('MISRA C-2012 Rule 8.6', 2, \ 363 'Coverity does not check the .S assembly files, the definition is a part of startup_psoc6_04_cm4.s file.') 364 extern const cy_israddress __Vectors[]; /**< Vector table in flash */ 365 extern cy_israddress __ramVectors[]; /**< Relocated vector table in SRAM */ 366 CY_MISRA_BLOCK_END('MISRA C-2012 Rule 8.6') 367 368 #endif /* defined (CY_IP_M4CPUSS) || defined (CY_IP_M7CPUSS) */ 369 /** \} group_sysint_globals */ 370 371 372 /*************************************** 373 * Global Interrupt 374 ***************************************/ 375 376 /** 377 * \addtogroup group_sysint_macros 378 * \{ 379 */ 380 381 /** Driver major version */ 382 #define CY_SYSINT_DRV_VERSION_MAJOR 1 383 384 /** Driver minor version */ 385 #define CY_SYSINT_DRV_VERSION_MINOR 120 386 387 /** SysInt driver ID */ 388 #define CY_SYSINT_ID CY_PDL_DRV_ID (0x15U) 389 390 /** \} group_sysint_macros */ 391 392 393 /*************************************** 394 * Enumeration 395 ***************************************/ 396 397 /** 398 * \addtogroup group_sysint_enums 399 * \{ 400 */ 401 402 /** 403 * SysInt Driver error codes 404 */ 405 typedef enum 406 { 407 CY_SYSINT_SUCCESS = 0x0UL, /**< Returned successful */ 408 CY_SYSINT_BAD_PARAM = CY_SYSINT_ID | CY_PDL_STATUS_ERROR | 0x1UL, /**< Bad parameter was passed */ 409 } cy_en_sysint_status_t; 410 411 /** NMI connection input */ 412 typedef enum 413 { 414 CY_SYSINT_NMI1 = 1UL, /**< NMI source input 1 */ 415 CY_SYSINT_NMI2 = 2UL, /**< NMI source input 2 */ 416 CY_SYSINT_NMI3 = 3UL, /**< NMI source input 3 */ 417 CY_SYSINT_NMI4 = 4UL, /**< NMI source input 4 */ 418 } cy_en_sysint_nmi_t; 419 420 /** \} group_sysint_enums */ 421 422 423 /*************************************** 424 * Configuration Structure 425 ***************************************/ 426 427 /** 428 * \addtogroup group_sysint_data_structures 429 * \{ 430 */ 431 432 /** 433 * Initialization configuration structure for a single interrupt channel 434 */ 435 typedef struct { 436 #if defined (CY_IP_M7CPUSS) 437 uint32_t intrSrc; /**< Bit 0-15 indicate system interrupt and bit 16-31 will indicate the CPU IRQ */ 438 #else 439 IRQn_Type intrSrc; /**< Interrupt source */ 440 #endif 441 #if (CY_CPU_CORTEX_M0P) && defined (CY_IP_M4CPUSS) 442 cy_en_intr_t cm0pSrc; /**< Maps cm0pSrc device interrupt to intrSrc */ 443 #endif /* CY_CPU_CORTEX_M0P */ 444 uint32_t intrPriority; /**< Interrupt priority number (Refer to __NVIC_PRIO_BITS) */ 445 } cy_stc_sysint_t; 446 447 /** \} group_sysint_data_structures */ 448 449 #if defined (CY_IP_M7CPUSS) 450 #define CY_SYSINT_INTRSRC_MASK (0xFFFFUL) /**< Bit 0-15 indicate system interrupt and bit 16-31 will indicate the CPU IRQ */ 451 #define CY_SYSINT_INTRSRC_MUXIRQ_SHIFT (16UL) /**< Bit 0-15 indicate system interrupt and bit 16-31 will indicate the CPU IRQ */ 452 #else /* Applicable for Mux'ed IRQ CM4 interrupts */ 453 #define CY_SYSINT_INTRSRC_MASK (0x0FFFUL) /**< Bit 0-11 indicate system interrupt and bit 12-15 will indicate the CPU IRQ */ 454 #define CY_SYSINT_INTRSRC_MUXIRQ_SHIFT (12UL) /**< Bit 0-11 indicate system interrupt and bit 12-15 will indicate the CPU IRQ */ 455 #endif /* defined (CY_IP_M7CPUSS) */ 456 457 458 /*************************************** 459 * Constants 460 ***************************************/ 461 462 /** \cond INTERNAL */ 463 464 #define CY_INT_IRQ_BASE (16U) /**< Start location of interrupts in the vector table */ 465 #define CY_SYSINT_STATE_MASK (1UL) /**< Mask for interrupt state */ 466 #define CY_SYSINT_STIR_MASK (0xFFUL) /**< Mask for software trigger interrupt register */ 467 #define CY_SYSINT_DISABLE (0UL) /**< Disable interrupt */ 468 #define CY_SYSINT_ENABLE (1UL) /**< Enable interrupt */ 469 #define CY_SYSINT_INT_STATUS_MSK (0x7UL) 470 471 #if defined (CY_IP_M4CPUSS) 472 /*(CY_IP_M4CPUSS_VERSION == 1u) */ 473 #define CY_SYSINT_CM0P_MUX_MASK (0xFFUL) /**< CM0+ NVIC multiplexer mask */ 474 #define CY_SYSINT_CM0P_MUX_SHIFT (2U) /**< CM0+ NVIC multiplexer shift */ 475 #define CY_SYSINT_CM0P_MUX_SCALE (3U) /**< CM0+ NVIC multiplexer scaling value */ 476 #define CY_SYSINT_CM0P_MUX0 (0U) /**< CM0+ NVIC multiplexer register 0 */ 477 #define CY_SYSINT_CM0P_MUX1 (1U) /**< CM0+ NVIC multiplexer register 1 */ 478 #define CY_SYSINT_CM0P_MUX2 (2U) /**< CM0+ NVIC multiplexer register 2 */ 479 #define CY_SYSINT_CM0P_MUX3 (3U) /**< CM0+ NVIC multiplexer register 3 */ 480 #define CY_SYSINT_CM0P_MUX4 (4U) /**< CM0+ NVIC multiplexer register 4 */ 481 #define CY_SYSINT_CM0P_MUX5 (5U) /**< CM0+ NVIC multiplexer register 5 */ 482 #define CY_SYSINT_CM0P_MUX6 (6U) /**< CM0+ NVIC multiplexer register 6 */ 483 #define CY_SYSINT_CM0P_MUX7 (7U) /**< CM0+ NVIC multiplexer register 7 */ 484 #define CY_SYSINT_MUX_REG_MSK (0x7UL) 485 #endif /* CY_IP_M4CPUSS */ 486 487 /* Parameter validation macros */ 488 #define CY_SYSINT_IS_PRIORITY_VALID(intrPriority) ((uint32_t)(1UL << __NVIC_PRIO_BITS) > (intrPriority)) 489 #define CY_SYSINT_IS_VECTOR_VALID(userIsr) (NULL != (userIsr)) 490 #define CY_SYSINT_IS_NMI_NUM_VALID(nmiNum) (((nmiNum) == CY_SYSINT_NMI1) || \ 491 ((nmiNum) == CY_SYSINT_NMI2) || \ 492 ((nmiNum) == CY_SYSINT_NMI3) || \ 493 ((nmiNum) == CY_SYSINT_NMI4)) 494 #if defined (CY_IP_M4CPUSS) 495 #if CY_CPU_CORTEX_M4 && defined(CY_DEVICE_SECURE) && defined(CY_DEVICE_PSOC6ABLE2) 496 #define CY_SYSINT_IS_PC_0 (0UL == _FLD2VAL(PROT_MPU_MS_CTL_PC, \ 497 CY_PRA_REG32_GET(CY_PRA_INDX_PROT_MPU_MS_CTL))) 498 #else 499 #define CY_SYSINT_IS_PC_0 (0UL == _FLD2VAL(PROT_MPU_MS_CTL_PC, PROT_MPU_MS_CTL(0U))) 500 #endif 501 #endif /* CY_IP_M4CPUSS */ 502 /** \endcond */ 503 504 505 /*************************************** 506 * Function Prototypes 507 ***************************************/ 508 509 /** 510 * \addtogroup group_sysint_functions 511 * \{ 512 */ 513 514 515 /******************************************************************************* 516 * Function Name: Cy_SysInt_Init 517 ****************************************************************************//** 518 * 519 * \brief Initializes the referenced interrupt by setting the priority and the 520 * interrupt vector. 521 * In case of CM33 with Security Extension enabled, if this function is called 522 * from secure world then, the parameters are used to configure secure interrupt. 523 * If it is called form non-secure world then the parameters are used to configure 524 * non-secure interrupt. In case of CM33 without Security Extension, this function 525 * always configures the non-secure interrupt. 526 * In case of CM55, this function always configures the non-secure interrupt. 527 * In case of CM7/CM0+ it initializes the external system interrupt, maps it to CPU interrupt and 528 * registers the User ISR vector for the System Interrupt. 529 * 530 * Use the CMSIS core function NVIC_EnableIRQ(config.intrSrc) to enable the interrupt. 531 * 532 * \param config 533 * Interrupt configuration structure 534 * 535 * \param userIsr 536 * Address of the ISR 537 * 538 * \return 539 * Initialization status 540 * 541 * \note CM0+/CM4 <br/> 542 * The interrupt vector will be relocated only if the vector table was 543 * moved to __ramVectors in SRAM. Otherwise it is ignored. 544 * 545 * \note CM33<br/> 546 * The interrupt vector will be relocated only if the vector table was 547 * moved to __s_vector_table_rw and __ns_vector_table_rw for secure and 548 * non-secure world respectively. 549 * 550 * \note CM55<br/> 551 * The interrupt vector will be relocated only if the vector table was 552 * moved to __ns_vector_table_rw non-secure world. 553 * 554 * \funcusage 555 * \snippet sysint/snippet/main.c snippet_Cy_SysInt_Init 556 * 557 *******************************************************************************/ 558 cy_en_sysint_status_t Cy_SysInt_Init(const cy_stc_sysint_t* config, cy_israddress userIsr); 559 560 561 /******************************************************************************* 562 * Function Name: Cy_SysInt_SetVector 563 ****************************************************************************//** 564 * 565 * \brief Changes the ISR vector for the interrupt. 566 * 567 * CM0+/CM4 (non-TVIIBE):<br/> 568 * This function relies on the assumption that the vector table is 569 * relocated to __ramVectors[RAM_VECTORS_SIZE] in SRAM. Otherwise it will 570 * return the address of the default ISR location in the flash vector table. 571 * 572 * CM0+/CM7 and TVIIBE CM0+/CM4:<br/> 573 * This function relies on the assumption that the vector table is 574 * relocated to __ramVectors[RAM_VECTORS_SIZE] in SRAM. Otherwise it will 575 * return the address of the default ISR location in the flash vector table. 576 * This function is applicable only to User Interrupts (NvicMux0_IRQn - NvicMux7_IRQn) 577 * and System Interrupts (Internal0_IRQn - Internal0_IRQn). 578 * 579 * CM33:<br/> 580 * When called from secure world. this function relies on the assumption that the 581 * vector table is relocated to __s_vector_table_rw[] in secure SRAM. Otherwise it will 582 * return the address of the default ISR location in the secure flash/ROM vector table. 583 * 584 * When called from non-secure world. this function relies on the assumption that 585 * the vector table is relocated to __ns_vector_table_rw[] in non-secure SRAM. 586 * Otherwise it will return the address of the default ISR location in the non-secure 587 * flash/ROM vector table. 588 * 589 * CM55:<br/> 590 * This function relies on the assumption that 591 * the vector table is relocated to __ns_vector_table_rw[] in non-secure SRAM. 592 * Otherwise it will return the address of the default ISR location in the non-secure 593 * flash/ROM vector table. 594 * 595 * Use the CMSIS core function NVIC_EnableIRQ(config.intrSrc) to enable the interrupt. 596 * \param IRQn 597 * Interrupt source 598 * 599 * \param userIsr 600 * Address of the ISR to set in the interrupt vector table 601 * 602 * \return 603 * Previous address of the ISR in the interrupt vector table 604 * 605 * \note For CM0+, this function sets the interrupt vector for the interrupt 606 * channel on the NVIC. 607 * 608 * \note In case of CM33 with Security Extension enabled, if this function is called 609 * from secure world then, it sets the interrupt vector for the secure world. 610 * If it is called form non-secure world then it sets the interrupt vector for the 611 * non-secure world. 612 * 613 * \funcusage 614 * \snippet sysint/snippet/main.c snippet_Cy_SysInt_SetVector 615 * 616 *******************************************************************************/ 617 cy_israddress Cy_SysInt_SetVector(IRQn_Type IRQn, cy_israddress userIsr); 618 619 620 /******************************************************************************* 621 * Function Name: Cy_SysInt_GetVector 622 ****************************************************************************//** 623 * 624 * \brief Gets the address of the current ISR vector for the interrupt. 625 * 626 * CM0+/CM4:<br/> 627 * This function relies on the assumption that the vector table is 628 * relocated to __ramVectors[RAM_VECTORS_SIZE] in SRAM. Otherwise it will 629 * return the address of the default ISR location in the flash vector table. 630 * 631 * CM0+/CM7:<br/> 632 * This function relies on the assumption that the vector table is 633 * relocated to __ramVectors[RAM_VECTORS_SIZE] in SRAM. Otherwise it will 634 * return the address of the default ISR location in the flash vector table. 635 * This function is applicable only to User Interrupts (NvicMux0_IRQn - NvicMux7_IRQn) 636 * and System Interrupts (Internal0_IRQn - Internal0_IRQn). 637 * 638 * CM33:<br/> 639 * When called from the secure world, this function relies on the assumption that 640 * the vector table is relocated to __ns_vector_table_rw[] in non-secure SRAM. 641 * Otherwise it will return the address of the default ISR location in the 642 * flash/ROM vector table. 643 * 644 * CM55:<br/> 645 * This function relies on the assumption that 646 * the vector table is relocated to __ns_vector_table_rw[] in non-secure SRAM. 647 * Otherwise it will return the address of the default ISR location in the 648 * flash/ROM vector table. 649 * 650 * \param IRQn 651 * Interrupt source 652 * 653 * \return 654 * Address of the ISR in the interrupt vector table 655 * 656 * \note CM0+:<br/> This function returns the interrupt vector for the interrupt 657 * channel on the NVIC. 658 * 659 * \note CM33:<br/>In case of CM33 with Security Extension enabled, if this function is called 660 * from secure world then, it returns the interrupt vector for the secure world. 661 * If it is called form non-secure world then it returns the interrupt vector 662 * for the non-secure world. 663 * 664 * \funcusage 665 * \snippet sysint/snippet/main.c snippet_Cy_SysInt_SetVector 666 * 667 *******************************************************************************/ 668 cy_israddress Cy_SysInt_GetVector(IRQn_Type IRQn); 669 670 671 #if (((CY_CPU_CORTEX_M0P) || defined (CY_IP_M7CPUSS) || (defined (CY_IP_M4CPUSS) && (CY_IP_M4CPUSS_VERSION == 2) && (CPUSS_SYSTEM_IRQ_PRESENT)) || defined (CY_DOXYGEN)) && !defined(CY_IP_M0SECCPUSS)) 672 /******************************************************************************* 673 * Function Name: Cy_SysInt_SetInterruptSource 674 ****************************************************************************//** 675 * 676 * \brief Configures the interrupt selection for the specified NVIC channel. 677 * 678 * To disconnect the interrupt source from the NVIC channel 679 * use the \ref Cy_SysInt_DisconnectInterruptSource. 680 * 681 * \param IRQn 682 * NVIC channel number connected to the CPU core. 683 * 684 * \param devIntrSrc 685 * Device interrupt to be routed to the NVIC channel. 686 * 687 * \note This function is available for CM0+/CM7 core only. 688 * 689 * \funcusage 690 * \snippet sysint/snippet/main.c snippet_Cy_SysInt_SetInterruptSource 691 * 692 *******************************************************************************/ 693 void Cy_SysInt_SetInterruptSource(IRQn_Type IRQn, cy_en_intr_t devIntrSrc); 694 695 #if (defined (CY_IP_M4CPUSS) && (CY_CPU_CORTEX_M0P)) || defined (CY_DOXYGEN) 696 /******************************************************************************* 697 * Function Name: Cy_SysInt_GetInterruptSource 698 ****************************************************************************//** 699 * 700 * \brief Gets the interrupt source of the NVIC channel. 701 * 702 * \param IRQn 703 * NVIC channel number connected to the CPU core 704 * 705 * \return 706 * Device interrupt connected to the NVIC channel. A returned value of 707 * "disconnected_IRQn" indicates that the interrupt source is disconnected. 708 * 709 * \note This function is available for CM0+ core only. 710 * 711 * \note This function supports only devices using CPUSS_ver1. For all 712 * other devices, use the Cy_SysInt_GetNvicConnection() function. 713 * 714 * \funcusage 715 * \snippet sysint/snippet/main.c snippet_Cy_SysInt_SetInterruptSource 716 * 717 *******************************************************************************/ 718 cy_en_intr_t Cy_SysInt_GetInterruptSource(IRQn_Type IRQn); 719 #endif 720 721 /******************************************************************************* 722 * Function Name: Cy_SysInt_GetNvicConnection 723 ****************************************************************************//** 724 * 725 * \brief Gets the NVIC channel to which the interrupt source is connected. 726 * 727 * \param devIntrSrc 728 * Device interrupt that is potentially connected to the NVIC channel. 729 * 730 * \return 731 * NVIC channel number connected to the CPU core. A returned value of 732 * "unconnected_IRQn" indicates that the interrupt source is disabled. 733 * 734 * \note This function is available for CM0+/CM7 core only. 735 * 736 * \note This function supports only devices using CPUSS_ver2 or higher. 737 * 738 * \funcusage 739 * \snippet sysint/snippet/main.c snippet_Cy_SysInt_SetInterruptSource 740 * 741 *******************************************************************************/ 742 IRQn_Type Cy_SysInt_GetNvicConnection(cy_en_intr_t devIntrSrc); 743 744 745 /******************************************************************************* 746 * Function Name: Cy_SysInt_GetInterruptActive 747 ****************************************************************************//** 748 * 749 * \brief Gets the highest priority active interrupt for the selected NVIC channel. 750 * 751 * The priority of the interrupt in a given channel is determined by the index 752 * value of the interrupt in the cy_en_intr_t enum. The lower the index, the 753 * higher the priority. E.g. Consider a case where an interrupt source with value 754 * 29 and an interrupt source with value 46 both source the same NVIC channel. If 755 * both are active (triggered) at the same time, calling Cy_SysInt_GetInterruptActive() 756 * will return 29 as the active interrupt. 757 * 758 * \param IRQn 759 * NVIC channel number connected to the CPU core 760 * 761 * \return 762 * Device interrupt connected to the NVIC channel. A returned value of 763 * "disconnected_IRQn" indicates that there are no active (pending) interrupts 764 * on this NVIC channel. 765 * 766 * \note This function is available for CM0+/CM7 core only. 767 * 768 * \note This function supports only devices using CPUSS_ver2 or higher. 769 * 770 * \funcusage 771 * \snippet sysint/snippet/main.c snippet_Cy_SysInt_GetInterruptActive 772 * 773 *******************************************************************************/ 774 cy_en_intr_t Cy_SysInt_GetInterruptActive(IRQn_Type IRQn); 775 #endif 776 777 778 #if defined(CY_IP_M4CPUSS) && (CY_CPU_CORTEX_M0P) || defined (CY_DOXYGEN) 779 /******************************************************************************* 780 * Function Name: Cy_SysInt_DisconnectInterruptSource 781 ****************************************************************************//** 782 * 783 * \brief Disconnect the interrupt source from the specified NVIC channel. 784 * 785 * \param IRQn 786 * NVIC channel number connected to the CPU core. 787 * This parameter is ignored for devices using CPUSS_ver2. 788 * 789 * \param devIntrSrc 790 * Device interrupt routed to the NVIC channel. 791 * This parameter is ignored for devices using CPUSS_ver1. 792 * 793 * \note This function is available for CM0+ core only. 794 * 795 * \funcusage 796 * \snippet sysint/snippet/main.c snippet_Cy_SysInt_DisconnectInterruptSource 797 * 798 *******************************************************************************/ 799 void Cy_SysInt_DisconnectInterruptSource(IRQn_Type IRQn, cy_en_intr_t devIntrSrc); 800 #endif 801 802 #if defined (CY_IP_M7CPUSS) || (defined (CY_IP_M4CPUSS) && (CY_IP_M4CPUSS_VERSION == 2u) && (CPUSS_SYSTEM_IRQ_PRESENT)) || defined (CY_DOXYGEN) 803 /******************************************************************************* 804 * Function Name: Cy_SysInt_InitExtIRQ 805 ****************************************************************************//** 806 * 807 * \brief Initializes the referenced external interrupt by setting the CPU IRQ priority and the 808 * interrupt vector. 809 * 810 * Use the CMSIS core function NVIC_EnableIRQ(config.intrSrc) to enable the interrupt. 811 * 812 * \param config 813 * Interrupt configuration structure 814 * 815 * \param userIsr 816 * Address of the ISR 817 * 818 * \note This function is available for CAT1C CM0/CM7 cores, and CAT1A TVIIBE CM0/CM4 cores. 819 * 820 * \return 821 * Initialization status 822 * 823 * \note CM0+/CM7 <br/> 824 * The interrupt vector will be relocated only if the vector table was 825 * moved to __ramVectors in SRAM. Otherwise it is ignored. 826 * 827 *******************************************************************************/ 828 cy_en_sysint_status_t Cy_SysInt_InitExtIRQ(const cy_stc_sysint_t* config, cy_israddress userIsr); 829 830 831 /******************************************************************************* 832 * Function Name: Cy_SysInt_InitIntIRQ 833 ****************************************************************************//** 834 * 835 * \brief Initializes the referenced internal interrupt by setting the priority and the 836 * interrupt vector. 837 * 838 * Use the CMSIS core function NVIC_EnableIRQ(config.intrSrc) to enable the interrupt. 839 * 840 * \param config 841 * Interrupt configuration structure 842 * 843 * \param userIsr 844 * Address of the ISR 845 * 846 * \note This function is available for CAT1C CM0/CM7 cores, and CAT1A TVIIBE CM0/CM4 cores. 847 * 848 * \return 849 * Initialization status 850 * 851 * \note CM0+/CM7 <br/> 852 * The interrupt vector will be relocated only if the vector table was 853 * moved to __ramVectors in SRAM. Otherwise it is ignored. 854 * 855 *******************************************************************************/ 856 cy_en_sysint_status_t Cy_SysInt_InitIntIRQ(const cy_stc_sysint_t* config, cy_israddress userIsr); 857 858 859 #if (defined (CPUSS_SYSTEM_IRQ_PRESENT) && (CPUSS_SYSTEM_IRQ_PRESENT == 1u)) || defined (CY_DOXYGEN) 860 /******************************************************************************* 861 * Function Name: Cy_SysInt_SetSystemIrqVector 862 ****************************************************************************//** 863 * 864 * \brief Sets the User ISR vector for the System Interrupt. 865 * 866 * \param sysIntSrc 867 * Interrupt source 868 * 869 * \note This function is available for CAT1C CM0/CM7 cores. 870 * 871 * \param userIsr 872 * Address of the ISR to set in the interrupt vector table 873 * 874 * \return none 875 * 876 *******************************************************************************/ 877 void Cy_SysInt_SetSystemIrqVector(cy_en_intr_t sysIntSrc, cy_israddress userIsr); 878 879 880 /******************************************************************************* 881 * Function Name: Cy_SysInt_GetSystemIrqVector 882 ****************************************************************************//** 883 * 884 * \brief Gets the address of the current user ISR vector for the System Interrupt. 885 * 886 * \param sysIntSrc 887 * Interrupt source 888 * 889 * \note This function is available for CAT1C CM0/CM7 cores. 890 * 891 * \return 892 * Address of the ISR in the interrupt vector table 893 * 894 *******************************************************************************/ 895 cy_israddress Cy_SysInt_GetSystemIrqVector(cy_en_intr_t sysIntSrc); 896 #endif /* (defined (CPUSS_SYSTEM_IRQ_PRESENT) && (CPUSS_SYSTEM_IRQ_PRESENT == 1u)) || defined (CY_DOXYGEN) */ 897 898 899 /******************************************************************************* 900 * Function Name: Cy_SysInt_EnableSystemInt 901 ****************************************************************************//** 902 * 903 * \brief Enable system interrupt. 904 * 905 * \param sysIntSrc 906 * System interrupt source to be enabled. 907 * 908 * \note This function is available for CAT1C CM0/CM7 cores, and CAT1A TVIIBE CM0/CM4 cores. 909 * 910 * \return none 911 * 912 *******************************************************************************/ 913 void Cy_SysInt_EnableSystemInt(cy_en_intr_t sysIntSrc); 914 915 916 /******************************************************************************* 917 * Function Name: Cy_SysInt_DisableSystemInt 918 ****************************************************************************//** 919 * 920 * \brief Disable system interrupt. 921 * 922 * \param sysIntSrc 923 * System interrupt source to be disabled. 924 * 925 * \note This function is available for CAT1C CM0/CM7 cores, and CAT1A TVIIBE CM0/CM4 cores. 926 * 927 * \return none 928 * 929 *******************************************************************************/ 930 void Cy_SysInt_DisableSystemInt(cy_en_intr_t sysIntSrc); 931 #endif 932 933 /*************************************** 934 * Functions 935 ***************************************/ 936 937 /******************************************************************************* 938 * Function Name: Cy_SysInt_SetNmiSource 939 ****************************************************************************//** 940 * 941 * \brief Sets the interrupt source of the CPU core NMI. 942 * 943 * The interrupt source must be a positive number. Setting the value to 944 * "unconnected_IRQn" or "disconnected_IRQn" disconnects the interrupt source 945 * from the NMI. Depending on the device, the number of interrupt sources that 946 * can provide the NMI trigger signal to the core can vary. 947 * 948 * \param nmiNum 949 * NMI source number. 950 * CPUSS_ver2 allows up to 4 sources to trigger the core NMI. 951 * CPUSS_ver1 allows only one source to trigger the core NMI and 952 * the specified NMI number is ignored. 953 * 954 * \param devIntrSrc 955 * Interrupt source. This parameter can either be of type cy_en_intr_t or IRQn_Type 956 * for CM0+/CM7 and CM4/CM33/CM55 respectively. 957 * 958 * \note CM0+ may call this function only at PC=0, CM4 may set its NMI handler at any PC. 959 * \note The CM0+ NMI is used for performing system calls that execute out of ROM. 960 * 961 * \funcusage 962 * \snippet sysint/snippet/main.c snippet_Cy_SysInt_SetNmiSource 963 * 964 *******************************************************************************/ 965 966 CY_MISRA_FP_BLOCK_START('MISRA C-2012 Rule 8.3', 2, 'Only one prototype will be picked for compilation') 967 #if (((CY_CPU_CORTEX_M0P) || defined (CY_IP_M7CPUSS) || defined (CY_DOXYGEN)) && !defined(CY_IP_M0SECCPUSS)) 968 void Cy_SysInt_SetNmiSource(cy_en_sysint_nmi_t nmiNum, cy_en_intr_t devIntrSrc); 969 #else 970 void Cy_SysInt_SetNmiSource(cy_en_sysint_nmi_t nmiNum, IRQn_Type intrSrc); 971 #endif 972 973 /******************************************************************************* 974 * Function Name: Cy_SysInt_GetIntSourceNMI 975 ****************************************************************************//** 976 * 977 * \brief Gets the interrupt source of the CPU core NMI for the given NMI source 978 * number. 979 * 980 * \param nmiNum 981 * NMI source number. 982 * CPUSS_ver2 allows up to 4 sources to trigger the core NMI (i.e. #1, 2, 3, 4). 983 * CPUSS_ver1 allows only 1 source to trigger the core NMI (i.e #1). 984 * 985 * \return 986 * Interrupt Source. This parameter can either be of type cy_en_intr_t or IRQn_Type 987 * for CM0+/CM7 and CM4/CM33/CM55 respectively. 988 * 989 * \funcusage 990 * \snippet sysint/snippet/main.c snippet_Cy_SysInt_SetNmiSource 991 * 992 *******************************************************************************/ 993 #if (((CY_CPU_CORTEX_M0P) || defined(CY_IP_M7CPUSS) || defined (CY_DOXYGEN)) && !defined(CY_IP_M0SECCPUSS)) 994 cy_en_intr_t Cy_SysInt_GetNmiSource(cy_en_sysint_nmi_t nmiNum); 995 #else 996 IRQn_Type Cy_SysInt_GetNmiSource(cy_en_sysint_nmi_t nmiNum); 997 #endif 998 CY_MISRA_BLOCK_END('MISRA C-2012 Rule 8.3') 999 1000 #if !(defined(CY_CPU_CORTEX_M0P) && (CY_CPU_CORTEX_M0P)) && !(defined(CY_IP_M7CPUSS)) 1001 /******************************************************************************* 1002 * Function Name: Cy_SysInt_SoftwareTrig 1003 ****************************************************************************//** 1004 * 1005 * \brief Triggers an interrupt using software (Not applicable for CM0+). 1006 * 1007 * \param IRQn 1008 * Interrupt source 1009 * 1010 * \funcusage 1011 * \snippet sysint/snippet/main.c snippet_Cy_SysInt_SoftwareTrig 1012 * 1013 * \note Only privileged software can enable unprivileged access to the 1014 * Software Trigger Interrupt Register (STIR). This function is available for CAT1A, CAT1B and CAT1D devices. 1015 * 1016 * 1017 *******************************************************************************/ 1018 void Cy_SysInt_SoftwareTrig(IRQn_Type IRQn); 1019 #endif 1020 1021 1022 /** \} group_sysint_functions */ 1023 1024 /** \cond INTERNAL */ 1025 1026 /*************************************** 1027 * Deprecated functions 1028 ***************************************/ 1029 1030 /******************************************************************************* 1031 * Function Name: Cy_SysInt_GetState 1032 ****************************************************************************//** 1033 * 1034 * This function is deprecated. It invokes the NVIC_GetEnableIRQ() function. 1035 * 1036 *******************************************************************************/ 1037 #define Cy_SysInt_GetState NVIC_GetEnableIRQ 1038 1039 1040 /******************************************************************************* 1041 * Function Name: Cy_SysInt_SetIntSource 1042 ****************************************************************************//** 1043 * 1044 * This function is deprecated. It invokes the Cy_SysInt_SetInterruptSource() function. 1045 * 1046 *******************************************************************************/ 1047 #define Cy_SysInt_SetIntSource(intrSrc, devIntrSrc) Cy_SysInt_SetInterruptSource(intrSrc, devIntrSrc) 1048 1049 1050 /******************************************************************************* 1051 * Function Name: Cy_SysInt_GetIntSource 1052 ****************************************************************************//** 1053 * 1054 * This function is deprecated. It invokes the Cy_SysInt_GetInterruptSource() function. 1055 * 1056 *******************************************************************************/ 1057 #define Cy_SysInt_GetIntSource(intrSrc) Cy_SysInt_GetInterruptSource(intrSrc) 1058 1059 1060 /******************************************************************************* 1061 * Function Name: Cy_SysInt_SetIntSourceNMI 1062 ****************************************************************************//** 1063 * 1064 * This function is deprecated. It invokes the Cy_SysInt_SetNmiSource() function. 1065 * 1066 *******************************************************************************/ 1067 #define Cy_SysInt_SetIntSourceNMI(srcParam) Cy_SysInt_SetNmiSource(CY_SYSINT_NMI1, srcParam) 1068 1069 1070 /******************************************************************************* 1071 * Function Name: Cy_SysInt_GetIntSourceNMI 1072 ****************************************************************************//** 1073 * 1074 * This function is deprecated. It invokes the Cy_SysInt_GetNmiSource() function. 1075 * 1076 *******************************************************************************/ 1077 #define Cy_SysInt_GetIntSourceNMI() Cy_SysInt_GetNmiSource(CY_SYSINT_NMI1) 1078 1079 /** \endcond */ 1080 1081 #if defined(__cplusplus) 1082 } 1083 #endif 1084 1085 #endif /* defined (CY_IP_M33SYSCPUSS) || defined (CY_IP_M4CPUSS) || defined (CY_IP_M7CPUSS) || defined(CY_IP_M55APPCPUSS) */ 1086 1087 #endif /* CY_SYSINT_H */ 1088 1089 /** \} group_sysint */ 1090 1091 /* [] END OF FILE */ 1092