一起學(xué)mini2440裸機(jī)開發(fā)(二)--MDK自帶的S3C2440s分析_第1頁(yè)
一起學(xué)mini2440裸機(jī)開發(fā)(二)--MDK自帶的S3C2440s分析_第2頁(yè)
一起學(xué)mini2440裸機(jī)開發(fā)(二)--MDK自帶的S3C2440s分析_第3頁(yè)
一起學(xué)mini2440裸機(jī)開發(fā)(二)--MDK自帶的S3C2440s分析_第4頁(yè)
一起學(xué)mini2440裸機(jī)開發(fā)(二)--MDK自帶的S3C2440s分析_第5頁(yè)
已閱讀5頁(yè),還剩14頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、一起學(xué)mini2440裸機(jī)開發(fā)(二)-MDK自帶的S3C2440.s分析上一節(jié),咱們?cè)诮⒐こ痰臅r(shí)候,默認(rèn)的是使用MDK自帶的啟動(dòng)代碼,這些啟動(dòng)代碼到底做了什么工作呢?在這里我想探究一下,探究不全沒什么事,能看懂個(gè)大概就行了。   我先申明一下,其實(shí)我并不是頭一次學(xué)ARM裸機(jī),我先前已經(jīng)按照韋東山的使用arm-linux-gcc在linux下編譯裸機(jī)程序的方法走了一遍了,用那個(gè)方法的話對(duì)以后的uboot移植非常有幫助,但是有一個(gè)不方便的就是,使用Linux系統(tǒng)下編譯裸機(jī)程序,很多自帶的庫(kù)函數(shù)不能用,比如print()函數(shù)我都不能用,主要是我的水平不行,不會(huì)用,其實(shí)可以用的。

2、所以現(xiàn)在想認(rèn)真的再用編譯器學(xué)一下ARM裸機(jī),裸機(jī)學(xué)好了,對(duì)驅(qū)動(dòng)開發(fā)很有幫助的。  所以,很可能我講的可能細(xì)節(jié)上照顧不到?jīng)]接觸過ARM裸機(jī)的,在此深感抱歉。我也只是想把自己的學(xué)習(xí)弄成筆記而已。  言歸正傳,下面進(jìn)行S3C2440.s的分析,初學(xué)者這一節(jié)可以略過。1、首先,了解一下這個(gè)文件都要完成那些功能。     看門狗初始化(可以選擇是否初始化)     時(shí)鐘初始化(可以選擇是否初始化)     存儲(chǔ)控制器初始化(可以選擇是否初始化)  

