os_cpu.h 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139
  1. /*
  2. *********************************************************************************************************
  3. * uC/OS-III
  4. * The Real-Time Kernel
  5. *
  6. *
  7. * (c) Copyright 2009-2010; Micrium, Inc.; Weston, FL
  8. * All rights reserved. Protected by international copyright laws.
  9. *
  10. * ARM Cortex-M3 Port
  11. *
  12. * File : OS_CPU.H
  13. * Version : V3.01.2
  14. * By : JJL
  15. *
  16. * LICENSING TERMS:
  17. * ---------------
  18. * uC/OS-III is provided in source form to registered licensees ONLY. It is
  19. * illegal to distribute this source code to any third party unless you receive
  20. * written permission by an authorized Micrium representative. Knowledge of
  21. * the source code may NOT be used to develop a similar product.
  22. *
  23. * Please help us continue to provide the Embedded community with the finest
  24. * software available. Your honesty is greatly appreciated.
  25. *
  26. * You can contact us at www.micrium.com.
  27. *
  28. * For : ARMv7M Cortex-M3
  29. * Mode : Thumb2
  30. * Toolchain : IAR EWARM
  31. *********************************************************************************************************
  32. */
  33. #ifndef OS_CPU_H
  34. #define OS_CPU_H
  35. #include "os_cfg.h"
  36. #ifdef OS_CPU_GLOBALS
  37. #define OS_CPU_EXT
  38. #else
  39. #define OS_CPU_EXT extern
  40. #endif
  41. /*
  42. *********************************************************************************************************
  43. * MACROS
  44. *********************************************************************************************************
  45. */
  46. #ifndef NVIC_INT_CTRL
  47. #define NVIC_INT_CTRL *((CPU_REG32 *)0xE000ED04)
  48. #endif
  49. #ifndef NVIC_PENDSVSET
  50. #define NVIC_PENDSVSET 0x10000000
  51. #endif
  52. #define OS_TASK_SW() NVIC_INT_CTRL = NVIC_PENDSVSET
  53. #define OSIntCtxSw() NVIC_INT_CTRL = NVIC_PENDSVSET
  54. /*
  55. *********************************************************************************************************
  56. * TIMESTAMP CONFIGURATION
  57. *
  58. * Note(s) : (1) OS_TS_GET() is generally defined as CPU_TS_Get32() to allow CPU timestamp timer to be of
  59. * any data type size.
  60. *
  61. * (2) For architectures that provide 32-bit or higher precision free running counters
  62. * (i.e. cycle count registers):
  63. *
  64. * (a) OS_TS_GET() may be defined as CPU_TS_TmrRd() to improve performance when retrieving
  65. * the timestamp.
  66. *
  67. * (b) CPU_TS_TmrRd() MUST be configured to be greater or equal to 32-bits to avoid
  68. * truncation of TS.
  69. *********************************************************************************************************
  70. */
  71. #if OS_CFG_TS_EN == 1u
  72. #define OS_TS_GET() (CPU_TS)CPU_TS_TmrRd() /* See Note #2a. */
  73. #else
  74. #define OS_TS_GET() (CPU_TS)0u
  75. #endif
  76. #if (CPU_CFG_TS_32_EN == DEF_ENABLED) && \
  77. (CPU_CFG_TS_TMR_SIZE < CPU_WORD_SIZE_32)
  78. /* CPU_CFG_TS_TMR_SIZE MUST be >= 32-bit (see Note #2b). */
  79. #error "cpu_cfg.h, CPU_CFG_TS_TMR_SIZE MUST be >= CPU_WORD_SIZE_32"
  80. #endif
  81. /*
  82. *********************************************************************************************************
  83. * OS TICK INTERRUPT PRIORITY CONFIGURATION
  84. *
  85. * Note(s) : (1) For systems that don't need any high, real-time priority interrupts; the tick interrupt
  86. * should be configured as the highest priority interrupt but won't adversely affect system
  87. * operations.
  88. *
  89. * (2) For systems that need one or more high, real-time interrupts; these should be configured
  90. * higher than the tick interrupt which MAY delay execution of the tick interrupt.
  91. *
  92. * (a) If the higher priority interrupts do NOT continually consume CPU cycles but only
  93. * occasionally delay tick interrupts, then the real-time interrupts can successfully
  94. * handle their intermittent/periodic events with the system not losing tick interrupts
  95. * but only increasing the jitter.
  96. *
  97. * (b) If the higher priority interrupts consume enough CPU cycles to continually delay the
  98. * tick interrupt, then the CPU/system is most likely over-burdened & can't be expected
  99. * to handle all its interrupts/tasks. The system time reference gets compromised as a
  100. * result of losing tick interrupts.
  101. *********************************************************************************************************
  102. */
  103. #define OS_CPU_CFG_SYSTICK_PRIO 0u
  104. /*
  105. *********************************************************************************************************
  106. * GLOBAL VARIABLES
  107. *********************************************************************************************************
  108. */
  109. OS_CPU_EXT CPU_STK *OS_CPU_ExceptStkBase;
  110. /*
  111. *********************************************************************************************************
  112. * FUNCTION PROTOTYPES
  113. *********************************************************************************************************
  114. */
  115. void OSStartHighRdy (void);
  116. void OS_CPU_PendSVHandler (void);
  117. //void OS_CPU_SysTickHandler(void);
  118. //void OS_CPU_SysTickInit (CPU_INT32U cnts);
  119. #endif