微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > S3C2440启动代码分析

S3C2440启动代码分析

时间:11-21 来源:互联网 点击:
  1. yncBusMode和MMU_SetFastBusMode都在4K代码以上,
  2. ;如果你想你编译出来的程序能在NAND上运行的话,就不要在这调用这两函数了.
  3. ;如果你不要求的话,你就用把.啥事没有.
  4. ;为什么是4K,问三星吧,就提供4K的内部SRAM,要是提供400K多好呀.
  5. ;好了,好了,4K就4K吧,不能用这两函数,自己写还不行吗,下面的代码这这么来了,
  6. ;实现和上面两函数一样的功能.
  7. ;===============================================================================
  8. ;[CLKdiv_VAL>1;意思是Fclk:Hclk不是1:1.
  9. ;blMMU_SetAsyncBusMode
  10. ;|
  11. ;blMMU_SetFastBusMode;defaultvalue.
  12. ;]
  13. ;==手册第243页==
  14. ;IfHdivNisnot0,theCPUbusmodehastobechangedfromthefastbusmodetotheasynchronous
  15. ;busmodeusingfollowinginstructions
  16. ;MMU_SetAsyncBusMode
  17. ;mrcp15,0,r0,c1,c0,0
  18. ;orrr0,r0,#R1_nF:OR:R1_iA
  19. ;mcrp15,0,r0,c1,c0,0
  20. [CLKdiv_VAL>1;意思是Fclk:Hclk不是1:1.
  21. mrcp15,0,r0,c1,c0,0
  22. orrr0,r0,#0xc0000000;R1_nF:OR:R1_iA
  23. mcrp15,0,r0,c1,c0,0
  24. |
  25. mrcp15,0,r0,c1,c0,0
  26. bicr0,r0,#0xc0000000;R1_iA:OR:R1_nF
  27. mcrp15,0,r0,c1,c0,0
  28. ]
  29. ;配置UPLL
  30. ;//ConfigureUPLLFin=12.0MHzUFout=48MHz
  31. ldrr0,=UPLLCON
  32. ldrr1,=((U_Mdiv<12)+(U_Pdiv<4)+U_Sdiv);//USBPLLCONFIG56,2,2===>48MHz
  33. strr1,[r0]
  34. ;7个nop必不可少!!
  35. nop;//Caution:AfterUPLLsetting,atleast7-clocksdelaymustbeinsertedforsettinghardwarebecompleted.
  36. nop
  37. nop
  38. nop
  39. nop
  40. nop
  41. nop
  42. ;配置MPLL
  43. ;//ConfigureMPLLFin=12.0MHzMFout=304.8MHz
  44. ldrr0,=MPLLCON
  45. ldrr1,=((M_Mdiv<12)+(M_Pdiv<4)+M_Sdiv);68,1,1==>304MHz
  46. strr1,[r0]
  47. ]
  48. ;检查是否从SLEEP模式中恢复
  49. ;//Checkifthebootiscausedbythewake-upfromSLEEPmode.
  50. ldrr1,=GSTATUS2
  51. ldrr0,[r1]
  52. tstr0,#0x2;testifbit[1]is1or00->C=1
  53. ;1->C=0
  54. ;Incaseofthewake-upfromSLEEPmode,gotoSLEEP_WAKEUPhandler.
  55. bneWAKEUP_SLEEP;C=0,jump
  56. EXPORTStartPointAfterSleepWakeUp
  57. StartPointAfterSleepWakeUp
  58. ;===============================================================================
  59. ;设置内存控制器等寄存器的值,因为这些寄存器是连续排列的,所以采用如下办法对这些
  60. ;寄存器进行连续设置.其中用到了SMRDATA的数据,这在代码后面有定义
  61. ;===============================================================================
  62. ;这是设置SDRAM,flashROM存储器连接和工作时序的程序,片选定义的程序
  63. ;SMRDATAmap在下面的程序中定义
  64. ;SMRDATA中涉及的值请参考memcfg.inc程序
  65. ;Setmemorycontrolregisters
  66. ;ldrr0,=SMRDATA;dangerous!!!
  67. adrlr0,SMRDATA;becareful!,tinko
  68. ldrr1,=BWSCON;BWSCONAddress
  69. addr2,r0,#52;EndaddressofSMRDATA;SMRDATA数据的结束地址,共有52字节的数据
  70. 0
  71. ldrr3,[r0],#4
  72. strr3,[r1],#4
  73. cmpr2,r0
  74. bne%B0;%表示搜索,B表示反向-back(F表示向前-forward),0为局部标号(0~99)
  75. ;================================================================================
  76. ;如果EINT0产生(这中断就是我们按键产生的),就清除SDRAM,不过好像没人会在这个时候按
  77. ;================================================================================
  78. ;checkifEIN0buttonispressed
  79. ldrr0,=GPFCON
  80. ldrr1,=0x0;00=Input
  81. strr1,[r0]
  82. ldrr0,=GPFUP
  83. ldrr1,=0xff;1-Thepullupfunctionisdisabled.
  84. strr1,[r0]
  85. ldrr1,=GPFDAT
  86. ldrr0,[r1]
  87. bicr0,r0,#(0x1e<1);bitclear
  88. tstr0,#0x1
  89. bne%F1;如果没有按,就跳到后面的1标号处=>Initializestacks
  90. ;这就是清零内存的代码
  91. ldrr0,=GPFCON
  92. ldrr1,=0x55aa
  93. strr1,[r0]
  94. ;ldrr0,=GPFUP
  95. ;ldrr1,=0xff
  96. ;strr1,[r0]
  97. ldrr0,=GPFDAT
  98. ldrr1,=0x0
  99. strr1,[r0];LED=****
  100. movr1,#0
  101. movr2,#0
  102. movr3,#0
  103. movr4,#0
  104. movr5,#0
  105. movr6,#0
  106. movr7,#0
  107. movr8,#0
  108. ldrr9,=0x4000000;64MB
  109. ldrr0,=0x30000000
  110. 0
  111. stmiar0!,{r1-r8}
  112. subsr9,r9,#32
  113. bne%B0
  114. ;到这就结束了.
  115. ;//4.初始化各模式下的栈指针
  116. ;Initializestacks
  117. 1
  118. blInitStacks
  119. ;=======================================================================
  120. ;哈哈,下面又有看头了,这个初始化程序好像被名曰hzh的高手改过
  121. ;能在NORNAND还有内存中运行,当然了,在内存中运行最简单了.
  122. ;在NORNAND中运行的话都要先把自己拷到内存中.
  123. ;此外,还记得上面提到的|Image

    RO

    Base|,|Image

    RO

    Limit|...吗?
  124. ;这就是拷贝的依据了!!!
  125. ;=========================================================================
  126. ;BWSCON的[2:1]反映了外部引脚OM[1:0]:若OM[1:0]!=00,从NORFLash启动或直接在内存运行;若OM[1:0]==00,则为NandFlashMode
  127. ldrr0,=BWSCON
  128. ldrr0,[r0]
  129. andsr0,r0,#6;#6==0110-->BWSCON[2:1]
  130. bnecopy_proc_beg;OM[1:0]

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top