3、;   GPIO口初始化(可以選擇是否初始化)     堆棧初始化(沒有選擇性,必須初始化)     跳轉(zhuǎn)到C文件的main函數(shù)執(zhí)行2、其實(shí)知道上面文件做了哪些工作就行了,下面具體分析一下    /*/;/* S3C2440.S: Startup file for Samsung S3C2440             

4、0;                  */;/*/;/*;*啟動(dòng)代碼S3C2440.S是在CPU復(fù)位后執(zhí)行的。這個(gè)文件會(huì)根據(jù)以下的;*SET標(biāo)志來進(jìn)行翻譯執(zhí)行。;*NO_CLOCK_SETUP:啟動(dòng)代碼不初始化時(shí)鐘(這種情況大多出現(xiàn)在時(shí)鐘已經(jīng)在script.ini文件中初始化時(shí));*NO_MC_SETUP:啟動(dòng)代碼不初始化寄存器控制器。;*NO_GP_SETUP:啟動(dòng)代碼不初始化GPIO口;* RAM_INTVEC:啟動(dòng)代碼

5、將異常向量表從執(zhí)行地址處復(fù)制到RAM中去 CPSR中的低8位。I:IRQ中斷禁止位,置位禁止。F:FIQ中斷禁止位,置位禁止。 T:CPU狀態(tài)位(ARM或者THUMB)。M4-M0:工作模式選擇位76543210IFTM4M3M2M1M0 程序狀態(tài)寄存器的格式M4:0工作模式10000用戶模式10001快中斷模式10010中斷模式10011管理模式10111數(shù)據(jù)訪問中止模式11011未定義指令中止模式11111系統(tǒng)模式;狀態(tài)寄存器CPSR中的標(biāo)準(zhǔn)的模式位和中斷位的宏定義Mode_USR        EQ

6、U     0x10   用戶模式Mode_FIQ        EQU     0x11     快中斷模式Mode_IRQ        EQU     0x12    中斷模式Mode_SVC  

7、;      EQU     0x13   管理模式Mode_ABT        EQU     0x17   數(shù)據(jù)訪問中止模式Mode_UND        EQU     0x1B  未定義指令中止模式M

8、ode_SYS        EQU     0x1F   系統(tǒng)模式I_Bit           EQU     0x80             when I bit is set, IRQ is

9、 disabledF_Bit           EQU     0x40             when F bit is set, FIQ is disabled;棧(Stack)設(shè)置。不同工作模式的堆棧寄存器sp不一樣。;設(shè)置棧空間UND_Stack_Size  EQU     0

10、x00000000  未定義模式SVC_Stack_Size  EQU     0x00000008  管理模式棧長(zhǎng)度ABT_Stack_Size  EQU     0x00000000  數(shù)據(jù)訪問中止模式棧長(zhǎng)度FIQ_Stack_Size  EQU     0x00000000   快中斷模式棧長(zhǎng)度IRQ_Stack_Size  EQU 

11、;    0x00000080  ;中斷模式棧長(zhǎng)度USR_Stack_Size  EQU     0x00000400 用戶模式棧長(zhǎng)度ISR_Stack_Size  EQU     (UND_Stack_Size + SVC_Stack_Size + ABT_Stack_Size +              

12、0;           FIQ_Stack_Size + IRQ_Stack_Size)      所有的堆棧大小進(jìn)行相加,得到總堆棧大小;/*;arm的匯編程序由段組成,段是相對(duì)獨(dú)立的指令或數(shù)據(jù)單位,每個(gè)段由AREA偽指令定義,并定義段的屬性;READWRITE(讀寫)READONLY(只讀)NOINIT(不初始化內(nèi)存單元或?qū)?nèi)存寫0) */       

13、;         AREA    STACK, NOINIT, READWRITE, ALIGN=3  定義棧段,段名為STACK,字節(jié)對(duì)齊方式Stack_Mem       SPACE   USR_Stack_Size   SPACE指令用于分配一塊內(nèi)存單元。這里分別為這兩個(gè)棧分配對(duì)應(yīng)_initial_sp    SPACE

14、   ISR_Stack_Size        ;長(zhǎng)度的內(nèi)存空間Stack_Top    EQU  Stack_Mem + ISR_Stack_Size /定義棧開始地址(最大地址,堆棧向下訪問) 堆(heap)配置;堆大小(單位:字節(jié))Heap_Size       EQU     0x00000000  系統(tǒng)的堆空間設(shè)定/

15、定義堆空間大小(配合最后的動(dòng)態(tài)內(nèi)存申請(qǐng)使用)                AREA    HEAP, NOINIT, READWRITE, ALIGN=3  定義堆段,段名:HEAP,不初始化內(nèi)存,可讀寫,字節(jié)對(duì)齊_heap_baseHeap_Mem        SPACE   Heap_Size

16、0;    ;申請(qǐng)堆的內(nèi)存空間_heap_limit;-存儲(chǔ)器設(shè)定 -IRAM_BASE       EQU     0x40000000   內(nèi)存基地址;-看門狗定義 -WT_BASE         EQU     0x53000000       看門狗

17、寄存器基地址WTCON_OFS       EQU     0x00             看門狗控制寄存器 對(duì)應(yīng)基地址的偏移值WTDAT_OFS       EQU     0x04        

18、;     看門狗數(shù)據(jù)寄存器  對(duì)應(yīng)基地址的偏移值WTCNT_OFS       EQU     0x08             看門狗計(jì)數(shù)寄存器 對(duì)應(yīng)基地址的偏移值;看門狗時(shí)鐘設(shè)置WT_SETUP        EQU   &

19、#160; 1           看門狗設(shè)置WTCON_Val       EQU     0x00000000   看門狗控制寄存器相關(guān)WTDAT_Val       EQU     0x00008000    看門

