17dc86dfdSMatthias Ringwald /********************************************************************* 2*779af47bSMatthias Ringwald * SEGGER Microcontroller GmbH * 3*779af47bSMatthias Ringwald * The Embedded Experts * 47dc86dfdSMatthias Ringwald ********************************************************************** 57dc86dfdSMatthias Ringwald * * 6*779af47bSMatthias Ringwald * (c) 1995 - 2018 SEGGER Microcontroller GmbH * 77dc86dfdSMatthias Ringwald * * 87dc86dfdSMatthias Ringwald * www.segger.com Support: [email protected] * 97dc86dfdSMatthias Ringwald * * 107dc86dfdSMatthias Ringwald ********************************************************************** 117dc86dfdSMatthias Ringwald * * 127dc86dfdSMatthias Ringwald * SEGGER RTT * Real Time Transfer for embedded targets * 137dc86dfdSMatthias Ringwald * * 147dc86dfdSMatthias Ringwald ********************************************************************** 157dc86dfdSMatthias Ringwald * * 167dc86dfdSMatthias Ringwald * All rights reserved. * 177dc86dfdSMatthias Ringwald * * 187dc86dfdSMatthias Ringwald * SEGGER strongly recommends to not make any changes * 197dc86dfdSMatthias Ringwald * to or modify the source code of this software in order to stay * 207dc86dfdSMatthias Ringwald * compatible with the RTT protocol and J-Link. * 217dc86dfdSMatthias Ringwald * * 227dc86dfdSMatthias Ringwald * Redistribution and use in source and binary forms, with or * 237dc86dfdSMatthias Ringwald * without modification, are permitted provided that the following * 247dc86dfdSMatthias Ringwald * conditions are met: * 257dc86dfdSMatthias Ringwald * * 267dc86dfdSMatthias Ringwald * o Redistributions of source code must retain the above copyright * 277dc86dfdSMatthias Ringwald * notice, this list of conditions and the following disclaimer. * 287dc86dfdSMatthias Ringwald * * 297dc86dfdSMatthias Ringwald * o Redistributions in binary form must reproduce the above * 307dc86dfdSMatthias Ringwald * copyright notice, this list of conditions and the following * 317dc86dfdSMatthias Ringwald * disclaimer in the documentation and/or other materials provided * 327dc86dfdSMatthias Ringwald * with the distribution. * 337dc86dfdSMatthias Ringwald * * 34*779af47bSMatthias Ringwald * o Neither the name of SEGGER Microcontroller GmbH * 357dc86dfdSMatthias Ringwald * nor the names of its contributors may be used to endorse or * 367dc86dfdSMatthias Ringwald * promote products derived from this software without specific * 377dc86dfdSMatthias Ringwald * prior written permission. * 387dc86dfdSMatthias Ringwald * * 397dc86dfdSMatthias Ringwald * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND * 407dc86dfdSMatthias Ringwald * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, * 417dc86dfdSMatthias Ringwald * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF * 427dc86dfdSMatthias Ringwald * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * 437dc86dfdSMatthias Ringwald * DISCLAIMED. IN NO EVENT SHALL SEGGER Microcontroller BE LIABLE FOR * 447dc86dfdSMatthias Ringwald * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR * 457dc86dfdSMatthias Ringwald * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT * 467dc86dfdSMatthias Ringwald * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; * 477dc86dfdSMatthias Ringwald * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * 487dc86dfdSMatthias Ringwald * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * 497dc86dfdSMatthias Ringwald * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE * 507dc86dfdSMatthias Ringwald * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH * 517dc86dfdSMatthias Ringwald * DAMAGE. * 527dc86dfdSMatthias Ringwald * * 537dc86dfdSMatthias Ringwald ********************************************************************** 547dc86dfdSMatthias Ringwald ---------------------------END-OF-HEADER------------------------------ 557dc86dfdSMatthias Ringwald File : SEGGER_RTT_Conf.h 567dc86dfdSMatthias Ringwald Purpose : Implementation of SEGGER real-time transfer (RTT) which 577dc86dfdSMatthias Ringwald allows real-time communication on targets which support 587dc86dfdSMatthias Ringwald debugger memory accesses while the CPU is running. 59*779af47bSMatthias Ringwald Revision: $Rev: 15929 $ 607dc86dfdSMatthias Ringwald 617dc86dfdSMatthias Ringwald */ 627dc86dfdSMatthias Ringwald 637dc86dfdSMatthias Ringwald #ifndef SEGGER_RTT_CONF_H 647dc86dfdSMatthias Ringwald #define SEGGER_RTT_CONF_H 657dc86dfdSMatthias Ringwald 667dc86dfdSMatthias Ringwald #ifdef __IAR_SYSTEMS_ICC__ 677dc86dfdSMatthias Ringwald #include <intrinsics.h> 687dc86dfdSMatthias Ringwald #endif 697dc86dfdSMatthias Ringwald 707dc86dfdSMatthias Ringwald /********************************************************************* 717dc86dfdSMatthias Ringwald * 727dc86dfdSMatthias Ringwald * Defines, configurable 737dc86dfdSMatthias Ringwald * 747dc86dfdSMatthias Ringwald ********************************************************************** 757dc86dfdSMatthias Ringwald */ 767dc86dfdSMatthias Ringwald 777dc86dfdSMatthias Ringwald #define SEGGER_RTT_MAX_NUM_UP_BUFFERS (3) // Max. number of up-buffers (T->H) available on this target (Default: 3) 787dc86dfdSMatthias Ringwald #define SEGGER_RTT_MAX_NUM_DOWN_BUFFERS (3) // Max. number of down-buffers (H->T) available on this target (Default: 3) 797dc86dfdSMatthias Ringwald 807dc86dfdSMatthias Ringwald #define BUFFER_SIZE_UP (1024) // Size of the buffer for terminal output of target, up to host (Default: 1k) 817dc86dfdSMatthias Ringwald #define BUFFER_SIZE_DOWN (16) // Size of the buffer for terminal input to target from host (Usually keyboard input) (Default: 16) 827dc86dfdSMatthias Ringwald 837dc86dfdSMatthias Ringwald #define SEGGER_RTT_PRINTF_BUFFER_SIZE (64u) // Size of buffer for RTT printf to bulk-send chars via RTT (Default: 64) 847dc86dfdSMatthias Ringwald 857dc86dfdSMatthias Ringwald #define SEGGER_RTT_MODE_DEFAULT SEGGER_RTT_MODE_NO_BLOCK_SKIP // Mode for pre-initialized terminal channel (buffer 0) 867dc86dfdSMatthias Ringwald 877dc86dfdSMatthias Ringwald /********************************************************************* 887dc86dfdSMatthias Ringwald * 897dc86dfdSMatthias Ringwald * RTT memcpy configuration 907dc86dfdSMatthias Ringwald * 917dc86dfdSMatthias Ringwald * memcpy() is good for large amounts of data, 927dc86dfdSMatthias Ringwald * but the overhead is big for small amounts, which are usually stored via RTT. 937dc86dfdSMatthias Ringwald * With SEGGER_RTT_MEMCPY_USE_BYTELOOP a simple byte loop can be used instead. 947dc86dfdSMatthias Ringwald * 957dc86dfdSMatthias Ringwald * SEGGER_RTT_MEMCPY() can be used to replace standard memcpy() in RTT functions. 967dc86dfdSMatthias Ringwald * This is may be required with memory access restrictions, 977dc86dfdSMatthias Ringwald * such as on Cortex-A devices with MMU. 987dc86dfdSMatthias Ringwald */ 997dc86dfdSMatthias Ringwald #define SEGGER_RTT_MEMCPY_USE_BYTELOOP 0 // 0: Use memcpy/SEGGER_RTT_MEMCPY, 1: Use a simple byte-loop 1007dc86dfdSMatthias Ringwald // 1017dc86dfdSMatthias Ringwald // Example definition of SEGGER_RTT_MEMCPY to external memcpy with GCC toolchains and Cortex-A targets 1027dc86dfdSMatthias Ringwald // 1037dc86dfdSMatthias Ringwald //#if ((defined __SES_ARM) || (defined __CROSSWORKS_ARM) || (defined __GNUC__)) && (defined (__ARM_ARCH_7A__)) 1047dc86dfdSMatthias Ringwald // #define SEGGER_RTT_MEMCPY(pDest, pSrc, NumBytes) SEGGER_memcpy((pDest), (pSrc), (NumBytes)) 1057dc86dfdSMatthias Ringwald //#endif 1067dc86dfdSMatthias Ringwald 1077dc86dfdSMatthias Ringwald // 1087dc86dfdSMatthias Ringwald // Target is not allowed to perform other RTT operations while string still has not been stored completely. 1097dc86dfdSMatthias Ringwald // Otherwise we would probably end up with a mixed string in the buffer. 1107dc86dfdSMatthias Ringwald // If using RTT from within interrupts, multiple tasks or multi processors, define the SEGGER_RTT_LOCK() and SEGGER_RTT_UNLOCK() function here. 1117dc86dfdSMatthias Ringwald // 1127dc86dfdSMatthias Ringwald // SEGGER_RTT_MAX_INTERRUPT_PRIORITY can be used in the sample lock routines on Cortex-M3/4. 1137dc86dfdSMatthias Ringwald // Make sure to mask all interrupts which can send RTT data, i.e. generate SystemView events, or cause task switches. 1147dc86dfdSMatthias Ringwald // When high-priority interrupts must not be masked while sending RTT data, SEGGER_RTT_MAX_INTERRUPT_PRIORITY needs to be adjusted accordingly. 1157dc86dfdSMatthias Ringwald // (Higher priority = lower priority number) 1167dc86dfdSMatthias Ringwald // Default value for embOS: 128u 1177dc86dfdSMatthias Ringwald // Default configuration in FreeRTOS: configMAX_SYSCALL_INTERRUPT_PRIORITY: ( configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY << (8 - configPRIO_BITS) ) 1187dc86dfdSMatthias Ringwald // In case of doubt mask all interrupts: 1 << (8 - BASEPRI_PRIO_BITS) i.e. 1 << 5 when 3 bits are implemented in NVIC 1197dc86dfdSMatthias Ringwald // or define SEGGER_RTT_LOCK() to completely disable interrupts. 1207dc86dfdSMatthias Ringwald // 1217dc86dfdSMatthias Ringwald 1227dc86dfdSMatthias Ringwald #define SEGGER_RTT_MAX_INTERRUPT_PRIORITY (0x20) // Interrupt priority to lock on SEGGER_RTT_LOCK on Cortex-M3/4 (Default: 0x20) 1237dc86dfdSMatthias Ringwald 1247dc86dfdSMatthias Ringwald /********************************************************************* 1257dc86dfdSMatthias Ringwald * 1267dc86dfdSMatthias Ringwald * RTT lock configuration for SEGGER Embedded Studio, 1277dc86dfdSMatthias Ringwald * Rowley CrossStudio and GCC 1287dc86dfdSMatthias Ringwald */ 129*779af47bSMatthias Ringwald #if (defined(__SES_ARM) || defined(__CROSSWORKS_ARM) || defined(__GNUC__) || defined(__clang__)) && !defined (__CC_ARM) 130*779af47bSMatthias Ringwald #if (defined(__ARM_ARCH_6M__) || defined(__ARM_ARCH_8M_BASE__)) 1317dc86dfdSMatthias Ringwald #define SEGGER_RTT_LOCK() { \ 1327dc86dfdSMatthias Ringwald unsigned int LockState; \ 1337dc86dfdSMatthias Ringwald __asm volatile ("mrs %0, primask \n\t" \ 134*779af47bSMatthias Ringwald "movs r1, $1 \n\t" \ 1357dc86dfdSMatthias Ringwald "msr primask, r1 \n\t" \ 1367dc86dfdSMatthias Ringwald : "=r" (LockState) \ 1377dc86dfdSMatthias Ringwald : \ 1387dc86dfdSMatthias Ringwald : "r1" \ 1397dc86dfdSMatthias Ringwald ); 1407dc86dfdSMatthias Ringwald 1417dc86dfdSMatthias Ringwald #define SEGGER_RTT_UNLOCK() __asm volatile ("msr primask, %0 \n\t" \ 1427dc86dfdSMatthias Ringwald : \ 1437dc86dfdSMatthias Ringwald : "r" (LockState) \ 1447dc86dfdSMatthias Ringwald : \ 1457dc86dfdSMatthias Ringwald ); \ 1467dc86dfdSMatthias Ringwald } 147*779af47bSMatthias Ringwald #elif (defined(__ARM_ARCH_7M__) || defined(__ARM_ARCH_7EM__) || defined(__ARM_ARCH_8M_MAIN__)) 1487dc86dfdSMatthias Ringwald #ifndef SEGGER_RTT_MAX_INTERRUPT_PRIORITY 1497dc86dfdSMatthias Ringwald #define SEGGER_RTT_MAX_INTERRUPT_PRIORITY (0x20) 1507dc86dfdSMatthias Ringwald #endif 1517dc86dfdSMatthias Ringwald #define SEGGER_RTT_LOCK() { \ 1527dc86dfdSMatthias Ringwald unsigned int LockState; \ 1537dc86dfdSMatthias Ringwald __asm volatile ("mrs %0, basepri \n\t" \ 1547dc86dfdSMatthias Ringwald "mov r1, %1 \n\t" \ 1557dc86dfdSMatthias Ringwald "msr basepri, r1 \n\t" \ 1567dc86dfdSMatthias Ringwald : "=r" (LockState) \ 1577dc86dfdSMatthias Ringwald : "i"(SEGGER_RTT_MAX_INTERRUPT_PRIORITY) \ 1587dc86dfdSMatthias Ringwald : "r1" \ 1597dc86dfdSMatthias Ringwald ); 1607dc86dfdSMatthias Ringwald 1617dc86dfdSMatthias Ringwald #define SEGGER_RTT_UNLOCK() __asm volatile ("msr basepri, %0 \n\t" \ 1627dc86dfdSMatthias Ringwald : \ 1637dc86dfdSMatthias Ringwald : "r" (LockState) \ 1647dc86dfdSMatthias Ringwald : \ 1657dc86dfdSMatthias Ringwald ); \ 1667dc86dfdSMatthias Ringwald } 1677dc86dfdSMatthias Ringwald 1687dc86dfdSMatthias Ringwald #elif defined(__ARM_ARCH_7A__) 1697dc86dfdSMatthias Ringwald #define SEGGER_RTT_LOCK() { \ 1707dc86dfdSMatthias Ringwald unsigned int LockState; \ 1717dc86dfdSMatthias Ringwald __asm volatile ("mrs r1, CPSR \n\t" \ 1727dc86dfdSMatthias Ringwald "mov %0, r1 \n\t" \ 1737dc86dfdSMatthias Ringwald "orr r1, r1, #0xC0 \n\t" \ 1747dc86dfdSMatthias Ringwald "msr CPSR_c, r1 \n\t" \ 1757dc86dfdSMatthias Ringwald : "=r" (LockState) \ 1767dc86dfdSMatthias Ringwald : \ 1777dc86dfdSMatthias Ringwald : "r1" \ 1787dc86dfdSMatthias Ringwald ); 1797dc86dfdSMatthias Ringwald 1807dc86dfdSMatthias Ringwald #define SEGGER_RTT_UNLOCK() __asm volatile ("mov r0, %0 \n\t" \ 1817dc86dfdSMatthias Ringwald "mrs r1, CPSR \n\t" \ 1827dc86dfdSMatthias Ringwald "bic r1, r1, #0xC0 \n\t" \ 1837dc86dfdSMatthias Ringwald "and r0, r0, #0xC0 \n\t" \ 1847dc86dfdSMatthias Ringwald "orr r1, r1, r0 \n\t" \ 1857dc86dfdSMatthias Ringwald "msr CPSR_c, r1 \n\t" \ 1867dc86dfdSMatthias Ringwald : \ 1877dc86dfdSMatthias Ringwald : "r" (LockState) \ 1887dc86dfdSMatthias Ringwald : "r0", "r1" \ 1897dc86dfdSMatthias Ringwald ); \ 1907dc86dfdSMatthias Ringwald } 1917dc86dfdSMatthias Ringwald #endif 1927dc86dfdSMatthias Ringwald #endif 1937dc86dfdSMatthias Ringwald 1947dc86dfdSMatthias Ringwald /********************************************************************* 1957dc86dfdSMatthias Ringwald * 1967dc86dfdSMatthias Ringwald * RTT lock configuration for IAR EWARM 1977dc86dfdSMatthias Ringwald */ 1987dc86dfdSMatthias Ringwald #ifdef __ICCARM__ 1997dc86dfdSMatthias Ringwald #if (defined (__ARM6M__) && (__CORE__ == __ARM6M__)) 2007dc86dfdSMatthias Ringwald #define SEGGER_RTT_LOCK() { \ 2017dc86dfdSMatthias Ringwald unsigned int LockState; \ 2027dc86dfdSMatthias Ringwald LockState = __get_PRIMASK(); \ 2037dc86dfdSMatthias Ringwald __set_PRIMASK(1); 2047dc86dfdSMatthias Ringwald 2057dc86dfdSMatthias Ringwald #define SEGGER_RTT_UNLOCK() __set_PRIMASK(LockState); \ 2067dc86dfdSMatthias Ringwald } 2077dc86dfdSMatthias Ringwald #elif ((defined (__ARM7EM__) && (__CORE__ == __ARM7EM__)) || (defined (__ARM7M__) && (__CORE__ == __ARM7M__))) 2087dc86dfdSMatthias Ringwald #ifndef SEGGER_RTT_MAX_INTERRUPT_PRIORITY 2097dc86dfdSMatthias Ringwald #define SEGGER_RTT_MAX_INTERRUPT_PRIORITY (0x20) 2107dc86dfdSMatthias Ringwald #endif 2117dc86dfdSMatthias Ringwald #define SEGGER_RTT_LOCK() { \ 2127dc86dfdSMatthias Ringwald unsigned int LockState; \ 2137dc86dfdSMatthias Ringwald LockState = __get_BASEPRI(); \ 2147dc86dfdSMatthias Ringwald __set_BASEPRI(SEGGER_RTT_MAX_INTERRUPT_PRIORITY); 2157dc86dfdSMatthias Ringwald 2167dc86dfdSMatthias Ringwald #define SEGGER_RTT_UNLOCK() __set_BASEPRI(LockState); \ 2177dc86dfdSMatthias Ringwald } 2187dc86dfdSMatthias Ringwald #endif 2197dc86dfdSMatthias Ringwald #endif 2207dc86dfdSMatthias Ringwald 2217dc86dfdSMatthias Ringwald /********************************************************************* 2227dc86dfdSMatthias Ringwald * 2237dc86dfdSMatthias Ringwald * RTT lock configuration for IAR RX 2247dc86dfdSMatthias Ringwald */ 2257dc86dfdSMatthias Ringwald #ifdef __ICCRX__ 2267dc86dfdSMatthias Ringwald #define SEGGER_RTT_LOCK() { \ 2277dc86dfdSMatthias Ringwald unsigned long LockState; \ 2287dc86dfdSMatthias Ringwald LockState = __get_interrupt_state(); \ 2297dc86dfdSMatthias Ringwald __disable_interrupt(); 2307dc86dfdSMatthias Ringwald 2317dc86dfdSMatthias Ringwald #define SEGGER_RTT_UNLOCK() __set_interrupt_state(LockState); \ 2327dc86dfdSMatthias Ringwald } 2337dc86dfdSMatthias Ringwald #endif 2347dc86dfdSMatthias Ringwald 2357dc86dfdSMatthias Ringwald /********************************************************************* 2367dc86dfdSMatthias Ringwald * 2377dc86dfdSMatthias Ringwald * RTT lock configuration for IAR RL78 2387dc86dfdSMatthias Ringwald */ 2397dc86dfdSMatthias Ringwald #ifdef __ICCRL78__ 2407dc86dfdSMatthias Ringwald #define SEGGER_RTT_LOCK() { \ 2417dc86dfdSMatthias Ringwald __istate_t LockState; \ 2427dc86dfdSMatthias Ringwald LockState = __get_interrupt_state(); \ 2437dc86dfdSMatthias Ringwald __disable_interrupt(); 2447dc86dfdSMatthias Ringwald 2457dc86dfdSMatthias Ringwald #define SEGGER_RTT_UNLOCK() __set_interrupt_state(LockState); \ 2467dc86dfdSMatthias Ringwald } 2477dc86dfdSMatthias Ringwald #endif 2487dc86dfdSMatthias Ringwald 2497dc86dfdSMatthias Ringwald /********************************************************************* 2507dc86dfdSMatthias Ringwald * 2517dc86dfdSMatthias Ringwald * RTT lock configuration for KEIL ARM 2527dc86dfdSMatthias Ringwald */ 2537dc86dfdSMatthias Ringwald #ifdef __CC_ARM 2547dc86dfdSMatthias Ringwald #if (defined __TARGET_ARCH_6S_M) 2557dc86dfdSMatthias Ringwald #define SEGGER_RTT_LOCK() { \ 2567dc86dfdSMatthias Ringwald unsigned int LockState; \ 2577dc86dfdSMatthias Ringwald register unsigned char PRIMASK __asm( "primask"); \ 2587dc86dfdSMatthias Ringwald LockState = PRIMASK; \ 2597dc86dfdSMatthias Ringwald PRIMASK = 1u; \ 2607dc86dfdSMatthias Ringwald __schedule_barrier(); 2617dc86dfdSMatthias Ringwald 2627dc86dfdSMatthias Ringwald #define SEGGER_RTT_UNLOCK() PRIMASK = LockState; \ 2637dc86dfdSMatthias Ringwald __schedule_barrier(); \ 2647dc86dfdSMatthias Ringwald } 2657dc86dfdSMatthias Ringwald #elif (defined(__TARGET_ARCH_7_M) || defined(__TARGET_ARCH_7E_M)) 2667dc86dfdSMatthias Ringwald #ifndef SEGGER_RTT_MAX_INTERRUPT_PRIORITY 2677dc86dfdSMatthias Ringwald #define SEGGER_RTT_MAX_INTERRUPT_PRIORITY (0x20) 2687dc86dfdSMatthias Ringwald #endif 2697dc86dfdSMatthias Ringwald #define SEGGER_RTT_LOCK() { \ 2707dc86dfdSMatthias Ringwald unsigned int LockState; \ 2717dc86dfdSMatthias Ringwald register unsigned char BASEPRI __asm( "basepri"); \ 2727dc86dfdSMatthias Ringwald LockState = BASEPRI; \ 2737dc86dfdSMatthias Ringwald BASEPRI = SEGGER_RTT_MAX_INTERRUPT_PRIORITY; \ 2747dc86dfdSMatthias Ringwald __schedule_barrier(); 2757dc86dfdSMatthias Ringwald 2767dc86dfdSMatthias Ringwald #define SEGGER_RTT_UNLOCK() BASEPRI = LockState; \ 2777dc86dfdSMatthias Ringwald __schedule_barrier(); \ 2787dc86dfdSMatthias Ringwald } 2797dc86dfdSMatthias Ringwald #endif 2807dc86dfdSMatthias Ringwald #endif 2817dc86dfdSMatthias Ringwald 2827dc86dfdSMatthias Ringwald /********************************************************************* 2837dc86dfdSMatthias Ringwald * 2847dc86dfdSMatthias Ringwald * RTT lock configuration for TI ARM 2857dc86dfdSMatthias Ringwald */ 2867dc86dfdSMatthias Ringwald #ifdef __TI_ARM__ 2877dc86dfdSMatthias Ringwald #if defined (__TI_ARM_V6M0__) 2887dc86dfdSMatthias Ringwald #define SEGGER_RTT_LOCK() { \ 2897dc86dfdSMatthias Ringwald unsigned int LockState; \ 2907dc86dfdSMatthias Ringwald LockState = __get_PRIMASK(); \ 2917dc86dfdSMatthias Ringwald __set_PRIMASK(1); 2927dc86dfdSMatthias Ringwald 2937dc86dfdSMatthias Ringwald #define SEGGER_RTT_UNLOCK() __set_PRIMASK(LockState); \ 2947dc86dfdSMatthias Ringwald } 2957dc86dfdSMatthias Ringwald #elif (defined (__TI_ARM_V7M3__) || defined (__TI_ARM_V7M4__)) 2967dc86dfdSMatthias Ringwald #ifndef SEGGER_RTT_MAX_INTERRUPT_PRIORITY 2977dc86dfdSMatthias Ringwald #define SEGGER_RTT_MAX_INTERRUPT_PRIORITY (0x20) 2987dc86dfdSMatthias Ringwald #endif 2997dc86dfdSMatthias Ringwald #define SEGGER_RTT_LOCK() { \ 3007dc86dfdSMatthias Ringwald unsigned int LockState; \ 301*779af47bSMatthias Ringwald LockState = _set_interrupt_priority(SEGGER_RTT_MAX_INTERRUPT_PRIORITY); 3027dc86dfdSMatthias Ringwald 303*779af47bSMatthias Ringwald #define SEGGER_RTT_UNLOCK() _set_interrupt_priority(LockState); \ 3047dc86dfdSMatthias Ringwald } 3057dc86dfdSMatthias Ringwald #endif 3067dc86dfdSMatthias Ringwald #endif 3077dc86dfdSMatthias Ringwald 3087dc86dfdSMatthias Ringwald /********************************************************************* 3097dc86dfdSMatthias Ringwald * 310*779af47bSMatthias Ringwald * RTT lock configuration for CCRX 311*779af47bSMatthias Ringwald */ 312*779af47bSMatthias Ringwald #ifdef __RX 313*779af47bSMatthias Ringwald #define SEGGER_RTT_LOCK() { \ 314*779af47bSMatthias Ringwald unsigned long LockState; \ 315*779af47bSMatthias Ringwald LockState = get_psw() & 0x010000; \ 316*779af47bSMatthias Ringwald clrpsw_i(); 317*779af47bSMatthias Ringwald 318*779af47bSMatthias Ringwald #define SEGGER_RTT_UNLOCK() set_psw(get_psw() | LockState); \ 319*779af47bSMatthias Ringwald } 320*779af47bSMatthias Ringwald #endif 321*779af47bSMatthias Ringwald 322*779af47bSMatthias Ringwald /********************************************************************* 323*779af47bSMatthias Ringwald * 3247dc86dfdSMatthias Ringwald * RTT lock configuration fallback 3257dc86dfdSMatthias Ringwald */ 3267dc86dfdSMatthias Ringwald #ifndef SEGGER_RTT_LOCK 3277dc86dfdSMatthias Ringwald #define SEGGER_RTT_LOCK() // Lock RTT (nestable) (i.e. disable interrupts) 3287dc86dfdSMatthias Ringwald #endif 3297dc86dfdSMatthias Ringwald 3307dc86dfdSMatthias Ringwald #ifndef SEGGER_RTT_UNLOCK 3317dc86dfdSMatthias Ringwald #define SEGGER_RTT_UNLOCK() // Unlock RTT (nestable) (i.e. enable previous interrupt lock state) 3327dc86dfdSMatthias Ringwald #endif 3337dc86dfdSMatthias Ringwald 3347dc86dfdSMatthias Ringwald #endif 3357dc86dfdSMatthias Ringwald /*************************** End of file ****************************/ 336