{"id":292,"date":"2018-03-13T13:39:47","date_gmt":"2018-03-13T05:39:47","guid":{"rendered":"http:\/\/www.max-shu.com\/blog\/?p=292"},"modified":"2018-03-13T13:39:47","modified_gmt":"2018-03-13T05:39:47","slug":"mini6410%e6%9d%bfuboot%e7%9a%84lowlevel_init-s","status":"publish","type":"post","link":"http:\/\/www.max-shu.com\/blog\/?p=292","title":{"rendered":"mini6410\u677fuboot\u7684lowlevel_init.S"},"content":{"rendered":"<div>\u6587\u4ef6\uff1au-boot\/board\/samsung\/mini6410\/lowlevel_init.S<\/div>\n<div>#include &lt;config.h&gt;<br \/>\n#include &lt;version.h&gt;<\/p>\n<p>#include &lt;s3c6410.h&gt;<br \/>\n#include &#8220;mini6410_val.h&#8221;<\/p>\n<p>_TEXT_BASE:<br \/>\n.word\u00a0\u00a0\u00a0\u00a0 TEXT_BASE \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 @\u6bcf\u4e2alds\u91cc\u9762\u7684\u6a21\u5757\uff0c\u90fd\u53ef\u4ee5\u5b9a\u4e49\u4e00\u4e2aTEXT_BASE\u3002<\/p>\n<p>.globl lowlevel_init<br \/>\nlowlevel_init:<br \/>\nmov\u00a0\u00a0\u00a0\u00a0 r12, lr \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0@\u4fdd\u5b58PC\u503c\u5230r12<\/p>\n<p>\/* LED on only #8 *\/<br \/>\nldr\u00a0\u00a0\u00a0\u00a0 r0, =ELFIN_GPIO_BASE \u00a0 \u00a0 \u00a0 \u00a0 @GPIO\u7684\u57fa\u5730\u5740=0x7f008000<br \/>\nldr\u00a0\u00a0\u00a0\u00a0 r1, =0x55540000<br \/>\nstr\u00a0\u00a0\u00a0\u00a0 r1, [r0, #GPNCON_OFFSET] \u00a0@\u8bbe\u7f6eGPN15\u5230GPN9\uff08GPN15-GPN13\u4e3aboot\u4e2d\u65ad\uff1f\uff0cGPN12\u4e3aIR\u7ea2\u5916\u63a5\u53e3\uff0cGPN11\/GPN9\u4e3a\u5916\u90e8GPIO\u53e3\uff0cGPN10\u4e3aSDIO\u53e3\u4f7f\u7528\uff09\u4e3a\u8f93\u51fa\u7ba1\u811a\uff1b<\/p><\/div>\n<div>\u00a0\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0@GPN8\u5230GPN0\uff08GPN0-GPN5\u4e3amini6410\u7684K1\u5230K6\u76846\u4e2a\u6309\u952e\uff0cGPN7\u4e3aDM9000\u7f51\u7edc\u82af\u7247\u7684INT\u4e2d\u65ad\u5f15\u811a\uff0cGPN6\u4e3a\u5916\u90e8GPIO\u53e3\uff0cGPN8\u4e3aUSB OTG\u4e2d\u65ad\u63a5\u53e3\uff09\u4e3a\u8f93\u5165\u7ba1\u811a\u3002<\/div>\n<div>\nldr\u00a0\u00a0\u00a0\u00a0 r1, =0x55555555<br \/>\nstr\u00a0\u00a0\u00a0\u00a0 r1, [r0, #GPNPUD_OFFSET] \u00a0@\u5168\u90e8\u4e0b\u62c9\u4f7f\u80fd<\/p>\n<p>ldr\u00a0\u00a0\u00a0\u00a0 r1, =0xf000<br \/>\nstr\u00a0\u00a0\u00a0\u00a0 r1, [r0, #GPNDAT_OFFSET] \u00a0@\u8bbe\u7f6eGPN15-GPN12\u4e3a1\uff0cGPN11-GPN9\u4e3a1\uff0cGPN8-GPN0\u4e3a\u8f93\u5165\u7ba1\u811a\uff0c\u8bbe\u7f6e\u65e0\u6548\uff0c\u5916\u90e8\u662f\u4ec0\u4e48\u4fe1\u53f7\uff0c\u6570\u636e\u5c31\u662f\u4ec0\u4e48\u3002<\/p>\n<p>ldr\u00a0\u00a0\u00a0\u00a0 r0, =ELFIN_GPIO_BASE<br \/>\nldr\u00a0\u00a0\u00a0\u00a0 r1, =0x1<br \/>\nstr\u00a0\u00a0\u00a0\u00a0 r1, [r0, #GPECON_OFFSET] \u00a0@\u8bbe\u7f6eGPE4-GPE1\uff08mini6410\u4fdd\u7559\u7ed9GPIO\uff09\u4e3a\u8f93\u5165\uff0cGPE0\uff08mini6410\u4e3aLCD\u7684\u591c\u665a\u80cc\u5149on\u6216off\uff09\u4e3a\u8f93\u51fa\u3002<\/p><\/div>\n<div>\u00a0\u00a0\u00a0\u00a0 ldr\u00a0\u00a0\u00a0\u00a0 r1, =0x0<br \/>\nstr\u00a0\u00a0\u00a0\u00a0 r1, [r0, #GPEDAT_OFFSET] \u00a0@\u8bbe\u7f6eGPE0\u8f93\u51fa0\u3002<\/p>\n<p>ldr\u00a0\u00a0\u00a0\u00a0 r0, =ELFIN_GPIO_BASE<br \/>\nldr\u00a0\u00a0\u00a0\u00a0 r1, =0x2A5AAAAA<br \/>\nstr\u00a0\u00a0\u00a0\u00a0 r1, [r0, #GPPCON_OFFSET] \u00a0@\u8bbe\u7f6eGPP14\uff08mini6410\u4e3aGPIO\uff09\u4e3a\u8f93\u5165\uff0cGPP13-GPP11(GPP13,GPP12\u5728mini6410\u4e3aGPIO\uff0cGPP11\u4e3aWiFi_PD)\uff0cGPP8-GPP0(mini6410\u4e3aGPIO,GPP7-GPP2\u4e3aFlash,GPP1\u548cGPP0\u4e3amem0\u6682\u65f6\u672a\u7528)\u4e3aMEM0_XXX\uff0cGPP10-GPP9\uff08mini6410\u4e0bGPP9\u4e3aGPIO\uff0cGPP10\u4e3aWiFi_IO\uff09\u4e3a\u8f93\u51fa\u3002<br \/>\nldr\u00a0\u00a0\u00a0\u00a0 r1, =0x0<br \/>\nstr\u00a0\u00a0\u00a0\u00a0 r1, [r0, #GPPDAT_OFFSET] \u00a0@\u8bbe\u7f6e\u6240\u6709\u8f93\u51fa\u4e3a0\u3002<\/p>\n<p>ldr\u00a0\u00a0\u00a0\u00a0 r1, =0x55555555<br \/>\nstr\u00a0\u00a0\u00a0\u00a0 r1, [r0, #MEM1DRVCON_OFFSET] \u00a0@\u8bbe\u7f6e\u5b58\u50a8\u5668\u7aef\u53e31\uff08mini6410\u4e3aRAM\uff09\u82af\u7247\u7ba1\u811a\u7684\u7535\u5e73\u4e3a7\u6beb\u5b89\u621610mA\u3002<\/p>\n<p>\/* Disable Watchdog *\/<br \/>\nldr\u00a0\u00a0\u00a0\u00a0 r0, =0x7e000000\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 @0x7e004000<br \/>\norr\u00a0\u00a0\u00a0\u00a0 r0, r0, #0x4000<br \/>\nmov\u00a0\u00a0\u00a0\u00a0 r1, #0<br \/>\nstr\u00a0\u00a0\u00a0\u00a0 r1, [r0] \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 @\u7981\u6b62\u770b\u95e8\u72d7\u5b9a\u65f6\u5668\u3001\u590d\u4f4d\u529f\u80fd\u3001\u4e2d\u65ad\u505c\u6b62\u7b49<\/p>\n<p>@ External interrupt pending clear<br \/>\nldr\u00a0\u00a0\u00a0\u00a0 r0, =(ELFIN_GPIO_BASE+EINTPEND_OFFSET)\u00a0\u00a0\u00a0\u00a0 \/*EINTPEND*\/<br \/>\nldr\u00a0\u00a0\u00a0\u00a0 r1, [r0]<br \/>\nstr\u00a0\u00a0\u00a0\u00a0 r1, [r0] \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 @\u8bfb\u4e00\u6b21\u5916\u90e8\u4e2d\u65ad\u5f15\u811a\uff0c\u8bfb\u5b8c\u4e4b\u540e\u4e2d\u65ad\u4fe1\u53f7\u5c31\u90fd\u88ab\u6e05\u9664\uff0c\u4e0a\u9762\u5df2\u7ecf\u7981\u6b62\u4e86\u4e2d\u65ad\uff0c\u6240\u4ee5\u8bfb\u5b8c\u4e4b\u540e\u5c31\u4e0d\u4f1a\u518d\u4ea7\u751f\u4e2d\u65ad\u4e86\u3002<\/p>\n<p>ldr\u00a0\u00a0\u00a0\u00a0 r0, =ELFIN_VIC0_BASE_ADDR \u00a0\u00a0\u00a0\u00a0 @0x71200000 \u4e2d\u65ad\u63a7\u5236\u56680<br \/>\nldr\u00a0\u00a0\u00a0\u00a0 r1, =ELFIN_VIC1_BASE_ADDR \u00a0\u00a0\u00a0\u00a0 @0x71300000 \u4e2d\u65ad\u63a7\u5236\u56681<\/p>\n<p>@ Disable all interrupts (VIC0 and VIC1)<br \/>\nmvn\u00a0\u00a0\u00a0\u00a0 r3, #0x0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 @0\u53d6\u53cd\uff0c\u4e3a\u51681<br \/>\nstr\u00a0\u00a0\u00a0\u00a0 r3, [r0, #oINTMSK] \u00a0@\u4e2d\u65ad\u4f7f\u80fd\u6e05\u9664\u5bc4\u5b58\u5668\u5168\u90e8\u8bbe\u7f6e1\uff0c\u6e05\u9664\u6240\u6709\u4e2d\u65ad\u4f7f\u80fd<br \/>\nstr\u00a0\u00a0\u00a0\u00a0 r3, [r1, #oINTMSK]<\/p>\n<p>@ Set all interrupts as IRQ<br \/>\nmov\u00a0\u00a0\u00a0\u00a0 r3, #0x0<br \/>\nstr\u00a0\u00a0\u00a0\u00a0 r3, [r0, #oINTMOD] \u00a0@\u6240\u6709\u4e2d\u65ad\u8bbe\u7f6e\u4e3aIRQ\u4e2d\u65ad\u3002<br \/>\nstr\u00a0\u00a0\u00a0\u00a0 r3, [r1, #oINTMOD]<\/p>\n<p>@ Pending Interrupt Clear<br \/>\nmov\u00a0\u00a0\u00a0\u00a0 r3, #0x0<br \/>\nstr\u00a0\u00a0\u00a0\u00a0 r3, [r0, #oVECTADDR] \u00a0@\u8bbe\u7f6e\u77e2\u91cf\u5730\u5740\u5bc4\u5b58\u5668\uff08\u5f53\u524d\u4e2d\u65ad\u7684\u77e2\u91cf\u5730\u5740\uff09\u4e3a\u51680\u3002<br \/>\nstr\u00a0\u00a0\u00a0\u00a0 r3, [r1, #oVECTADDR]<\/p>\n<p>\/* init system clock *\/<br \/>\nbl system_clock_init \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0@\u521d\u59cb\u5316\u7cfb\u7edf\u65f6\u949f\u3002<\/p>\n<p>\/* for UART *\/<br \/>\nbl uart_asm_init \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 @\u521d\u59cb\u5316UART\u4e32\u53e3\u3002<\/p>\n<p>#if defined(CONFIG_NAND)<br \/>\n\/* simple init for NAND *\/<br \/>\nbl nand_asm_init \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 @NAND FLASH\u521d\u59cb\u5316\u3002<br \/>\n#endif<\/p>\n<p>#if 0<br \/>\nldr\u00a0\u00a0\u00a0\u00a0 r0, =0xff000fff<br \/>\nbic\u00a0\u00a0\u00a0\u00a0 r1, pc, r0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/* r0 &lt;- current base addr of code *\/<br \/>\nldr\u00a0\u00a0\u00a0\u00a0 r2, _TEXT_BASE\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/* r1 &lt;- original base addr in ram *\/<br \/>\nbic\u00a0\u00a0\u00a0\u00a0 r2, r2, r0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/* r0 &lt;- current base addr of code *\/<br \/>\ncmp \u00a0\u00a0\u00a0\u00a0 r1, r2\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/* compare r0, r1\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 *\/<br \/>\nbeq\u00a0\u00a0\u00a0\u00a0 1f\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/* r0 == r1 then skip sdram init\u00a0\u00a0 *\/<br \/>\n#endif<\/p>\n<p>bl\u00a0\u00a0\u00a0\u00a0 mem_ctrl_asm_init \u00a0 \u00a0 \u00a0@\u5185\u5b58\u63a7\u5236\u521d\u59cb\u5316\uff08\u53c2\u8003<span style=\"color: #2d4fc9;\"><b>cpu_init.S<\/b><\/span>\uff09\u3002<\/p>\n<p>#if 1<br \/>\nldr\u00a0\u00a0\u00a0\u00a0 r0, =(ELFIN_CLOCK_POWER_BASE+RST_STAT_OFFSET) @RESET\u72b6\u6001\uff0c0x7E00F904<br \/>\nldr\u00a0\u00a0\u00a0\u00a0 r1, [r0]<br \/>\nbic\u00a0\u00a0\u00a0\u00a0 r1, r1, #0xfffffff7<br \/>\ncmp\u00a0\u00a0\u00a0\u00a0 r1, #0x8<br \/>\nbeq\u00a0\u00a0\u00a0\u00a0 wakeup_reset \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 @SLEEP\u6a21\u5f0f\u5524\u9192\u5bfc\u81f4\u7684reset\u3002<\/p>\n<p>#endif<\/p>\n<p>1:<br \/>\nldr\u00a0\u00a0\u00a0\u00a0 r0, =ELFIN_UART_BASE<br \/>\nldr\u00a0\u00a0\u00a0\u00a0 r1, =0x4b4b4b4b<br \/>\nstr\u00a0\u00a0\u00a0\u00a0 r1, [r0, #UTXH_OFFSET] \u00a0@UART\u53d1\u9001\u7f13\u51b2\u533a\u8bbe\u7f6e\u4e3a&#8217;K&#8217;\u3002<\/p>\n<p>mov\u00a0\u00a0\u00a0\u00a0 lr, r12<br \/>\nmov\u00a0\u00a0\u00a0\u00a0 pc, lr \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 @\u521d\u59cb\u5316\u5b8c\u6210\uff0c\u8fd4\u56de\u3002<br \/>\n#if 1<br \/>\nwakeup_reset:<\/p>\n<p>\/*Clear wakeup status register*\/<br \/>\nldr\u00a0\u00a0\u00a0\u00a0 r0, =(ELFIN_CLOCK_POWER_BASE+WAKEUP_STAT_OFFSET)<br \/>\nldr\u00a0\u00a0\u00a0\u00a0 r1, [r0]<br \/>\nstr\u00a0\u00a0\u00a0\u00a0 r1, [r0] \u00a0 \u00a0 \u00a0 \u00a0 \u00a0@\u5199\u4e00\u6b21\u5524\u9192\u72b6\u6001\u5bc4\u5b58\u5668\uff0c\u53ef\u4ee5\u6e05\u9664\u6389\u8fd9\u4e9b\u72b6\u6001\u3002<span style=\"color: #ff0000;\">\u5e94\u8be5\u51991\uff0c\u8fd9\u91cc\u4e3a\u4ec0\u4e48\u53ea\u5199\u4e86\u4e00\u4e0b\u5462\uff1f<\/span><\/p>\n<p>\/*LED test*\/<br \/>\nldr\u00a0\u00a0\u00a0\u00a0 r0, =ELFIN_GPIO_BASE<br \/>\nldr\u00a0\u00a0\u00a0\u00a0 r1, =0x3000<br \/>\nstr\u00a0\u00a0\u00a0\u00a0 r1, [r0, #GPNDAT_OFFSET] @\u8bbe\u7f6eGPN14\u548cGPN13\u7684\u503c\u4e3a1\uff0c\u8ddfmini6410\u5b9e\u9645\u4e0d\u4e00\u81f4\uff0cmini6410\u7684LED\u5728GPK4,5,6,7\u3002<\/p>\n<p>\/*Load return address and jump to kernel*\/<br \/>\nldr\u00a0\u00a0\u00a0\u00a0 r0, =(ELFIN_CLOCK_POWER_BASE+INF_REG0_OFFSET) \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 @0x7E00FA00<br \/>\nldr\u00a0\u00a0\u00a0\u00a0 r1, [r0]\u00a0\u00a0\u00a0\u00a0 \/* r1 = physical address of s3c6400_cpu_resume function*\/ @s3c6400_cpu_resume\u51fd\u6570\u7684\u7269\u7406\u5730\u5740\u4fdd\u5b58\u5728\u8fd9\u91cc\u3002<br \/>\nmov\u00a0\u00a0\u00a0\u00a0 pc, r1\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/*Jump to kernel (sleep-s3c6400.S)*\/ \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0@\u8df3\u5230s3c6400_cpu_resume\u51fd\u6570\u6267\u884c\u3002<span style=\"color: #ff0000;\">s3c6400_cpu_resume\u627e\u4e0d\u5230\uff1f<\/span><br \/>\nnop<br \/>\nnop<br \/>\n#endif<br \/>\n\/*<br \/>\n* system_clock_init: Initialize core clock and bus clock.<br \/>\n* void system_clock_init(void)<br \/>\n*\/<br \/>\nsystem_clock_init:<br \/>\nldr\u00a0\u00a0\u00a0\u00a0 r0, =ELFIN_CLOCK_POWER_BASE\u00a0\u00a0\u00a0\u00a0 @0x7e00f000<\/p>\n<p>#ifdef\u00a0\u00a0\u00a0\u00a0 CONFIG_SYNC_MODE \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0@\u540c\u6b65\u6a21\u5f0f\u9009\u62e9\uff0c\u5185\u6838\u548c\u603b\u7ebf\u4e0d\u540c\u6b65\u65f6\uff0c\u9700\u7528\u5f02\u6b65\u6a21\u5f0f\u3002<br \/>\nldr\u00a0\u00a0\u00a0\u00a0 r1, [r0, #OTHERS_OFFSET]<br \/>\nmov\u00a0\u00a0\u00a0\u00a0 r2, #0x40<br \/>\norr\u00a0\u00a0\u00a0\u00a0 r1, r1, r2<br \/>\nstr\u00a0\u00a0\u00a0\u00a0 r1, [r0, #OTHERS_OFFSET] \u00a0 @\u8bbe\u7f6eSYNCMUX\u7684\u9009\u62e9\u4e3a1\uff0c\u5c31\u662fDOUTAPLL\uff0c\u5c31\u662f\u8ddfARM\u5185\u6838\u7528\u540c\u4e00\u4e2a\u9501\u76f8\u73af\u3002<\/p>\n<p>nop \u00a0 \u00a0 @\u7b49\u5f85\u7cfb\u7edf\u7a33\u5b9a\u3002<br \/>\nnop<br \/>\nnop<br \/>\nnop<br \/>\nnop<\/p>\n<p>ldr\u00a0\u00a0\u00a0\u00a0 r2, =0x80<br \/>\norr\u00a0\u00a0\u00a0\u00a0 r1, r1, r2<br \/>\nstr\u00a0\u00a0\u00a0\u00a0 r1, [r0, #OTHERS_OFFSET] \u00a0@\u8bbe\u7f6e\u540c\u6b65\u6a21\u5f0f\u4f4d7\u4e3a1\uff0c\u53d8\u6210\u540c\u6b65\u6a21\u5f0f\u3002<\/p>\n<p>check_syncack:<br \/>\nldr\u00a0\u00a0\u00a0\u00a0 r1, [r0, #OTHERS_OFFSET]<br \/>\nldr\u00a0\u00a0\u00a0\u00a0 r2, =0xf00<br \/>\nand\u00a0\u00a0\u00a0\u00a0 r1, r1, r2<br \/>\ncmp\u00a0\u00a0\u00a0\u00a0 r1, #0xf00 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0@\u6bd4\u8f830xf00\u548c(OTHERS\u7684\u540c\u6b65\u786e\u8ba4\u4f4d11,10,9,8\u7684\u503c\u548c0x0f00\u76f8\u4e0e)\u7684\u503c\uff0c\u4e0d\u7b49\u5219\u5faa\u73af\u7b49\u5f85\u3002\u56db\u4f4d\u51681\u8868\u793a\u540c\u6b65\u5b8c\u6210\u3002<br \/>\nbne\u00a0\u00a0\u00a0\u00a0 check_syncack<br \/>\n#else\u00a0\u00a0\u00a0\u00a0 \/* ASYNC Mode *\/<br \/>\nnop<br \/>\nnop<br \/>\nnop<br \/>\nnop<br \/>\nnop<\/p>\n<p>ldr\u00a0\u00a0\u00a0\u00a0 r1, [r0, #OTHERS_OFFSET]<br \/>\nbic\u00a0\u00a0\u00a0\u00a0 r1, r1, #0xC0<br \/>\norr\u00a0\u00a0\u00a0\u00a0 r1, r1, #0x40<br \/>\nstr\u00a0\u00a0\u00a0\u00a0 r1, [r0, #OTHERS_OFFSET] @\u8bbe\u7f6e\u4e3a\u5f02\u6b65\u6a21\u5f0f\uff0cSYNCMUX\u7684\u9009\u62e9\u4e3a1\uff0c\u5c31\u662fDOUTAPLL\uff0c\u4e0b\u9762\u53c8\u8bbe\u7f6e\u62100\uff0c<span style=\"color: #ff0000;\">\u4e3a\u4ec0\u4e48\u8981\u8fd9\u6837\u505a\u5462\uff1f<\/span><\/p>\n<p>wait_for_async:<br \/>\nldr\u00a0\u00a0\u00a0\u00a0 r1, [r0, #OTHERS_OFFSET]<br \/>\nand\u00a0\u00a0\u00a0\u00a0 r1, r1, #0xf00<br \/>\ncmp\u00a0\u00a0\u00a0\u00a0 r1, #0x0<br \/>\nbne\u00a0\u00a0\u00a0\u00a0 wait_for_async \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 @\u540c\u6b65\u786e\u8ba4\u56db\u4f4d\u4e3a\u51680\uff0c\u8868\u793a\u5f02\u6b65\u6a21\u5f0f\u7a33\u5b9a\u4e0b\u6765\u3002<\/p>\n<p>ldr\u00a0\u00a0\u00a0\u00a0 r1, [r0, #OTHERS_OFFSET]<br \/>\nbic\u00a0\u00a0\u00a0\u00a0 r1, r1, #0x40<br \/>\nstr\u00a0\u00a0\u00a0\u00a0 r1, [r0, #OTHERS_OFFSET] \u00a0@\u8bbe\u7f6eSYNCMUX\u7684\u9009\u62e9\u4e3a0\uff0c\u5c31\u662fMOUTPLL\u3002<br \/>\n#endif<\/p>\n<p>mov\u00a0\u00a0\u00a0\u00a0 r1, #0xff00<br \/>\norr\u00a0\u00a0\u00a0\u00a0 r1, r1, #0xff<br \/>\nstr\u00a0\u00a0\u00a0\u00a0 r1, [r0, #APLL_LOCK_OFFSET]<br \/>\nstr\u00a0\u00a0\u00a0\u00a0 r1, [r0, #MPLL_LOCK_OFFSET]<br \/>\nstr\u00a0\u00a0\u00a0\u00a0 r1, [r0, #EPLL_LOCK_OFFSET] \u00a0@\u8bbe\u7f6e\u65f6\u949f\u8f93\u51fa\u7a33\u5b9a\u65f6\u95f4\u4e3a\u6700\u5927<br \/>\n\/* CLKUART(=66.5Mhz) = CLKUART_input(532\/2=266Mhz) \/ (UART_RATIO(3)+1) *\/<br \/>\n\/* CLKUART(=50Mhz) = CLKUART_input(400\/2=200Mhz) \/ (UART_RATIO(3)+1) *\/<br \/>\n\/* Now, When you use UART CLK SRC by EXT_UCLK1, We support 532MHz &amp; 400MHz value *\/<\/p>\n<p>#if defined(CONFIG_CLKSRC_CLKUART)<br \/>\nldr\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0 r1, [r0, #CLK_DIV2_OFFSET]<br \/>\nbic\u00a0\u00a0\u00a0\u00a0 r1, r1, #0x70000<br \/>\norr\u00a0\u00a0\u00a0\u00a0 r1, r1, #0x30000<br \/>\nstr\u00a0\u00a0\u00a0\u00a0 r1, [r0, #CLK_DIV2_OFFSET] \u00a0@\u8bbe\u7f6eUART_RATIO\u4e3a3\uff0c\u5373\u56db\u5206\u9891\u3002<br \/>\n#endif<\/p>\n<p>ldr\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0 r1, [r0, #CLK_DIV0_OFFSET]\u00a0\u00a0\u00a0\u00a0 \/*Set Clock Divider*\/<br \/>\nbic\u00a0\u00a0\u00a0\u00a0 r1, r1, #0x30000<br \/>\nbic\u00a0\u00a0\u00a0\u00a0 r1, r1, #0xff00<br \/>\nbic\u00a0\u00a0\u00a0\u00a0 r1, r1, #0xff<br \/>\nldr\u00a0\u00a0\u00a0\u00a0 r2, =CLK_DIV_VAL<br \/>\norr\u00a0\u00a0\u00a0\u00a0 r1, r1, r2<br \/>\nstr\u00a0\u00a0\u00a0\u00a0 r1, [r0, #CLK_DIV0_OFFSET] \u00a0 @\u8bbe\u7f6e\u65f6\u949f\u5206\u9891\uff0cPCLK_RATIO,HCLK2_RATIO,HCLK_RATIO,MPLL_RATIO,APLL_RATIO\u3002<\/p>\n<p>ldr\u00a0\u00a0\u00a0\u00a0 r1, =APLL_VAL<br \/>\nstr\u00a0\u00a0\u00a0\u00a0 r1, [r0, #APLL_CON_OFFSET] \u00a0@\u8bbe\u7f6eAPLL_MDIV,APLL_PDIV,APLL_SDIV\u3002<br \/>\nldr\u00a0\u00a0\u00a0\u00a0 r1, =MPLL_VAL<br \/>\nstr\u00a0\u00a0\u00a0\u00a0 r1, [r0, #MPLL_CON_OFFSET] \u00a0@\u8bbe\u7f6eMPLL_MDIV,MPLL_PDIV,MPLL_SDIV\u3002<\/p>\n<p>ldr\u00a0\u00a0\u00a0\u00a0 r1, =0x80200203\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/* FOUT of EPLL is 96MHz *\/<br \/>\nstr\u00a0\u00a0\u00a0\u00a0 r1, [r0, #EPLL_CON0_OFFSET]<br \/>\nldr\u00a0\u00a0\u00a0\u00a0 r1, =0x0<br \/>\nstr\u00a0\u00a0\u00a0\u00a0 r1, [r0, #EPLL_CON1_OFFSET] \u00a0@\u8bbe\u7f6eEPLL_MDIV,EPLL_PDIV,EPLL_SDIV,EPLL_KDIV\u3002<\/p>\n<p>ldr\u00a0\u00a0\u00a0\u00a0 r1, [r0, #CLK_SRC_OFFSET]\u00a0\u00a0\u00a0\u00a0 \/* APLL, MPLL, EPLL select to Fout *\/<\/p>\n<p>#if defined(CONFIG_CLKSRC_CLKUART)<br \/>\nldr\u00a0\u00a0\u00a0\u00a0 r2, =0x2007<br \/>\n#else<br \/>\nldr\u00a0\u00a0\u00a0\u00a0 r2, =0x7<br \/>\n#endif<br \/>\norr\u00a0\u00a0\u00a0\u00a0 r1, r1, r2<\/p>\n<p>str\u00a0\u00a0\u00a0\u00a0 r1, [r0, #CLK_SRC_OFFSET] \u00a0@\u8bbe\u7f6eAPLL,MPLL,EPLL\u65f6\u949f\u6e90\u4e3aFOUT\uff0cUART\u4e3aDOUT\uff08\u540c\u6b65\u6a21\u5f0f\u8bbe\u7f6e\u4e3aDOUT\uff0c\u5f02\u6b65\u6a21\u5f0f\u8bbe\u7f6e\u4e3aMOUT\uff09\u3002<\/p>\n<p>\/* wait at least 200us to stablize all clock *\/<br \/>\nmov\u00a0\u00a0\u00a0\u00a0 r1, #0x10000<br \/>\n1:\u00a0\u00a0\u00a0\u00a0 subs\u00a0\u00a0\u00a0\u00a0 r1, r1, #1<br \/>\nbne\u00a0\u00a0\u00a0\u00a0 1b \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 @\u7b49\u5f85\u6240\u6709\u65f6\u949f\u7a33\u5b9a\u3002<br \/>\n#if 0<br \/>\nmrc\u00a0\u00a0\u00a0\u00a0 p15, 0, r0, c1, c0, 0<br \/>\norr\u00a0\u00a0\u00a0\u00a0 r0, r0, #0xc0000000\u00a0\u00a0\u00a0\u00a0 \/* clock setting in MMU *\/<br \/>\nmcr\u00a0\u00a0\u00a0\u00a0 p15, 0, r0, c1, c0, 0<br \/>\n#endif<\/p>\n<p>#ifdef CONFIG_SYNC_MODE\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/* Synchronization for VIC port *\/<br \/>\nldr\u00a0\u00a0\u00a0\u00a0 r1, [r0, #OTHERS_OFFSET]<br \/>\norr\u00a0\u00a0\u00a0\u00a0 r1, r1, #0x20<br \/>\nstr\u00a0\u00a0\u00a0\u00a0 r1, [r0, #OTHERS_OFFSET] \u00a0 \u00a0@\u624b\u518c\u4e0a\u4e3a\u4fdd\u7559\uff0c<span style=\"color: #ff0000;\">\u8fd9\u91cc\u662f\u4e3a\u4e86\u517c\u5bb9\u8001\u7684\uff1f<\/span><br \/>\n#else<br \/>\nldr\u00a0\u00a0\u00a0\u00a0 r1, [r0, #OTHERS_OFFSET]<br \/>\nbic\u00a0\u00a0\u00a0\u00a0 r1, r1, #0x20<br \/>\nstr\u00a0\u00a0\u00a0\u00a0 r1, [r0, #OTHERS_OFFSET]<br \/>\n#endif<br \/>\nmov\u00a0\u00a0\u00a0\u00a0 pc, lr<\/p>\n<p>\/*<br \/>\n* uart_asm_init: Initialize UART in asm mode, 115200bps fixed.<br \/>\n* void uart_asm_init(void)<br \/>\n*\/<br \/>\nuart_asm_init:<br \/>\n\/* set GPIO to enable UART *\/<br \/>\n@ GPIO setting for UART<br \/>\nldr\u00a0\u00a0\u00a0\u00a0 r0, =ELFIN_GPIO_BASE<br \/>\nldr\u00a0\u00a0\u00a0\u00a0 r1, =0x22222222<br \/>\nstr\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0 r1, [r0, #GPACON_OFFSET] \u00a0@\u8bbe\u7f6eGPA0-GPA7\u53e3\u4e3aUART\u7528<br \/>\nldr\u00a0\u00a0\u00a0\u00a0 r1, =0x2222<br \/>\nstr\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0 r1, [r0, #GPBCON_OFFSET] \u00a0@\u8bbe\u7f6eGPB0-GPB3\u4e3aUART\u7528<\/p>\n<p>ldr\u00a0\u00a0\u00a0\u00a0 r0, =ELFIN_UART_CONSOLE_BASE\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 @0x7F005000<br \/>\nmov\u00a0\u00a0\u00a0\u00a0 r1, #0x0<br \/>\nstr\u00a0\u00a0\u00a0\u00a0 r1, [r0, #UFCON_OFFSET] \u00a0 \u00a0 \u00a0 \u00a0@\u6b63\u5e38\u6a21\u5f0f\uff0c\u65e0\u6821\u9a8c\uff0c1bit\u505c\u6b62\u4f4d\uff0c5bit\u6570\u636e\u4f4d\u3002<br \/>\nstr\u00a0\u00a0\u00a0\u00a0 r1, [r0, #UMCON_OFFSET] \u00a0 \u00a0 \u00a0 @FIFO\u4e3a63\u5b57\u8282\uff0c\u6ca1\u6709\u6d41\u91cf\u63a7\u5236\uff0c\u6ca1\u6709\u4e2d\u65ad\uff0cRTS\u4e0d\u4f7f\u80fd\u3002<\/p>\n<p>mov\u00a0\u00a0\u00a0\u00a0 r1, #0x3\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0 @was 0.<br \/>\nstr\u00a0\u00a0\u00a0\u00a0 r1, [r0, #ULCON_OFFSET] \u00a0 \u00a0 \u00a0 \u00a0@\u8bbe\u7f6e\u4e3a8bit\u6570\u636e\u4f4d<\/p>\n<p>#if defined(CONFIG_CLKSRC_CLKUART)<br \/>\nldr\u00a0\u00a0\u00a0\u00a0 r1, =0xe45\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/* UARTCLK SRC = 11 =&gt; EXT_UCLK1*\/<br \/>\n#else<br \/>\nldr\u00a0\u00a0\u00a0\u00a0 r1, =0x245\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/* UARTCLK SRC = x0 =&gt; PCLK *\/<br \/>\n#endif<\/p>\n<p>str\u00a0\u00a0\u00a0\u00a0 r1, [r0, #UCON_OFFSET] \u00a0@\u8bbe\u7f6e\u63a5\u6536\u8d85\u65f6\u4e2d\u65ad\u4e0d\u4f7f\u80fd\uff0c\u4f7f\u80fd\u63a5\u6536\u9519\u8bef\u4e2d\u65ad\uff0c\u975e\u73af\u56de\u6a21\u5f0f\uff0c\u6b63\u5e38\u4f20\u8f93\uff0c\u4e2d\u65ad\u65b9\u5f0f\u53d1\u9001\uff0c\u4e2d\u65ad\u65b9\u5f0f\u63a5\u6536\u3002\u7535\u5e73\u65b9\u5f0f\u7684\u63a5\u6536\u3001\u53d1\u9001\u4e2d\u65ad\uff0c\u65f6\u949f\u4e3aUCLK1\u6216PCLK\u3002<\/p>\n<p>#if defined(CONFIG_UART_50)<br \/>\nldr\u00a0\u00a0\u00a0\u00a0 r1, =0x1A<br \/>\n#elif defined(CONFIG_UART_66)<br \/>\nldr\u00a0\u00a0\u00a0\u00a0 r1, =0x22<br \/>\n#else<br \/>\nldr\u00a0\u00a0\u00a0\u00a0 r1, =0x1A<br \/>\n#endif<br \/>\nstr\u00a0\u00a0\u00a0\u00a0 r1, [r0, #UBRDIV_OFFSET] \u00a0@\u8bbe\u7f6e\u6ce2\u7279\u7387\u6574\u6570\u90e8\u5206\uff1a(66000000\/(115200X16))-1=34.81, 34\u768416\u8fdb\u5236\u4e3a0x22\u3002<\/p>\n<p>#if defined(CONFIG_UART_50)<br \/>\nldr\u00a0\u00a0\u00a0\u00a0 r1, =0x3<br \/>\n#elif defined(CONFIG_UART_66)<br \/>\nldr\u00a0\u00a0\u00a0\u00a0 r1, =0x1FFF<br \/>\n#else<br \/>\nldr\u00a0\u00a0\u00a0\u00a0 r1, =0x3<br \/>\n#endif<br \/>\nstr\u00a0\u00a0\u00a0\u00a0 r1, [r0, #UDIVSLOT_OFFSET] \u00a0@\u8bbe\u7f6e\u6ce2\u7279\u7387\u5c0f\u6570\u90e8\u5206\uff1a(UDIVSLOT\u4e2d1\u7684\u4e2a\u6570)\/16=0.81\uff0c\u5219UDIVSLOT\u4e2d1\u7684\u4e2a\u6570\uff1d12.92\uff0c\u53d6\u6574\u4e3a13\u4e2a\uff0c\u800c0x1fff\u6b63\u597d\u670913\u4e2a\u4e8c\u8fdb\u52361\u548c3\u4e2a\u4e8c\u8fdb\u52360\u3002<\/p>\n<p>ldr\u00a0\u00a0\u00a0\u00a0 r1, =0x4f4f4f4f<br \/>\nstr\u00a0\u00a0\u00a0\u00a0 r1, [r0, #UTXH_OFFSET]\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 @&#8217;O&#8217;\uff0c\u53d1\u9001\u7f13\u51b2\u5bc4\u5b58\u5668\u91cc\u9762\u586b\u5165&#8217;O&#8217;\u5b57\u7b26\u3002<\/p>\n<p>mov\u00a0\u00a0\u00a0\u00a0 pc, lr<\/p>\n<p>\/*<br \/>\n* Nand Interface Init for SMDK6400 *\/<br \/>\nnand_asm_init:<br \/>\nldr\u00a0\u00a0\u00a0\u00a0 r0, =ELFIN_NAND_BASE \u00a0 \u00a0 \u00a0 \u00a0 \u00a0@0x70200000<br \/>\nldr\u00a0\u00a0\u00a0\u00a0 r1, [r0, #NFCONF_OFFSET]<br \/>\norr\u00a0\u00a0\u00a0\u00a0 r1, r1, #0x70<br \/>\norr\u00a0\u00a0\u00a0\u00a0 r1, r1, #0x7700<br \/>\nstr\u00a0\u00a0\u00a0\u00a0 r1, [r0, #NFCONF_OFFSET] \u00a0 @\u8bbe\u7f6eTACLS\uff08\u4fe1\u53f7\u6e05\u9664\uff09,TWRPH0\uff08\u8bfb\u5199\u9636\u6bb50\uff09,TWRPH1\uff08\u8bfb\u5199\u9636\u6bb51\uff09\uff08NAND\u65f6\u5e8f\u56fe\u4e0a\u6709\uff09\u7684\u6301\u7eed\u65f6\u95f4\u3002<\/p>\n<p>ldr\u00a0\u00a0\u00a0\u00a0 r1, [r0, #NFCONT_OFFSET]<br \/>\norr\u00a0\u00a0\u00a0\u00a0 r1, r1, #0x03<br \/>\nstr\u00a0\u00a0\u00a0\u00a0 r1, [r0, #NFCONT_OFFSET] \u00a0 @\u4e3a\u4e86\u8001\u82af\u7247\u517c\u5bb9\uff0cs3c6410x\u4f4e\u56db\u4f4d\u4e3a\u4fdd\u7559\u3002<\/p>\n<p>mov\u00a0\u00a0\u00a0\u00a0 pc, lr<\/p>\n<p>#ifdef CONFIG_ENABLE_MMU<\/p>\n<p>\/*<br \/>\n* MMU Table for SMDK6400<br \/>\n*\/<\/p>\n<p>\/* form a first-level section entry *\/<br \/>\n.macro FL_SECTION_ENTRY base,ap,d,c,b \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0@\u5b9a\u4e49\u4e00\u4e2a\u53ef\u4ee5\u751f\u6210\u63cf\u8ff0\u7b26\u7684\u5b8f\uff0c\u6309\u7167section\u65b9\u5f0f\u6620\u5c04\uff0c\u6bcf\u4e2asection\u5fc5\u987b\u662f1M\uff0c\u536020\u4f4d\u5730\u5740\uff0c\u8fd9\u91cc\u5171256M\u7269\u7406\u5185\u5b58\uff0c\u6620\u5c04\u5230\u6574\u4e2a\u5730\u5740\u7a7a\u95f44G\uff0c\u6240\u4ee5\u5171\u67094096\uff080x1000\uff09\u4e2a\u63cf\u8ff0\u7b26\u3002\u865a\u62df\u5730\u5740\u7684\u9ad812\u4f4d\uff084096\uff09\u4f5c\u4e3a\u63cf\u8ff0\u7b26\u4f4d\u7f6e\uff0c\u4f4e20\u4f4d\u4f5c\u4e3asection\u91cc\u9762\u7684\u5730\u5740\u3002\u4ece\u4e0b\u9762\u6620\u5c04\u8868\u770b\u51fa\u6765\uff0c\u865a\u62df\u5730\u57400x00000000-0xa0000000\u8ddf\u5bf9\u5e94\u7684\u7269\u7406\u5730\u5740\u662f\u4e00\u81f4\u7684\uff0c\u865a\u62df\u5730\u57400xa0000000-0xc0000000\u548c0xc8000000-0xffffffff\u6ca1\u6709\u7269\u7406\u5730\u5740\u5bf9\u5e94\uff0c\u865a\u62df\u5730\u57400xc0000000-0xc8000000\u8ddf\u7269\u7406\u5730\u57400x50000000-0x58000000\u76f8\u5bf9\u5e94\uff0c\u6240\u4ee5TEXT_BASE\u57fa\u5730\u5740\u6ca1\u6709MMU\u65f6\u5c31\u662f\u7269\u7406\u5730\u57400x57e00000\uff0c\u6709MMU\u65f6\u5bf9\u5e94\u7684\u865a\u62df\u5730\u5740\u5c31\u662f0xc7e00000\u3002<br \/>\n.word (\\base &lt;&lt; 20) | (\\ap &lt;&lt; 10) | \\<br \/>\n(\\d &lt;&lt; 5) | (1&lt;&lt;4) | (\\c &lt;&lt; 3) | (\\b &lt;&lt; 2) | (1&lt;&lt;1) \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0@\u63cf\u8ff0\u7b26\u7684\u6700\u4f4e\u4e24\u4f4d00\u4e3a\u65e0\u6548\uff0c01\u4e3a\u4e8c\u7ea7\u9875\u8868\u65b9\u5f0f\uff08\u7531\u9ad8\u5730\u574012\u4f4d\u7684\u4e00\u7ea7\u9875\u8868(TTB\u7684\u9ad818\u4f4d\u6307\u5b9a\u7684\u865a\u62df\u57fa\u5730\u5740)\u4f4d\u7f6e\u53d6\u51fa\u5bf9\u5e94\u4e8c\u7ea7\u9875\u8868(coarse page table)\u7684\u57fa\u5730\u5740\uff0c\u7531\u4e2d\u95f4\u5730\u57408\u4f4d\u7684\u4e8c\u7ea7\u9875\u8868\u53d6\u51fa\u5bf9\u5e944KB\u9875\u8868\uff08small page\uff09\u7684\u57fa\u5730\u5740\uff0c\u6700\u540e\u7531\u4f4e12\u4e3a\u5730\u5740\u7684\u9875\u8868\u53d6\u51fa\u6700\u7ec8\u7684\u5185\u5b58\u503c\uff09\uff0c10\u4e3a\u4e00\u7ea7\u9875\u8868\u65b9\u5f0f\uff08\u5982\u679cbit18\u4e3a0\uff0c\u5219\u4e3asection\uff0cbit18\u4e3a1\uff0c\u5219\u4e3asupersection\uff09\uff0c11\u4fdd\u7559\u3002<br \/>\n.endm<br \/>\n.section .mmudata, &#8220;a&#8221; \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0@\u5b9a\u4e49MMU\u6570\u636e\u6bb5\uff0c\u5728lds\u6587\u4ef6\u91cc\u9762\u7528\u5230\u4e86\uff0c\u201ca\u201d\u8868\u793a\u8fd9\u662f\u4e00\u4e2a\u9700\u8981\u9274\u6743\u7684\u6bb5<br \/>\n.align 14<br \/>\n\/\/ the following alignment creates the mmu table at address 0x4000. \u00a0 \u00a0 \u00a0 \u00a0@\u5bf9\u9f50\u52300x4000\uff0816KB\uff09\u7684\u6574\u6570\u500d\u4f4d\u7f6e\uff0c\u56e0\u4e3aTTB\u5bc4\u5b58\u5668\u53ea\u4fdd\u5b58MMU\u8868\u7684\u9ad818\u4f4d\u5730\u5740\uff0816KB\u5bf9\u9f50\u4f4d\u7f6e\uff09\uff0c\u6240\u4ee5\u5fc5\u987b14\u4f4d\u5bf9\u9f50\u3002<br \/>\n.globl mmu_table \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0@\u5728start.S\u4e2d\u4f7f\u80fdMMU\u7684\u65f6\u5019\u7528\u5230\u4e86\u3002<br \/>\nmmu_table:<br \/>\n.set __base,0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 @\u524d0xa00\uff082560\uff09\u4e2a\u63cf\u8ff0\u7b26\u5b9a\u4e49\uff0cap\u4e3a3\u8868\u793a\u8bfb\u5199\u5141\u8bb8\u3002c\uff0cb\u6bd4\u7279\u4e3a00\u8868\u793a\u5171\u4eab\uff0c\u4e92\u65a5\u8bfb\u5199\u3002d\u4e3a0\u8868\u793a\u8fd9\u4e9b\u63cf\u8ff0\u7b26\u90fd\u5c5e\u4e8edomain0\uff08domain\u7528\u6765\u505a\u6743\u9650\u63a7\u5236\uff09\u3002<br \/>\n\/\/ 1:1 mapping for debugging<br \/>\n.rept 0xA00<br \/>\nFL_SECTION_ENTRY __base,3,0,0,0<br \/>\n.set __base,__base+1<br \/>\n.endr<\/p>\n<p>\/\/ access is not allowed.<br \/>\n.rept 0xC00 &#8211; 0xA00 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 @\u4ece0xa00-0xc00\u5171512\u4e2a\u63cf\u8ff0\u7b26\uff0cap\u4e3a0\u8868\u793a\u4e0d\u5141\u8bb8\u8bbf\u95ee\u3002<br \/>\n.word 0x00000000<br \/>\n.endr<\/p>\n<p>\/\/ 128MB for SDRAM 0xC0000000 -&gt; 0x50000000<br \/>\n.set __base, 0x500\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0@\u4ece0xc00\uff0d0xc80\u5171128\u4e2a\u63cf\u8ff0\u7b26\uff08\u56e0\u4e3a\u6bcf\u4e2a\u63cf\u8ff0\u7b26\u4ee3\u88681M\uff0c\u5c31\u662f128MB\uff09\u5b9a\u4e49\uff0ccb\u6bd4\u7279\u4e3a11\u8868\u793a\u5185\u5b58\u8f93\u5165\u8f93\u51fa\u90fd\u4e3a\u56de\u5199\u6a21\u5f0f\u3002<br \/>\n.rept 0xC80 &#8211; 0xC00<br \/>\nFL_SECTION_ENTRY __base,3,0,1,1<br \/>\n.set __base,__base+1<br \/>\n.endr<\/p>\n<p>\/\/ access is not allowed.<br \/>\n.rept 0x1000 &#8211; 0xc80 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 @\u4ece0xc80-0x1000\u5171896\u4e2a\u63cf\u8ff0\u7b26\uff0c\u4e0d\u5141\u8bb8\u8bbf\u95ee\u3002<br \/>\n.word 0x00000000<br \/>\n.endr<\/p>\n<p>#endif<\/p><\/div>\n","protected":false},"excerpt":{"rendered":"<p>\u6587\u4ef6\uff1au-boot\/board\/samsung\/mini6410\/lowlevel_init.S #inclu &hellip;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[6],"tags":[233,48,49],"class_list":["post-292","post","type-post","status-publish","format-standard","hentry","category-6","tag-lowlevel_init-s","tag-mini6410","tag-uboot"],"views":1381,"_links":{"self":[{"href":"http:\/\/www.max-shu.com\/blog\/index.php?rest_route=\/wp\/v2\/posts\/292","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/www.max-shu.com\/blog\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/www.max-shu.com\/blog\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/www.max-shu.com\/blog\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/www.max-shu.com\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=292"}],"version-history":[{"count":1,"href":"http:\/\/www.max-shu.com\/blog\/index.php?rest_route=\/wp\/v2\/posts\/292\/revisions"}],"predecessor-version":[{"id":293,"href":"http:\/\/www.max-shu.com\/blog\/index.php?rest_route=\/wp\/v2\/posts\/292\/revisions\/293"}],"wp:attachment":[{"href":"http:\/\/www.max-shu.com\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=292"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/www.max-shu.com\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=292"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/www.max-shu.com\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=292"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}