cp15_asm_keil.s
上传用户:xukun0987
上传日期:2022-07-16
资源大小:216k
文件大小:6k
源码类别:

微处理器开发

开发平台:

C/C++

  1. ; ----------------------------------------------------------------------------
  2. ;         ATMEL Microcontroller Software Support 
  3. ; ----------------------------------------------------------------------------
  4. ; Copyright (c) 2008, Atmel Corporation
  5. ;
  6. ; All rights reserved.
  7. ;
  8. ; Redistribution and use in source and binary forms, with or without
  9. ; modification, are permitted provided that the following conditions are met:
  10. ;
  11. ; - Redistributions of source code must retain the above copyright notice,
  12. ; this list of conditions and the disclaimer below.
  13. ;
  14. ; Atmel's name may not be used to endorse or promote products derived from
  15. ; this software without specific prior written permission.
  16. ;
  17. ; DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR
  18. ; IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  19. ; MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE
  20. ; DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,
  21. ; INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  22. ; LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
  23. ; OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
  24. ; LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
  25. ; NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
  26. ; EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  27. ; ----------------------------------------------------------------------------
  28. ;
  29.         AREA  cp15, CODE
  30. ;------------------------------------------------------------------------------
  31. ;         Headers
  32. ;------------------------------------------------------------------------------
  33. ;------------------------------------------------------------------------------
  34. ; Functions to access CP15 coprocessor register
  35. ;------------------------------------------------------------------------------
  36.         EXPORT  _readControlRegister
  37.         EXPORT  _writeControlRegister
  38.         EXPORT  _waitForInterrupt
  39.         EXPORT  _writeTTB
  40.         EXPORT  _writeDomain
  41.         EXPORT  _writeITLBLockdown
  42.         EXPORT  _prefetchICacheLine
  43. ;------------------------------------------------------------------------------
  44. ; Control Register c1
  45. ; Register c1 is the Control Register for the ARM926EJ-S processor. 
  46. ; This register specifies the configuration used to enable and disable the 
  47. ; caches and MMU. It is recommended that you access this register using a 
  48. ; read-modify-write sequence.
  49. ;------------------------------------------------------------------------------
  50. ; CP15 Read Control Register
  51. _readControlRegister
  52.         mov     r0, #0
  53.         mrc     p15, 0, r0, c1, c0, 0
  54.         bx      lr
  55. ; CP15 Write Control Register
  56. _writeControlRegister
  57.         mcr     p15, 0, r0, c1, c0, 0
  58.         bx      lr
  59. ;------------------------------------------------------------------------------
  60. ; CP15 Wait For Interrupt operation
  61. ; The purpose of the Wait For Interrupt operation is to put the processor in
  62. ; to a low power state.
  63. ; This puts the processor into a low-power state and stops it executing more
  64. ; instructions until an interrupt, or debug request occurs, regardless of
  65. ; whether the interrupts are disabled by the masks in the CPSR. 
  66. ; When an interrupt does occur, the MCR instruction completes and the IRQ or
  67. ; FIQ handler is entered as normal. The return link in r14_irq or r14_fiq 
  68. ; contains the address of the MCR instruction plus 8, so that the normal 
  69. ; instruction used for interrupt return (SUBS PC,R14,#4) returns to the 
  70. ; instruction following the MCR.
  71. ; Wait For Interrupt : MCR p15, 0, <Rd>, c7, c0, 4
  72. ;------------------------------------------------------------------------------
  73. _waitForInterrupt
  74.         mov     r0, #0
  75.         mcr     p15, 0, r0, c7, c0, 4
  76.         bx      lr
  77. ;------------------------------------------------------------------------------
  78. ; CP15 Translation Table Base Register c2
  79. ; Register c2 is the Translation Table Base Register (TTBR), for the base 
  80. ; address of the first-level translation table.
  81. ; Reading from c2 returns the pointer to the currently active first-level
  82. ; translation table in bits [31:14] and an Unpredictable value in bits [13:0]. 
  83. ; Writing to register c2 updates the pointer to the first-level translation 
  84. ; table from the value in bits [31:14] of the written value. Bits [13:0] 
  85. ; Should Be Zero.
  86. ; You can use the following instructions to access the TTBR:
  87. ; Read TTBR  : MRC p15, 0, <Rd>, c2, c0, 0
  88. ; Write TTBR : MCR p15, 0, <Rd>, c2, c0, 0
  89. ;------------------------------------------------------------------------------
  90. _writeTTB
  91.         MCR     p15, 0, r0, c2, c0, 0
  92.         bx      lr
  93. ;------------------------------------------------------------------------------
  94. ; Domain Access Control Register c3
  95. ; Read domain access permissions  : MRC p15, 0, <Rd>, c3, c0, 0
  96. ; Write domain access permissions : MCR p15, 0, <Rd>, c3, c0, 0
  97. ;------------------------------------------------------------------------------
  98. _writeDomain
  99.         MCR     p15, 0, r0, c3, c0, 0
  100.         bx      lr
  101. ;------------------------------------------------------------------------------
  102. ; TLB Lockdown Register c10
  103. ; The TLB Lockdown Register controls where hardware page table walks place the
  104. ; TLB entry, in the set associative region or the lockdown region of the TLB, 
  105. ; and if in the lockdown region, which entry is written. The lockdown region 
  106. ; of the TLB contains eight entries. See TLB structure for a description of 
  107. ; the structure of the TLB.
  108. ; Read data TLB lockdown victim  : MRC p15,0,<Rd>,c10,c0,0
  109. ; Write data TLB lockdown victim : MCR p15,0,<Rd>,c10,c0,0
  110. ;------------------------------------------------------------------------------
  111. _writeITLBLockdown
  112.         MCR     p15, 0, r0, c10, c0, 0
  113.         bx      lr
  114. ;------------------------------------------------------------------------------
  115. ; Prefetch ICache line
  116. ; Performs an ICache lookup of the specified modified virtual address.
  117. ; If the cache misses, and the region is cacheable, a linefill is performed.
  118. ; Prefetch ICache line (MVA): MCR p15, 0, <Rd>, c7, c13, 1
  119. ;------------------------------------------------------------------------------
  120. _prefetchICacheLine
  121.         MCR     p15, 0, r0, c7, c13, 1
  122.         bx      lr
  123.     END