20、狗數(shù)據(jù)寄存器相關(guān);- 時(shí)鐘管理定義 -CLOCK_BASE      EQU     0x4C000000       時(shí)鐘寄存器基地址LOCKTIME_OFS    EQU     0x00            PLL鎖定時(shí)間計(jì)數(shù)器對(duì)應(yīng)基地址的偏

21、移值MPLLCON_OFS     EQU     0x04            ; MPLL配置寄存器對(duì)應(yīng)基地址的偏移值UPLLCON_OFS     EQU     0x08            ; UPLL配置

22、寄存器對(duì)應(yīng)基地址的偏移值CLKCON_OFS      EQU     0x0C             時(shí)鐘控制器對(duì)應(yīng)基地址的偏移值CLKSLOW_OFS     EQU     0x10          

23、   慢時(shí)鐘控制寄存器對(duì)應(yīng)基地址的偏移值CLKDIVN_OFS     EQU     0x14             時(shí)鐘分頻控制器對(duì)應(yīng)基地址的偏移值CAMDIVN_OFS     EQU     0x18       

24、60;    ; 攝像時(shí)鐘分頻控制器對(duì)應(yīng)基地址的偏移值;時(shí)鐘相關(guān)寄存器設(shè)置值的宏定義CLOCK_SETUP     EQU     0                   ;時(shí)鐘設(shè)置   ;在以后的實(shí)驗(yàn)里,我會(huì)將它設(shè)置為1,這樣做是為了讓系統(tǒng)在運(yùn)行時(shí)就對(duì)時(shí)鐘進(jìn)行初始化LOCKTIME_Va

25、l    EQU     0x0FFF0FFF  PLL鎖定時(shí)間計(jì)數(shù)器 值MPLLCON_Val     EQU     0x00043011   MPLL控制寄存器  值    設(shè)置FCLK=300MHzUPLLCON_Val     EQU     0x000380

26、21   ;UPLL控制寄存器   值CLKCON_Val      EQU     0x001FFFF0    時(shí)鐘控制器    值CLKSLOW_Val     EQU     0x00000004    慢時(shí)鐘控制器    值CLKDIVN_V

27、al     EQU     0x0000000F      時(shí)鐘分頻控制器   值    ;設(shè)置分頻比為1:3:6,UCLK=48MHzCAMDIVN_Val     EQU     0x00000000    ;攝像時(shí)鐘分頻器   值;- 存儲(chǔ)器控制設(shè)定 -MC_BASE&#

28、160;        EQU     0x48000000       存儲(chǔ)器控制器基地址BWSCON_OFS      EQU     0x00            ; 位寬和等待控制寄存器   

29、; 偏移值BANKCON0_OFS    EQU     0x04            ;BANK0控制寄存器   偏移值BANKCON1_OFS    EQU     0x08            ; BANK1控

30、制寄存器   偏移值BANKCON2_OFS    EQU     0x0C            ; BANK2控制寄存器   偏移值BANKCON3_OFS    EQU     0x10          

31、;   BANK3控制寄存器   偏移值BANKCON4_OFS    EQU     0x14            ; BANK4控制寄存器   偏移值BANKCON5_OFS    EQU     0x18      

32、60;      BANK5控制寄存器   偏移值BANKCON6_OFS    EQU     0x1C            ; BANK6控制寄存器   偏移值BANKCON7_OFS    EQU     0x20   &

33、#160;        ;BANK7控制寄存器   偏移值REFRESH_OFS     EQU     0x24             SDRAM刷新控制寄存器   偏移值BANKSIZE_OFS    EQU   

34、0; 0x28            ; BANKSIZE寄存器    偏移值MRSRB6_OFS      EQU     0x2C            ; SDRAM控制寄存器  偏移值MRSRB7_OFS  &#

35、160;   EQU     0x30             SDRAM控制寄存器   偏移值;存儲(chǔ)控制器的相應(yīng)的設(shè)置值MC_SETUP        EQU     0          ;存儲(chǔ)控

36、制器設(shè)定BWSCON_Val      EQU     0x22000000   總線寬度和等待控制器   值BANKCON0_Val    EQU     0x00000700  Boor  ROM控制器  值BANKCON1_Val    EQU     0x00000700

37、  BANK1控制  值BANKCON2_Val    EQU     0x00000700  BANK2控制  值BANKCON3_Val    EQU     0x00000700  BANK3控制  值BANKCON4_Val    EQU     0x00000700  

