cpu_a.asm
上传用户:yj_qqy
上传日期:2017-01-28
资源大小:2911k
文件大小:8k
源码类别:

uCOS

开发平台:

C/C++

  1. ;********************************************************************************************************
  2. ;                                               uC/CPU
  3. ;                                    CPU CONFIGURATION & PORT LAYER
  4. ;
  5. ;                          (c) Copyright 2004-2008; Micrium, Inc.; Weston, FL
  6. ;
  7. ;               All rights reserved.  Protected by international copyright laws.
  8. ;
  9. ;               uC/CPU is provided in source form for FREE evaluation, for educational
  10. ;               use or peaceful research.  If you plan on using uC/CPU in a commercial
  11. ;               product you need to contact Micrium to properly license its use in your
  12. ;               product.  We provide ALL the source code for your convenience and to
  13. ;               help you experience uC/CPU.  The fact that the source code is provided
  14. ;               does NOT mean that you can use it without paying a licensing fee.
  15. ;
  16. ;               Knowledge of the source code may NOT be used to develop a similar product.
  17. ;
  18. ;               Please help us continue to provide the Embedded community with the finest
  19. ;               software available.  Your honesty is greatly appreciated.
  20. ;********************************************************************************************************
  21. ;********************************************************************************************************
  22. ;
  23. ;                                            CPU PORT FILE
  24. ;
  25. ;                                            ARM-Cortex-M3
  26. ;                                      RealView Development Suite
  27. ;                            RealView Microcontroller Development Kit (MDK)
  28. ;                                       ARM Developer Suite (ADS)
  29. ;                                            Keil uVision
  30. ;
  31. ; Filename      : cpu_a.asm
  32. ; Version       : V1.19
  33. ; Programmer(s) : BAN
  34. ;********************************************************************************************************
  35. ;********************************************************************************************************
  36. ;                                           PUBLIC FUNCTIONS
  37. ;********************************************************************************************************
  38.         EXPORT  CPU_IntDis
  39.         EXPORT  CPU_IntEn
  40.         EXPORT  CPU_SR_Save
  41.         EXPORT  CPU_SR_Restore
  42.         
  43.         EXPORT  CPU_CntLeadZeros
  44.         EXPORT  CPU_RevBits
  45.         EXPORT  CPU_WaitForInt
  46.         EXPORT  CPU_WaitForExcept
  47. ;********************************************************************************************************
  48. ;                                      CODE GENERATION DIRECTIVES
  49. ;********************************************************************************************************
  50.         AREA |.text|, CODE, READONLY, ALIGN=2
  51.         THUMB
  52.         REQUIRE8
  53.         PRESERVE8
  54. ;$PAGE
  55. ;*********************************************************************************************************
  56. ;                                    DISABLE and ENABLE INTERRUPTS
  57. ;
  58. ; Description : Disable/Enable interrupts.
  59. ;
  60. ; Prototypes  : void  CPU_IntDis(void);
  61. ;               void  CPU_IntEn (void);
  62. ;*********************************************************************************************************
  63. CPU_IntDis
  64.         CPSID   I
  65.         BX      LR
  66. CPU_IntEn
  67.         CPSIE   I
  68.         BX      LR
  69. ;*********************************************************************************************************
  70. ;                                      CRITICAL SECTION FUNCTIONS
  71. ;
  72. ; Description : Disable/Enable interrupts by preserving the state of interrupts.  Generally speaking, the
  73. ;               state of the interrupt disable flag is stored in the local variable 'cpu_sr' & interrupts
  74. ;               are then disabled ('cpu_sr' is allocated in all functions that need to disable interrupts).
  75. ;               The previous interrupt state is restored by copying 'cpu_sr' into the CPU's status register.
  76. ;
  77. ; Prototypes  : CPU_SR  CPU_SR_Save   (void);
  78. ;               void    CPU_SR_Restore(CPU_SR cpu_sr);
  79. ;
  80. ;
  81. ; Note(s)     : (1) These functions are used in general like this:
  82. ;
  83. ;                   void  Task (void *p_arg)
  84. ;                   {
  85. ;                                                               /* Allocate storage for CPU status register */
  86. ;                   #if (CPU_CFG_CRITICAL_METHOD == CPU_CRITICAL_METHOD_STATUS_LOCAL)
  87. ;                       CPU_SR  cpu_sr;
  88. ;                   #endif
  89. ;
  90. ;                            :
  91. ;                            :
  92. ;                       CPU_CRITICAL_ENTER();                   /* cpu_sr = CPU_SR_Save();                  */
  93. ;                            :
  94. ;                            :
  95. ;                       CPU_CRITICAL_EXIT();                    /* CPU_SR_Restore(cpu_sr);                  */
  96. ;                            :
  97. ;                            :
  98. ;                   }
  99. ;*********************************************************************************************************
  100. CPU_SR_Save
  101.         MRS     R0, PRIMASK                     ; Set prio int mask to mask all (except faults)
  102.         CPSID   I
  103.         BX      LR
  104. CPU_SR_Restore                                  ; See Note #2.
  105.         MSR     PRIMASK, R0
  106.         BX      LR
  107. ;$PAGE
  108. ;********************************************************************************************************
  109. ;                                         COUNT LEADING ZEROS
  110. ;
  111. ; Description : Counts the number of binary zero bits before the first binary one bit in the argument.
  112. ;               If the argument is zero, the value 32 is returned.
  113. ;
  114. ; Prototypes : CPU_INT32U  CPU_CntLeadZeros (CPU_INT32U  val)
  115. ;
  116. ; Argument(s) : val     variable to count leading zeros
  117. ;********************************************************************************************************
  118. CPU_CntLeadZeros
  119.         CLZ     R0, R0                          ; Count leading zeros
  120.         BX      LR
  121. ;********************************************************************************************************
  122. ;                                             REVERSE BITS
  123. ;
  124. ; Description : Reverses the bits in the argument.
  125. ;
  126. ; Prototypes : CPU_INT32U  CPU_RevBits (CPU_INT32U  val)
  127. ;
  128. ; Argument(s) : val     variable to reverse
  129. ;********************************************************************************************************
  130. CPU_RevBits
  131.         RBIT    R0, R0                          ; Reverse bits
  132.         BX      LR
  133. ;$PAGE
  134. ;********************************************************************************************************
  135. ;                                         WAIT FOR INTERRUPT
  136. ;
  137. ; Description : Enters sleep state, which will be exited when an interrupt is received.
  138. ;
  139. ; Prototypes  : void  CPU_WaitForInt (void)
  140. ;
  141. ; Argument(s) : none.
  142. ;********************************************************************************************************
  143. CPU_WaitForInt
  144.         WFI                                     ; Wait for interrupt
  145.         BX      LR
  146. ;********************************************************************************************************
  147. ;                                         WAIT FOR EXCEPTION
  148. ;
  149. ; Description : Enters sleep state, which will be exited when an exception is received.
  150. ;
  151. ; Prototypes  : void  CPU_WaitForExcept (void)
  152. ;
  153. ; Argument(s) : none.
  154. ;********************************************************************************************************
  155. CPU_WaitForExcept
  156.         WFE                                     ; Wait for exception
  157.         BX      LR
  158. ;$PAGE
  159. ;********************************************************************************************************
  160. ;                                     CPU ASSEMBLY PORT FILE END
  161. ;********************************************************************************************************
  162.         END