os_cpu.h
上传用户:dongxin
上传日期:2022-06-22
资源大小:370k
文件大小:4k
源码类别:

uCOS

开发平台:

Others

  1. /*
  2. *********************************************************************************************************
  3. *                                               uC/OS-II
  4. *                                        The Real-Time Kernel
  5. *
  6. *                              (c) Copyright 2006, Micrium, Inc, Weston, FL
  7. *                                          All Rights Reserved
  8. *
  9. *                                         Coldfile Specific code
  10. *
  11. * File  : OS_CPU.H
  12. * By    : Jean J. Labrosse
  13. *********************************************************************************************************
  14. */
  15. #ifndef OS_CPU_H
  16. #define OS_CPU_H
  17. /*
  18. *********************************************************************************************************
  19. *                                              DATA TYPES
  20. *********************************************************************************************************
  21. */
  22. typedef unsigned  char  BOOLEAN;
  23. typedef unsigned  char  INT8U; 
  24. typedef signed    char  INT8S; 
  25. typedef unsigned  short INT16U;
  26. typedef signed    short INT16S;
  27. typedef unsigned  int   INT32U;
  28. typedef signed    int   INT32S;
  29. typedef float           FP32;  
  30. typedef double          FP64;  
  31. typedef unsigned  int   OS_STK;      //ColdFireCPU中的堆栈入口数据长度32位
  32. typedef unsigned  short OS_CPU_SR;   //定义了ColdFire CPU中的SR寄存器16位
  33. /* 
  34. *********************************************************************************************************
  35. *                                Motorola ColdFire Inline Assembly
  36. *
  37. * Method #1:  Disable/Enable interrupts using simple instructions.  After critical section, interrupts
  38. *             will be enabled even if they were disabled before entering the critical section.
  39. *
  40. * Method #2:  Disable/Enable interrupts by preserving the state of interrupts.  In other words, if 
  41. *             interrupts were disabled before entering the critical section, they will be disabled when
  42. *             leaving the critical section.
  43. *
  44. * Method #3:  Disable/Enable interrupts by preserving the state of interrupts.  Generally speaking you
  45. *             would store the state of the interrupt disable flag in the local variable 'cpu_sr' and then
  46. *             disable interrupts.  'cpu_sr' is allocated in all of uC/OS-II's functions that need to 
  47. *             disable interrupts.  You would restore the interrupt disable state by copying back 'cpu_sr'
  48. *             into the CPU's status register.
  49. *********************************************************************************************************
  50. */
  51. //定义进入临界区代码的方法
  52. #define  OS_CRITICAL_METHOD    1
  53.                                             
  54. #if      OS_CRITICAL_METHOD == 1
  55. #define  OS_ENTER_CRITICAL()  asm(move.w  #0x2700,sr)  //禁止中断
  56. #define  OS_EXIT_CRITICAL()   asm(move.w  #0x2000,sr)  //使能中断
  57. #endif
  58.  
  59. //定义任务切换的指令                                                      
  60. #define  OS_TASK_SW()          asm(TRAP #14;)   //使用Trap #14执行任务级切换
  61.                           
  62. #define  OS_STK_GROWTH         1                /* Define stack growth: 1 = Down, 0 = Up               */
  63. /* 
  64. *********************************************************************************************************
  65. *                                          ColdFire Specifics
  66. *********************************************************************************************************
  67. */
  68. #define  OS_INITIAL_SR        0x2000            /* Supervisor mode, interrupts enabled                 */
  69. #define  OS_TRAP_NBR              14            /* OSCtxSw() invoked through TRAP #14                  */
  70. #define  SYSTEM_CLOCK     60000     /* system bus frequency */
  71. /*
  72. *********************************************************************************************************
  73. *                                              PROTOTYPES
  74. *********************************************************************************************************
  75. */
  76. #if OS_CRITICAL_METHOD == 3
  77. OS_CPU_SR  OS_CPU_SR_Save(void);
  78. void       OS_CPU_SR_Restore(OS_CPU_SR cpu_sr);
  79. #endif
  80. void     OSStartHighRdy(void); 
  81. void     OSIntCtxSw(void); 
  82. void     OSCtxSw(void);
  83. void       OSInitVBR(void);
  84. void       OSVectSet(INT8U vect, void (*addr)(void));
  85. INT32U     OSVectGet(INT8U vect);
  86. #endif