38、BANK4控制  值BANKCON5_Val    EQU     0x00000700  BANK5控制  值BANKCON6_Val    EQU     0x00018005  BANK6控制  值BANKCON7_Val    EQU     0x00018005  BANK7控制 

39、; 值REFRESH_Val     EQU     0x008404F3   DRAM/SDRAM刷新控制BANKSIZE_Val    EQU     0x00000032    存儲(chǔ)器大小控制MRSRB6_Val      EQU     0x00000020  

40、   ;SDRAM的模式設(shè)置寄存器  控制MRSRB7_Val      EQU     0x00000020     SDRAM的模式設(shè)置寄存器  控制;- I/O 口設(shè)定-GPA_BASE        EQU     0x56000000     

41、60; GPA Base AddressGPB_BASE        EQU     0x56000010       GPB Base AddressGPC_BASE        EQU     0x56000020       GPC Base Add

42、ressGPD_BASE        EQU     0x56000030      ; GPD Base AddressGPE_BASE        EQU     0x56000040       GPE Base AddressGPF_BASE &#

43、160;      EQU     0x56000050      ; GPF Base AddressGPG_BASE        EQU     0x56000060       GPG Base AddressGPH_BASE    

44、0;   EQU     0x56000070      ; GPH Base AddressGPJ_BASE        EQU     0x560000D0       GPJ Base AddressGPCON_OFS       EQU &

45、#160;   0x00             控制寄存器相對(duì)應(yīng)于上面(A-J)基地址的偏移值GPDAT_OFS       EQU     0x04             數(shù)據(jù)寄存器相對(duì)應(yīng)于上面(A-J)基地址的偏移值GPUP_OFS

46、        EQU     0x08             上拉控制寄存器相對(duì)應(yīng)于上面(B-J)基地址的偏移值; I/O端口 設(shè)定GP_SETUP        EQU     0;端口AGPA_SETUP    

47、   EQU     0GPACON_Val      EQU     0x000003FF;端口BGPB_SETUP       EQU     0GPBCON_Val      EQU     0x00000000GPBUP_Val  

48、     EQU     0x00000000   端口B上拉開啟;端口CGPC_SETUP       EQU     0GPCCON_Val      EQU     0x00000000GPCUP_Val       EQU 

49、;    0x00000000     端口C上拉開啟;端口DGPD_SETUP       EQU     0GPDCON_Val      EQU     0x00000000GPDUP_Val       EQU     0

50、x00000000     端口D上拉開啟;端口EGPE_SETUP       EQU     0GPECON_Val      EQU     0x00000000GPEUP_Val       EQU     0x00000000  

51、   端口E上拉開啟;端口FGPF_SETUP       EQU     0GPFCON_Val      EQU     0x00000000GPFUP_Val       EQU     0x00000000    端口F上拉開啟;端

52、口GGPG_SETUP       EQU     0GPGCON_Val      EQU     0x00000000GPGUP_Val       EQU     0x00000000     端口G上拉開啟;端口HGPH_SETUP 

53、0;     EQU     0GPHCON_Val      EQU     0x00000000GPHUP_Val       EQU     0x00000000       ;端口H上拉開啟;端口JGPJ_SETUP    

54、;   EQU     0GPJCON_Val      EQU     0x00000000GPJUP_Val       EQU     0x00000000       端口J上拉開啟;- 這才是真正的程序開始的地方,前邊都是一些宏定義和準(zhǔn)備工作-  &

55、#160;             ;匯編程序數(shù)據(jù)8字節(jié)對(duì)齊                PRESERVE8   C和匯編有8位對(duì)齊的要求,這個(gè)偽指令可以滿足此要求           &

56、#160;    段定義和程序入口點(diǎn);  啟動(dòng)代碼必須連接到第一個(gè)地址才能運(yùn)行。在MDK配置選項(xiàng)里邊默認(rèn)的連接就是從這段代碼開始的,別輕易改啊                AREA    RESET, CODE, READONLY    定義程序段,段名為RESET,只讀     

57、60;          ARM     ARM模式運(yùn)行程序                IF      :LNOT:DEF:_EVAL    ;這是要引用咱們的編譯器MDK自動(dòng)生成的兩個(gè)符號(hào)   

