| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139 |
- /*
- *********************************************************************************************************
- * uC/OS-III
- * The Real-Time Kernel
- *
- *
- * (c) Copyright 2009-2010; Micrium, Inc.; Weston, FL
- * All rights reserved. Protected by international copyright laws.
- *
- * ARM Cortex-M3 Port
- *
- * File : OS_CPU.H
- * Version : V3.01.2
- * By : JJL
- *
- * LICENSING TERMS:
- * ---------------
- * uC/OS-III is provided in source form to registered licensees ONLY. It is
- * illegal to distribute this source code to any third party unless you receive
- * written permission by an authorized Micrium representative. Knowledge of
- * the source code may NOT be used to develop a similar product.
- *
- * Please help us continue to provide the Embedded community with the finest
- * software available. Your honesty is greatly appreciated.
- *
- * You can contact us at www.micrium.com.
- *
- * For : ARMv7M Cortex-M3
- * Mode : Thumb2
- * Toolchain : IAR EWARM
- *********************************************************************************************************
- */
- #ifndef OS_CPU_H
- #define OS_CPU_H
- #include "os_cfg.h"
- #ifdef OS_CPU_GLOBALS
- #define OS_CPU_EXT
- #else
- #define OS_CPU_EXT extern
- #endif
- /*
- *********************************************************************************************************
- * MACROS
- *********************************************************************************************************
- */
- #ifndef NVIC_INT_CTRL
- #define NVIC_INT_CTRL *((CPU_REG32 *)0xE000ED04)
- #endif
- #ifndef NVIC_PENDSVSET
- #define NVIC_PENDSVSET 0x10000000
- #endif
- #define OS_TASK_SW() NVIC_INT_CTRL = NVIC_PENDSVSET
- #define OSIntCtxSw() NVIC_INT_CTRL = NVIC_PENDSVSET
- /*
- *********************************************************************************************************
- * TIMESTAMP CONFIGURATION
- *
- * Note(s) : (1) OS_TS_GET() is generally defined as CPU_TS_Get32() to allow CPU timestamp timer to be of
- * any data type size.
- *
- * (2) For architectures that provide 32-bit or higher precision free running counters
- * (i.e. cycle count registers):
- *
- * (a) OS_TS_GET() may be defined as CPU_TS_TmrRd() to improve performance when retrieving
- * the timestamp.
- *
- * (b) CPU_TS_TmrRd() MUST be configured to be greater or equal to 32-bits to avoid
- * truncation of TS.
- *********************************************************************************************************
- */
- #if OS_CFG_TS_EN == 1u
- #define OS_TS_GET() (CPU_TS)CPU_TS_TmrRd() /* See Note #2a. */
- #else
- #define OS_TS_GET() (CPU_TS)0u
- #endif
- #if (CPU_CFG_TS_32_EN == DEF_ENABLED) && \
- (CPU_CFG_TS_TMR_SIZE < CPU_WORD_SIZE_32)
- /* CPU_CFG_TS_TMR_SIZE MUST be >= 32-bit (see Note #2b). */
- #error "cpu_cfg.h, CPU_CFG_TS_TMR_SIZE MUST be >= CPU_WORD_SIZE_32"
- #endif
- /*
- *********************************************************************************************************
- * OS TICK INTERRUPT PRIORITY CONFIGURATION
- *
- * Note(s) : (1) For systems that don't need any high, real-time priority interrupts; the tick interrupt
- * should be configured as the highest priority interrupt but won't adversely affect system
- * operations.
- *
- * (2) For systems that need one or more high, real-time interrupts; these should be configured
- * higher than the tick interrupt which MAY delay execution of the tick interrupt.
- *
- * (a) If the higher priority interrupts do NOT continually consume CPU cycles but only
- * occasionally delay tick interrupts, then the real-time interrupts can successfully
- * handle their intermittent/periodic events with the system not losing tick interrupts
- * but only increasing the jitter.
- *
- * (b) If the higher priority interrupts consume enough CPU cycles to continually delay the
- * tick interrupt, then the CPU/system is most likely over-burdened & can't be expected
- * to handle all its interrupts/tasks. The system time reference gets compromised as a
- * result of losing tick interrupts.
- *********************************************************************************************************
- */
- #define OS_CPU_CFG_SYSTICK_PRIO 0u
- /*
- *********************************************************************************************************
- * GLOBAL VARIABLES
- *********************************************************************************************************
- */
- OS_CPU_EXT CPU_STK *OS_CPU_ExceptStkBase;
- /*
- *********************************************************************************************************
- * FUNCTION PROTOTYPES
- *********************************************************************************************************
- */
- void OSStartHighRdy (void);
- void OS_CPU_PendSVHandler (void);
- //void OS_CPU_SysTickHandler(void);
- //void OS_CPU_SysTickInit (CPU_INT32U cnts);
- #endif
|