![一起學mini2440裸機開發(fā)(二)--MDK自帶的S3C2440s分析_第1頁](http://file2.renrendoc.com/fileroot_temp3/2021-11/22/19b02aea-3cd7-4a43-9496-0c78c1320c31/19b02aea-3cd7-4a43-9496-0c78c1320c311.gif)
![一起學mini2440裸機開發(fā)(二)--MDK自帶的S3C2440s分析_第2頁](http://file2.renrendoc.com/fileroot_temp3/2021-11/22/19b02aea-3cd7-4a43-9496-0c78c1320c31/19b02aea-3cd7-4a43-9496-0c78c1320c312.gif)
![一起學mini2440裸機開發(fā)(二)--MDK自帶的S3C2440s分析_第3頁](http://file2.renrendoc.com/fileroot_temp3/2021-11/22/19b02aea-3cd7-4a43-9496-0c78c1320c31/19b02aea-3cd7-4a43-9496-0c78c1320c313.gif)
![一起學mini2440裸機開發(fā)(二)--MDK自帶的S3C2440s分析_第4頁](http://file2.renrendoc.com/fileroot_temp3/2021-11/22/19b02aea-3cd7-4a43-9496-0c78c1320c31/19b02aea-3cd7-4a43-9496-0c78c1320c314.gif)
![一起學mini2440裸機開發(fā)(二)--MDK自帶的S3C2440s分析_第5頁](http://file2.renrendoc.com/fileroot_temp3/2021-11/22/19b02aea-3cd7-4a43-9496-0c78c1320c31/19b02aea-3cd7-4a43-9496-0c78c1320c315.gif)
版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1、一起學mini2440裸機開發(fā)(二)-MDK自帶的S3C2440.s分析上一節(jié),咱們在建立工程的時候,默認的是使用MDK自帶的啟動代碼,這些啟動代碼到底做了什么工作呢?在這里我想探究一下,探究不全沒什么事,能看懂個大概就行了。 我先申明一下,其實我并不是頭一次學ARM裸機,我先前已經(jīng)按照韋東山的使用arm-linux-gcc在linux下編譯裸機程序的方法走了一遍了,用那個方法的話對以后的uboot移植非常有幫助,但是有一個不方便的就是,使用Linux系統(tǒng)下編譯裸機程序,很多自帶的庫函數(shù)不能用,比如print()函數(shù)我都不能用,主要是我的水平不行,不會用,其實可以用的。
2、所以現(xiàn)在想認真的再用編譯器學一下ARM裸機,裸機學好了,對驅動開發(fā)很有幫助的。 所以,很可能我講的可能細節(jié)上照顧不到?jīng)]接觸過ARM裸機的,在此深感抱歉。我也只是想把自己的學習弄成筆記而已。 言歸正傳,下面進行S3C2440.s的分析,初學者這一節(jié)可以略過。1、首先,了解一下這個文件都要完成那些功能。 看門狗初始化(可以選擇是否初始化) 時鐘初始化(可以選擇是否初始化) 存儲控制器初始化(可以選擇是否初始化)
3、; GPIO口初始化(可以選擇是否初始化) 堆棧初始化(沒有選擇性,必須初始化) 跳轉到C文件的main函數(shù)執(zhí)行2、其實知道上面文件做了哪些工作就行了,下面具體分析一下 /*/;/* S3C2440.S: Startup file for Samsung S3C2440
4、0; */;/*/;/*;*啟動代碼S3C2440.S是在CPU復位后執(zhí)行的。這個文件會根據(jù)以下的;*SET標志來進行翻譯執(zhí)行。;*NO_CLOCK_SETUP:啟動代碼不初始化時鐘(這種情況大多出現(xiàn)在時鐘已經(jīng)在script.ini文件中初始化時);*NO_MC_SETUP:啟動代碼不初始化寄存器控制器。;*NO_GP_SETUP:啟動代碼不初始化GPIO口;* RAM_INTVEC:啟動代碼
5、將異常向量表從執(zhí)行地址處復制到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中的標準的模式位和中斷位的宏定義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)設置。不同工作模式的堆棧寄存器sp不一樣。;設置??臻gUND_Stack_Size EQU 0
10、x00000000 未定義模式SVC_Stack_Size EQU 0x00000008 管理模式棧長度ABT_Stack_Size EQU 0x00000000 數(shù)據(jù)訪問中止模式棧長度FIQ_Stack_Size EQU 0x00000000 快中斷模式棧長度IRQ_Stack_Size EQU
11、; 0x00000080 ;中斷模式棧長度USR_Stack_Size EQU 0x00000400 用戶模式棧長度ISR_Stack_Size EQU (UND_Stack_Size + SVC_Stack_Size + ABT_Stack_Size +
12、0; FIQ_Stack_Size + IRQ_Stack_Size) 所有的堆棧大小進行相加,得到總堆棧大小;/*;arm的匯編程序由段組成,段是相對獨立的指令或數(shù)據(jù)單位,每個段由AREA偽指令定義,并定義段的屬性;READWRITE(讀寫)READONLY(只讀)NOINIT(不初始化內(nèi)存單元或將內(nèi)存寫0) */
13、; AREA STACK, NOINIT, READWRITE, ALIGN=3 定義棧段,段名為STACK,字節(jié)對齊方式Stack_Mem SPACE USR_Stack_Size SPACE指令用于分配一塊內(nèi)存單元。這里分別為這兩個棧分配對應_initial_sp SPACE
14、 ISR_Stack_Size ;長度的內(nèi)存空間Stack_Top EQU Stack_Mem + ISR_Stack_Size /定義棧開始地址(最大地址,堆棧向下訪問) 堆(heap)配置;堆大小(單位:字節(jié))Heap_Size EQU 0x00000000 系統(tǒng)的堆空間設定/
15、定義堆空間大小(配合最后的動態(tài)內(nèi)存申請使用) AREA HEAP, NOINIT, READWRITE, ALIGN=3 定義堆段,段名:HEAP,不初始化內(nèi)存,可讀寫,字節(jié)對齊_heap_baseHeap_Mem SPACE Heap_Size
16、0; ;申請堆的內(nèi)存空間_heap_limit;-存儲器設定 -IRAM_BASE EQU 0x40000000 內(nèi)存基地址;-看門狗定義 -WT_BASE EQU 0x53000000 看門狗
17、寄存器基地址WTCON_OFS EQU 0x00 看門狗控制寄存器 對應基地址的偏移值WTDAT_OFS EQU 0x04
18、; 看門狗數(shù)據(jù)寄存器 對應基地址的偏移值WTCNT_OFS EQU 0x08 看門狗計數(shù)寄存器 對應基地址的偏移值;看門狗時鐘設置WT_SETUP EQU &
19、#160; 1 看門狗設置WTCON_Val EQU 0x00000000 看門狗控制寄存器相關WTDAT_Val EQU 0x00008000 看門
20、狗數(shù)據(jù)寄存器相關;- 時鐘管理定義 -CLOCK_BASE EQU 0x4C000000 時鐘寄存器基地址LOCKTIME_OFS EQU 0x00 PLL鎖定時間計數(shù)器對應基地址的偏
21、移值MPLLCON_OFS EQU 0x04 ; MPLL配置寄存器對應基地址的偏移值UPLLCON_OFS EQU 0x08 ; UPLL配置
22、寄存器對應基地址的偏移值CLKCON_OFS EQU 0x0C 時鐘控制器對應基地址的偏移值CLKSLOW_OFS EQU 0x10
23、 慢時鐘控制寄存器對應基地址的偏移值CLKDIVN_OFS EQU 0x14 時鐘分頻控制器對應基地址的偏移值CAMDIVN_OFS EQU 0x18
24、60; ; 攝像時鐘分頻控制器對應基地址的偏移值;時鐘相關寄存器設置值的宏定義CLOCK_SETUP EQU 0 ;時鐘設置 ;在以后的實驗里,我會將它設置為1,這樣做是為了讓系統(tǒng)在運行時就對時鐘進行初始化LOCKTIME_Va
25、l EQU 0x0FFF0FFF PLL鎖定時間計數(shù)器 值MPLLCON_Val EQU 0x00043011 MPLL控制寄存器 值 設置FCLK=300MHzUPLLCON_Val EQU 0x000380
26、21 ;UPLL控制寄存器 值CLKCON_Val EQU 0x001FFFF0 時鐘控制器 值CLKSLOW_Val EQU 0x00000004 慢時鐘控制器 值CLKDIVN_V
27、al EQU 0x0000000F 時鐘分頻控制器 值 ;設置分頻比為1:3:6,UCLK=48MHzCAMDIVN_Val EQU 0x00000000 ;攝像時鐘分頻器 值;- 存儲器控制設定 -MC_BASE
28、160; EQU 0x48000000 存儲器控制器基地址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控制寄存器 偏移值;存儲控制器的相應的設置值MC_SETUP EQU 0 ;存儲控
36、制器設定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 存儲器大小控制MRSRB6_Val EQU 0x00000020
40、 ;SDRAM的模式設置寄存器 控制MRSRB7_Val EQU 0x00000020 SDRAM的模式設置寄存器 控制;- I/O 口設定-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 控制寄存器相對應于上面(A-J)基地址的偏移值GPDAT_OFS EQU 0x04 數(shù)據(jù)寄存器相對應于上面(A-J)基地址的偏移值GPUP_OFS
46、 EQU 0x08 上拉控制寄存器相對應于上面(B-J)基地址的偏移值; I/O端口 設定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上拉開啟;- 這才是真正的程序開始的地方,前邊都是一些宏定義和準備工作- &
55、#160; ;匯編程序數(shù)據(jù)8字節(jié)對齊 PRESERVE8 C和匯編有8位對齊的要求,這個偽指令可以滿足此要求 &
56、#160; 段定義和程序入口點; 啟動代碼必須連接到第一個地址才能運行。在MDK配置選項里邊默認的連接就是從這段代碼開始的,別輕易改啊 AREA RESET, CODE, READONLY 定義程序段,段名為RESET,只讀
57、60; ARM ARM模式運行程序 IF :LNOT:DEF:_EVAL ;這是要引用咱們的編譯器MDK自動生成的兩個符號
58、 IMPORT |Image$ER_ROM1$RO$Length| RO段地址,長度,可以再MDK配置選項Linker看到這兩個的定義 IMPORT |Image$RW_RAM1$R
59、W$Length| RW段地址,長度 ENDIF; 異常向量表Vectors LDR PC, Reset_Addr 復位異常, 地址0x0000 0
60、000 LDR PC, Undef_Addr 未定義異常, 地址0x0000 0004/關于地址,我不確定,因為前面說的是8字節(jié)對齊,是不是0x0000 0008呢
61、60; LDR PC, SWI_Addr 軟件中斷, 地址0x0000 0008 LD
62、R PC, PAbt_Addr 指令預取中斷,地址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é)長度與RW輸出區(qū)的字節(jié)長度之和
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是一個標號,代表的是Undef_Addr DCD Undef_Handler 所分配的內(nèi)存單元的首地址。這里實際上是將相應的異常中斷的處理程序的入口地址賦值給前邊的標號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; 復位異常處理程序,每次復位后程序都要從此處開始執(zhí)行 EXPORT Reset_Handler 定義一個全局函數(shù)變量Res
80、et_Handler -;看門狗配置;若WT_SETUP不等于0,執(zhí)行此語句,否則執(zhí)行下一個語句;前面已經(jīng)定義WT_SETUP=1,所以會執(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配置給看門狗計數(shù)寄存器 STR R2, R0, #WTDAT_OFS 將WTDAT_Val配置給看門狗數(shù)據(jù)寄存器 STR
84、 R1, R0, #WTCON_OFS 將WTCON_Val配置給看門狗控制寄存器 ENDIF;-;時鐘設置;如果邏輯上沒有定義NO_CLOCK_SETUP并且CLOCK_SETUP!=0,則執(zhí)行下面程序;前面定義CLOCK_SETUP=0,則會跳過這段程序。;所以咱們以后可以自己設置時鐘頻率,我是傾向于自己設置的,因為這也是一個知識點,;并且S3
85、C2440的時鐘配置是一個很重要的知識。在這里我猜測,既然沒有時鐘初始化,那么咱們下載到;SDRAM后,應該是以晶振12MHz來工作的,當然只是猜測,錯了的時候再改;后面幾個實驗后,我返回來再說一句,我的猜測是對的,系統(tǒng)默認的是不對系統(tǒng)時鐘進行初始化,為了方便,;在以后的實驗中,我都將CLOCK_SETUP修改為1,這樣子我就不用重寫代碼了。;系統(tǒng)初始化之后的結果就是FCLK=300MHz,HCLK=100MHz,PCLK=50MHz;- &
86、#160; IF (:LNOT:(:DEF:NO_CLOCK_SETUP):LAND:(CLOCK_SETUP != 0)
87、; LDR R0, =CLOCK_BASE 加載時鐘基地址
88、160; LDR R1, =LOCKTIME_Val 加載PLL鎖定時間計數(shù)值
89、0; STR R1, R0, #LOCKTIME_OFS 將PLL鎖定時間值配置到PLL鎖定時間計數(shù)器 MOV R1,
90、160; #CLKDIVN_Val STR R1, R0, #CLKDIVN_OFS
91、 配置時鐘分頻器 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 ;配置慢時鐘配置寄存器 LDR
97、60; R1, =CLKCON_Val STR R1, R0, #CLKCON_OFS
98、; 配置時鐘控制寄存器 ENDIF;-;存儲控制器設置;如果沒有定義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; ;加載存儲控制器基地址 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 配置可調的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í)行什么?代碼是我直接復制過來的,;為什么我看到有的人的代碼都定義為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個口,做I/O時只能做輸出口,不能做輸入口
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. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- Module 3 Unit 1 What are you doing?(說課稿)-2024-2025學年外研版(三起)英語四年級上冊
- 11《趙州橋》說課稿-2023-2024學年統(tǒng)編版語文三年級下冊
- 1學會尊重(說課稿)-2023-2024學年道德與法治六年級下冊統(tǒng)編版001
- Unit 3 Festivals and Customs Extended reading 說課稿-2024-2025學年高中英語譯林版(2020)必修第二冊
- 2023九年級物理下冊 專題六 材料、信息和能源B 能源學說課稿 (新版)新人教版
- 2023二年級數(shù)學下冊 六 田園小衛(wèi)士-萬以內(nèi)的加減法(二)我學會了嗎說課稿 青島版六三制
- 2024-2025學年高中化學 專題五 電化學問題研究 5.1 原電池說課稿 蘇教版選修6
- 《10 身邊的新聞調查》(說課稿)-2023-2024學年三年級上冊綜合實踐活動吉美版
- 2024年四年級英語下冊 Unit 2 There are forty students in our class Lesson 8說課稿 人教精通版(三起)001
- 2023九年級語文下冊 第六單元 21 鄒忌諷齊王納諫說課稿 新人教版
- 父母贈與協(xié)議書
- 高校鑄牢中華民族共同體意識教育的路徑研究
- 《個人所得稅征管問題及對策研究》
- 駕照體檢表完整版本
- 通用稅務自查情況說明報告(7篇)
- 體育賽事的策劃、組織與實施 體育賽事利益相關者
- 分析化學(高職)PPT完整版全套教學課件
- 晚熟的人(莫言諾獎后首部作品)
- m拱頂儲罐設計計算書
- 2023外貿(mào)業(yè)務協(xié)調期中試卷
- 新人教鄂教版(2017)五年級下冊科學全冊教學課件
評論
0/150
提交評論