58、             IMPORT  |Image$ER_ROM1$RO$Length|      RO段地址,長(zhǎng)度,可以再M(fèi)DK配置選項(xiàng)Linker看到這兩個(gè)的定義                IMPORT  |Image$RW_RAM1$R

59、W$Length|     RW段地址,長(zhǎng)度                ENDIF; 異常向量表Vectors         LDR     PC, Reset_Addr   復(fù)位異常,    地址0x0000 0

60、000                     LDR     PC, Undef_Addr        未定義異常, 地址0x0000 0004/關(guān)于地址,我不確定,因?yàn)榍懊嬲f的是8字節(jié)對(duì)齊,是不是0x0000 0008呢    

61、60;           LDR     PC, SWI_Addr           軟件中斷,    地址0x0000 0008                LD

62、R     PC, PAbt_Addr          指令預(yù)取中斷,地址0x0000 000C                LDR     PC, DAbt_Addr        &

63、#160; ;數(shù)據(jù)異常中斷,地址0x0000 0010                IF      :DEF:_EVAL               如果定義了_EVAL變量      &

64、#160;           DCD   0x4000                       DCD常用于分配一塊連續(xù)的內(nèi)存單元,分配2K空間        &#

65、160;       ELSE                   DCD   |Image$ER_ROM1$RO$Length|+      否則分配空間大小為RO輸出區(qū)的字節(jié)長(zhǎng)度與RW輸出區(qū)的字節(jié)長(zhǎng)度之和      

66、                  |Image$RW_RAM1$RW$Length|                ENDIF            

67、0;   LDR     PC, IRQ_Addr           普通中斷                LDR     PC, FIQ_Addr       &#

68、160;   快中斷                IF      :DEF:_RTX                IMPORT  SWI_Handler    

69、60;           IMPORT  IRQ_Handler_RTX                ENDIFReset_Addr      DCD     Reset_Handler     

70、  Label  DCD  expr是分配一塊連續(xù)的內(nèi)存單元,并用expr初始化,Label是一個(gè)標(biāo)號(hào),代表的是Undef_Addr      DCD     Undef_Handler       所分配的內(nèi)存單元的首地址。這里實(shí)際上是將相應(yīng)的異常中斷的處理程序的入口地址賦值給前邊的標(biāo)號(hào)SWI_Addr        DCD&

71、#160;    SWI_Handler           PAbt_Addr       DCD     PAbt_Handler          DAbt_Addr       DCD

72、0;    DAbt_Handler                         DCD     0               

73、60;    Reserved Address                IF      :DEF:_RTXIRQ_Addr        DCD     IRQ_Handler_RTX      

74、;          ELSEIRQ_Addr        DCD     IRQ_Handler                ENDIFFIQ_Addr        DCD

75、     FIQ_Handler        將快中斷處理函數(shù)FIQ_Handler的地址賦值給FIQ_AddrUndef_Handler   B       Undef_Handler                IF  &

76、#160;   :DEF:_RTX                ELSESWI_Handler     B       SWI_Handler                EN

77、DIFPAbt_Handler    B       PAbt_HandlerDAbt_Handler    B       DAbt_HandlerIRQ_Handler     PROC                EXPO

78、RT  IRQ_Handler               WEAK                B       .          &

79、#160;     ENDPFIQ_Handler     B       FIQ_Handler; 復(fù)位異常處理程序,每次復(fù)位后程序都要從此處開始執(zhí)行                EXPORT  Reset_Handler    定義一個(gè)全局函數(shù)變量Res

80、et_Handler  -;看門狗配置;若WT_SETUP不等于0,執(zhí)行此語(yǔ)句,否則執(zhí)行下一個(gè)語(yǔ)句;前面已經(jīng)定義WT_SETUP=1,所以會(huì)執(zhí)行這一段; -                IF      WT_SETUP != 0           

81、0;        LDR     R0, =WT_BASE       加載看門狗地址                LDR     R1, =WTCON_Val   加載看門狗控制寄存器數(shù)據(jù)

82、60;               LDR     R2, =WTDAT_Val    加載看門狗數(shù)據(jù)寄存器數(shù)據(jù)                STR     R2, R0, #WTCNT_

