nand.s
上传用户:qiulin1960
上传日期:2013-10-16
资源大小:2844k
文件大小:3k
源码类别:

Windows CE

开发平台:

Windows_Unix

  1. ;
  2. ; Copyright (c) Microsoft Corporation.  All rights reserved.
  3. ;
  4. ;
  5. ; Use of this source code is subject to the terms of the Microsoft end-user
  6. ; license agreement (EULA) under which you licensed this SOFTWARE PRODUCT.
  7. ; If you did not accept the terms of the EULA, you are not authorized to use
  8. ; this source code. For a copy of the EULA, please see the LICENSE.RTF on your
  9. ; install media.
  10. ;
  11. ;                                                                     
  12. ; Module Name: nand.s                                           
  13. ; Assembly code to speed up NAND read and write. 
  14. ;
  15. ;      
  16. ;*************************************************************
  17. ; NAME : NAND FLASH Subroutine for a410 bootstrap
  18. ; DATE : 18.FEB.2002
  19. ; DESC :
  20. ;  02.18.2002:purnnamu: modified for A410
  21. ;  04.24.2002:purnnamu: optimized for NAND flash bootstrap 
  22. ;*************************************************************
  23. OPT 2 ; disable listing
  24. INCLUDE kxarm.h
  25. OPT 1 ; reenable listing
  26. OPT 128 ; disable listing of macro expansions
  27. ;; Macro LDR4STR1
  28. ;;    
  29. MACRO
  30. LDR4STR1 $src,$tmp1,$tmp2
  31. [ {FALSE}
  32. ldrb $tmp1,[$src]
  33. ldrb $tmp2,[$src]
  34. orr $tmp1,$tmp1,$tmp2,LSL #8
  35. ldrb $tmp2,[$src]
  36. orr $tmp1,$tmp1,$tmp2,LSL #16
  37. ldrb $tmp2,[$src]
  38. orr $tmp1,$tmp1,$tmp2,LSL #24
  39. ]
  40. [ {TRUE}
  41. ldr $tmp1,[$src]
  42. ]
  43. MEND
  44. ;; Macro LDR1STR4
  45. ;;    
  46.     MACRO
  47.     LDR1STR4 $dest, $tmp1, $tmp2
  48. [ {FALSE}
  49.     strb    $tmp1, [$dest]
  50.     and     $tmp2, r12, $tmp1, LSR #8
  51.     strb    $tmp2, [$dest]
  52.     and     $tmp2, r12, $tmp1, LSR #16
  53.     strb    $tmp2, [$dest]
  54.     and     $tmp2, r12, $tmp1, LSR #24
  55.     strb    $tmp2,  [$dest]
  56. ]
  57. [ {TRUE}
  58. str $tmp1, [$dest]
  59. ]
  60.     MEND
  61.     
  62.     TEXTAREA
  63. ; ---------------------------------------------------------------------
  64. ;   void ReadPage512(BYTE *pBuf, PUSHORT pNFData)
  65. ;
  66. ;   pBuf (r0):       a buffer big enough to hold 512 bytes
  67. ;   pNFData (r1):    the DATA register on the NAND controller
  68. ;
  69. ; ---------------------------------------------------------------------        
  70.     LEAF_ENTRY ReadPage512
  71.     
  72.     stmfd     sp!, {r2-r11} 
  73.     
  74. mov r2, #0x200
  75. 10
  76. LDR4STR1 r1,r4,r3
  77. LDR4STR1 r1,r5,r3
  78. LDR4STR1 r1,r6,r3
  79. LDR4STR1 r1,r7,r3
  80. LDR4STR1 r1,r8,r3
  81. LDR4STR1 r1,r9,r3
  82. LDR4STR1 r1,r10,r3
  83. LDR4STR1 r1,r11,r3
  84. stmia r0!,{r4-r11}
  85. subs r2,r2,#32
  86. bne %B10
  87. ldmfd sp!,{r2-r11}
  88. mov pc,lr
  89.     
  90.     ENDP    ; |ReadPage512|
  91.     
  92. ; ---------------------------------------------------------------------
  93. ;   void WritePage512(BYTE *pBuf, PUSHORT pNFData)
  94. ;
  95. ;   pBuf (r0):       the data buffer
  96. ;   pNFData (r1):    the DATA register on the NAND controller
  97. ;
  98. ; ---------------------------------------------------------------------        
  99.     
  100.     LEAF_ENTRY WritePage512
  101.     
  102.     stmfd   sp!, {r2-r12}
  103. ;;; -- We use r12 as the mask     
  104.     mov r12, #0xFF                        
  105.     mov r2, #0x200
  106. 10
  107.     ldmia   r0!, {r4-r11}
  108.     LDR1STR4 r1, r4, r3    
  109.     LDR1STR4 r1, r5, r3    
  110.     LDR1STR4 r1, r6, r3    
  111.     LDR1STR4 r1, r7, r3    
  112.     LDR1STR4 r1, r8, r3    
  113.     LDR1STR4 r1, r9, r3    
  114.     LDR1STR4 r1, r10, r3    
  115.     LDR1STR4 r1, r11, r3
  116.     subs    r2, r2, #32
  117.     bne %B10
  118.     
  119.     ldmfd   sp!, {r2-r12}
  120.     mov     pc, lr
  121.     
  122.     ENDP    ; |WritePage512|    
  123.     
  124.     END