83、OFS  將WTDAT_Val配置給看門狗計(jì)數(shù)寄存器                STR     R2, R0, #WTDAT_OFS  將WTDAT_Val配置給看門狗數(shù)據(jù)寄存器                STR

84、     R1, R0, #WTCON_OFS  將WTCON_Val配置給看門狗控制寄存器                ENDIF;-;時(shí)鐘設(shè)置;如果邏輯上沒有定義NO_CLOCK_SETUP并且CLOCK_SETUP!=0,則執(zhí)行下面程序;前面定義CLOCK_SETUP=0,則會(huì)跳過這段程序。;所以咱們以后可以自己設(shè)置時(shí)鐘頻率,我是傾向于自己設(shè)置的,因?yàn)檫@也是一個(gè)知識(shí)點(diǎn),;并且S3

85、C2440的時(shí)鐘配置是一個(gè)很重要的知識(shí)。在這里我猜測(cè),既然沒有時(shí)鐘初始化,那么咱們下載到;SDRAM后,應(yīng)該是以晶振12MHz來工作的,當(dāng)然只是猜測(cè),錯(cuò)了的時(shí)候再改;后面幾個(gè)實(shí)驗(yàn)后,我返回來再說一句,我的猜測(cè)是對(duì)的,系統(tǒng)默認(rèn)的是不對(duì)系統(tǒng)時(shí)鐘進(jìn)行初始化,為了方便,;在以后的實(shí)驗(yàn)中,我都將CLOCK_SETUP修改為1,這樣子我就不用重寫代碼了。;系統(tǒng)初始化之后的結(jié)果就是FCLK=300MHz,HCLK=100MHz,PCLK=50MHz;-             &

86、#160;                               IF      (:LNOT:(:DEF:NO_CLOCK_SETUP):LAND:(CLOCK_SETUP != 0)     

87、;           LDR     R0, =CLOCK_BASE                        加載時(shí)鐘基地址       &#

88、160;        LDR     R1,      =LOCKTIME_Val                  加載PLL鎖定時(shí)間計(jì)數(shù)值         

89、0;      STR     R1, R0, #LOCKTIME_OFS            將PLL鎖定時(shí)間值配置到PLL鎖定時(shí)間計(jì)數(shù)器                MOV     R1,&#

90、160;     #CLKDIVN_Val                                  STR     R1, R0, #CLKDIVN_OFS  

91、             配置時(shí)鐘分頻器                LDR     R1,      =CAMDIVN_Val        &#

92、160;       STR     R1, R0, #CAMDIVN_OFS               配置攝像頭分頻控制寄存器                LDR  

93、60;  R1,      =MPLLCON_Val                STR     R1, R0, #MPLLCON_OFS               配置MPLL配置寄存器

94、0;               LDR     R1,      =UPLLCON_Val                STR     R1, R0, #UPLLCON_OFS

95、                ;配置UPLL配置寄存器                MOV     R1,      #CLKSLOW_Val     &#

96、160;          STR     R1, R0, #CLKSLOW_OFS               ;配置慢時(shí)鐘配置寄存器                LDR

97、60;    R1,      =CLKCON_Val                STR     R1, R0, #CLKCON_OFS                

98、;  配置時(shí)鐘控制寄存器                ENDIF;-;存儲(chǔ)控制器設(shè)置;如果沒有定義NO_MC_SETUP且CLOCK_SETUP!=0,則執(zhí)行下面的程序。;此處前面定義CLOCK_SETUP=0,也就是說這一段又不執(zhí)行,真假的,這是要鬧哪樣?;-              

99、;  IF      (:LNOT:(:DEF:NO_MC_SETUP):LAND:(CLOCK_SETUP != 0)                LDR     R0, =MC_BASE             &

100、#160;                         ;加載存儲(chǔ)控制器基地址                LDR     R1,   

101、;   =BWSCON_Val                STR     R1, R0, #BWSCON_OFS                       

102、;配置總線寬度和等待控制寄存器                LDR     R1,      =BANKCON0_Val                STR    

103、R1, R0, #BANKCON0_OFS                    配置BANK0控制寄存器                LDR     R1,    &

104、#160; =BANKCON1_Val                STR     R1, R0, #BANKCON1_OFS                    配置BANK1控制寄存器 

105、60;              LDR     R1,      =BANKCON2_Val                STR     R1, R0, #BANKCON2_OFS

106、60;                   ;配置BANK2控制寄存器                LDR     R1,      =BANKCON3_Val 

107、60;              STR     R1, R0, #BANKCON3_OFS                    配置BANK3控制寄存器      &

108、#160;         LDR     R1,      =BANKCON4_Val                STR     R1, R0, #BANKCON4_OFS     &

109、#160;              配置BANK4控制寄存器                LDR     R1,      =BANKCON5_Val     

110、60;          STR     R1, R0, #BANKCON5_OFS                    配置BANK5控制寄存器          &

111、#160;     LDR     R1,      =BANKCON6_Val                STR     R1, R0, #BANKCON6_OFS         &

112、#160;          配置BANK6控制寄存器                LDR     R1,      =BANKCON7_Val         

113、60;      STR     R1, R0, #BANKCON7_OFS                    配置BANK7控制寄存器               

114、 LDR     R1,      =REFRESH_Val                STR     R1, R0, #REFRESH_OFS              &#

115、160;        配置DRAM/SDRAM刷新控制寄存器                            MOV     R1,      #BAN

116、KSIZE_Val                STR     R1, R0, #BANKSIZE_OFS                      配置可調(diào)的Bank大小控制寄存器

117、60;               MOV     R1,      #MRSRB6_Val                STR     R1, R0, #MRSRB6_OFS&

118、#160;                         配置SDRAM模式控制寄存器                MOV     R1, 

119、60;    #MRSRB7_Val                STR     R1, R0, #MRSRB7_OFS                     

120、60;     配置SDRAM模式控制寄存器                ENDIF                        -;I/O端口配置;如果沒有定義NO

121、_GP_SETUP且GP_SETUP!=0,則執(zhí)行下面的程序;好吧,前邊定義了GP_SETUP=0,我現(xiàn)在想知道,他到底執(zhí)行什么?代碼是我直接復(fù)制過來的,;為什么我看到有的人的代碼都定義為1呢?淡定,接著分析;-                                &#

122、160;                          IF      (:LNOT:(:DEF:NO_GP_SETUP):LAND:(GP_SETUP != 0)           

123、     IF      GPA_SETUP != 0                LDR     R0, =GPA_BASE                

124、    配置端口A                LDR     R1, =GPACON_Val                A口有25個(gè)口,做I/O時(shí)只能做輸出口,不能做輸入口  

125、60;             STR     R1, R0, #GPCON_OFS                ENDIF             

126、0;  IF      GPB_SETUP != 0                LDR     R0, =GPB_BASE                  

127、0;  ;配置端口B                LDR     R1, =GPBCON_Val                STR     R1, R0, #GPCON_OFS  &#

128、160;             LDR     R1, =GPBUP_Val                STR     R1, R0, #GPUP_OFS       

129、60;        ENDIF                IF      GPC_SETUP != 0                LDR   

130、;  R0, =GPC_BASE                      配置端口C                LDR     R1, =GPCCON_Val &#

131、160;              STR     R1, R0, #GPCON_OFS                LDR     R1, =GPCUP_Val      &#

132、160;         STR     R1, R0, #GPUP_OFS                ENDIF                IF  &

133、#160;   GPD_SETUP != 0                LDR     R0, =GPD_BASE                      

134、0;  配置端口D功能                LDR     R1, =GPDCON_Val                STR     R1, R0, #GPCON_OFS &#

135、160;              LDR     R1, =GPDUP_Val                STR     R1, R0, #GPUP_OFS      

136、60;         ENDIF                IF      GPE_SETUP != 0                LDR  

137、;   R0, =GPE_BASE                      配置端口E                LDR     R1, =GPECON_Val&#

138、160;               STR     R1, R0, #GPCON_OFS                LDR     R1, =GPEUP_Val     &#

139、160;          STR     R1, R0, #GPUP_OFS                ENDIF                IF &

140、#160;    GPF_SETUP != 0                LDR     R0, =GPF_BASE                     ;配置端口F

141、60;               LDR     R1, =GPFCON_Val                STR     R1, R0, #GPCON_OFS     &#

142、160;          LDR     R1, =GPFUP_Val                STR     R1, R0, #GPUP_OFS                ENDIF                IF      GPG_SETUP != 0   

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論