版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、;GET和INCLUDE功能相同;功能:引進(jìn)一個(gè)被編譯過(guò)的文件。GET option.incGET memcfg.incGET 2440addr.inc;EQU為程序中的常量、標(biāo)號(hào)等定義一個(gè)等效的字符名稱;定義SDRAM工作在Refresh模式,SDRAM有兩種刷新方式:autorefresh和selfrefresh,前者是在其使用過(guò)程當(dāng)中每隔一段時(shí)間發(fā)出刷新指令,SDRAM刷新一行,self refresh是在省電模式時(shí)使用BIT_SELFREFRESH EQU (1<<22;系統(tǒng)的工作模式設(shè)定,共七種工作模式USERMODE EQU 0x10FIQMODE EQU 0x11IR
2、QMODE EQU 0x12SVCMODE EQU 0x13ABORTMODE EQU 0x17UNDEFMODE EQU 0x1bMODEMASK EQU 0x1fNOINT EQU 0xc0;系統(tǒng)的堆??臻g設(shè)定UserStack EQU (_STACK_BASEADDRESS-0x3800 ;0x33ff4800 SVCStack EQU (_STACK_BASEADDRESS-0x2800 ;0x33ff5800 UndefStack EQU (_STACK_BASEADDRESS-0x2400 ;0x33ff5c00 AbortStack EQU (_STACK_BASEADDRESS
3、-0x2000 ;0x33ff6000 IRQStack EQU (_STACK_BASEADDRESS-0x1000 ;0x33ff7000 FIQStack EQU (_STACK_BASEADDRESS-0x0 ;0x33ff8000 ;這一段是為了統(tǒng)一處理器工作狀態(tài)和軟件編譯方式(16位編譯環(huán)境使用tasm.exe編譯;arm有兩種工作狀態(tài):32位,該狀態(tài)執(zhí)行字對(duì)準(zhǔn)的arm指令;16位,該狀態(tài)執(zhí)行半字對(duì)準(zhǔn)的Thumb指令;不同的工作狀態(tài),編譯器編譯方式也不同GBLL THUMBCODE ;定義一個(gè)全局變量 CONFIG = 16 ; CONFIG為ADS定義的內(nèi)部變量THUMBCODE
4、 SETL TRUE ;SETA 指令用于設(shè)置局部或全局算術(shù)變量的值,SETL 指令用于設(shè)置局部或全局邏輯變量的值,SETS 指令用于設(shè)置局部或全局字符串變量的值CODE32 ;工作在arm狀態(tài)|THUMBCODE SETL FALSE ; | 是ARM匯編控制偽指令,就是 IF ELSE ENDIF,簡(jiǎn)寫成 | MACRO ;宏定義MOV_PC_LR THUMBCODEbx lr|mov pc,lrMENDMACROMOVEQ_PC_LR THUMBCODEbxeq lr|moveq pc,lrMEND;這段程序用于把中斷服務(wù)程序的首地址裝載到pc中,有人稱之為“加載程序”。;本初始化程序定
5、義了一個(gè)數(shù)據(jù)區(qū)(在文件最后,存放相應(yīng)中斷服務(wù)程序的首地址。每個(gè)字空間都有一個(gè)標(biāo)號(hào),以Handle*命名。MACRO$HandlerLabel HANDLER $HandleLabel$HandlerLabelsub sp,sp,#4 ;用來(lái)存儲(chǔ)PC地址stmfd sp!,r0 ;把將要使用的r0寄存器入棧ldr r0,=$HandleLabel;給寄存器r0賦值ldr r0,r0 ;給寄存器r0賦值,將r0的地址放入r0str r0,sp,#4 ;將對(duì)應(yīng)的中斷函數(shù)首地址入棧ldmfd sp!,r0,pc ;彈出工作寄存器ro和PC,也就完成了到ISR的跳轉(zhuǎn)MENDIMPORT |Image$R
6、O$Limit| ; 表示RO區(qū)末地址后面的地址,即RW數(shù)據(jù)源的起始地址IMPORT |Image$RW$Base| ; RW區(qū)在RAM里的執(zhí)行區(qū)起始地址,也就是編譯器選項(xiàng)RW_Base指定的地址。IMPORT |Image$ZI$Base| ; ZI區(qū)在RAM里面的起始地址IMPORT |Image$ZI$Limit| ; ZI區(qū)在RAM里面的結(jié)束地址后面的一個(gè)地址IMPORT MainAREA Init,CODE,READONLY ;聲明一個(gè)代碼段ENTRY;下面的代碼是小端和大端的轉(zhuǎn)換;條件編譯,在編譯成機(jī)器碼前就設(shè)定好ASSERT :DEF:ENDIAN_CHANGE ;判斷ENDIA
7、N_CHANGE是否定義 ENDIAN_CHANGEASSERT :DEF:ENTRY_BUS_WIDTH ;如果已經(jīng)定義了ENDIAN_CHANGE,判斷ENTRY_BUS_WIDTH是否定義 ENTRY_BUS_WIDTH=32 ;判斷是不是為32b ChangeBigEndian ;DCD 0xea000007 ENTRY_BUS_WIDTH=16andeq r14,r7,r0,lsl #20 ;DCD 0x0007ea00 ENTRY_BUS_WIDTH=8streq r0,r0,-r10,ror #1 ;DCD 0x070000ea|b ResetHandlerb HandlerUn
8、def ;轉(zhuǎn)跳到Undefined mode程序入口b HandlerSWI ;轉(zhuǎn)跳到SWI 中斷程序入口b HandlerPabort ;轉(zhuǎn)跳到PAbort(指令異常程序入口b HandlerDabort ;轉(zhuǎn)跳到DAbort(數(shù)據(jù)異常程序入口b . ;保留b HandlerIRQ ;轉(zhuǎn)跳到IRQ 中斷程序入口b HandlerFIQ ;轉(zhuǎn)跳到FIQ 中斷程序入口;0x20b EnterPWDN ; Must be 0x20.;通過(guò)設(shè)置CP15的C1的位7,設(shè)置存儲(chǔ)格式為Bigendian,三種總線方式ChangeBigEndian ;下面是改變大小端的程序,這里采用直接定義機(jī)器碼的方式;0
9、x24 ENTRY_BUS_WIDTH=32DCD 0xee110f10 ;0xee110f10 => mrc p15,0,r0,c1,c0,0DCD 0xe3800080 ;0xe3800080 => orr r0,r0,#0x80; /Big-endianDCD 0xee010f10 ;0xee010f10 => mcr p15,0,r0,c1,c0,0 ENTRY_BUS_WIDTH=16DCD 0x0f10ee11DCD 0x0080e380DCD 0x0f10ee01 ENTRY_BUS_WIDTH=8DCD 0x100f11eeDCD 0x800080e3DCD
10、0x100f01eeDCD 0xffffffffDCD 0xffffffffDCD 0xffffffffDCD 0xffffffffDCD 0xffffffffb ResetHandler;掉電模式;SDRAM自動(dòng)刷新.;進(jìn)入PWDNEnterPWDNmov r2,r0 ;r2=rCLKCONtst r0,#0x8 ;測(cè)試是否是SLEEP mode?bne ENTER_SLEEPENTER_STOP ;進(jìn)入PWDN后如果不是sleep則進(jìn)入stop ldr r0,=REFRESHldr r3,r0 ;r3=rREFRESHmov r1, r3orr r1, r1, #BIT_SELFREFRE
11、SHstr r1, r0 ;使SDRAM自動(dòng)刷新mov r1,#16 ;等待刷新,也可能不需要0 subs r1,r1,#1bne %B0ldr r0,=CLKCON ;進(jìn)入STOP mode.str r2,r0mov r1,#320 subs r1,r1,#1bne %B0; 進(jìn)入SLEEP mode, 只有通過(guò)喚醒復(fù)位.ldr r0,=REFRESH ;退出SDRAM self refresh mode.str r3,r0MOV_PC_LRENTER_SLEEP;rGSTATUS3有一個(gè)返回地址ldr r0,=REFRESHldr r1,r0 ;r1=rREFRESHorr r1, r1,
12、 #BIT_SELFREFRESHstr r1, r0 ;啟用SDRAM self-refreshmov r1,#16 ;等待self-refresh,也可能不需要.0 subs r1,r1,#1bne %B0ldr r1,=MISCCRldr r0,r1orr r0,r0,#(7<<17 ;設(shè)置SCLK0=0, SCLK1=0, SCKE=0.str r0,r1ldr r0,=CLKCON ;進(jìn)入sleep modestr r2,r0b . ;CPU不工作.WAKEUP_SLEEP;Release SCLKn after wake-up from the SLEEP mode.l
13、dr r1,=MISCCRldr r0,r1bic r0,r0,#(7<<17 ;SCLK0:0->SCLK, SCLK1:0->SCLK, SCKE:0->=SCKE.str r0,r1;設(shè)置存儲(chǔ)控制寄存器ldr r0,=SMRDATAldr r1,=BWSCON ;總線寬度和等待控制寄存器add r2, r0, #52 ;SMRDATA的結(jié)束地址ldr r3, r0, #4str r3, r1, #4cmp r2, r0bne %B0;數(shù)據(jù)在以SMRDATA為起始的存儲(chǔ)區(qū)mov r1,#2560 subs r1,r1,#1 ;1 wait until the
14、SelfRefresh is released.bne %B0ldr r1,=GSTATUS3 ;GSTATUS3 has the start address just after SLEEP wake-up ldr r0,r1mov pc,r0;異常中斷宏調(diào)用LTORGHandlerFIQ HANDLER HandleFIQHandlerIRQ HANDLER HandleIRQHandlerUndef HANDLER HandleUndefHandlerSWI HANDLER HandleSWIHandlerDabort HANDLER HandleDabortHandlerPabort
15、HANDLER HandlePabortIsrIRQsub sp,sp,#4 ;reserved for PCstmfd sp!,r8-r9ldr r9,=INTOFFSETldr r9,r9ldr r8,=HandleEINT0add r8,r8,r9,lsl #2ldr r8,r8str r8,sp,#8ldmfd sp!,r8-r9,pc;=; ENTRY;板子上電和復(fù)位后,程序開始從位于0x00執(zhí)行b ResetHandler,程序跳轉(zhuǎn)到這里執(zhí)行;=ResetHandlerldr r0,=WTCON ;屏蔽看門狗ldr r1,=0x0str r1,r0ldr r0,=INTMSKldr
16、 r1,=0xffffffff ;屏蔽所有的中斷str r1,r0ldr r0,=INTSUBMSKldr r1,=0x3ff ;屏蔽所有的子中斷str r1,r0 FALSE; rGPFDAT = (rGPFDAT & (0xf<<4 | (data & 0xf<<4; Led_Displayldr r0,=GPFCONldr r1,=0x5500str r1,r0ldr r0,=GPFDATldr r1,=0x10str r1,r0;根據(jù)工作頻率設(shè)置pllldr r0,=LOCKTIMEldr r1,=0xffffffstr r1,r0 PLL_ON
17、_START; 為2440添加時(shí)鐘設(shè)備.; 設(shè)置Fclk:Hclk:Pclkldr r0,=CLKDIVNldr r1,=CLKDIV_VAL ; 0=1:1:1, 1=1:1:2, 2=1:2:2, 3=1:2:4, 4=1:4:4, 5=1:4:8, 6=1:3:3, 7=1:3:6. str r1,r0;Configure UPLLldr r0,=UPLLCONldr r1,=(U_MDIV<<12+(U_PDIV<<4+U_SDIV ;設(shè)定系統(tǒng)主時(shí)鐘頻率str r1,r0nop ; Caution: After UPLL setting, at least 7-
18、clocks delay must be inserted for setting hardware be completed.nopnopnopnopnopnop;配置MPLLldr r0,=MPLLCONldr r1,=(M_MDIV<<12+(M_PDIV<<4+M_SDIVstr r1,r0;檢查啟動(dòng)是從休眠模式喚醒.ldr r1,=GSTATUS2ldr r0,r1tst r0,#0x2;是從休眠模式喚醒,跳轉(zhuǎn)到SLEEP_WAKEUP handler.bne WAKEUP_SLEEPEXPORT StartPointAfterSleepWakeUpStart
19、PointAfterSleepWakeUp;設(shè)置存儲(chǔ)相關(guān)寄存器的程序;SMRDATA中涉及的值請(qǐng)參考memcfg.inc程序ldr r0,=SMRDATAldr r1,=BWSCON ;BWSCON地址add r2, r0, #52 ;SMRDATA結(jié)束地址ldr r3, r0, #4str r3, r1, #4cmp r2, r0bne %B0;初始化堆棧bl InitStacks; 設(shè)置缺省中斷處理函數(shù)ldr r0,=HandleIRQ ;This routine is neededldr r1,=IsrIRQ ;if there isn't 'subs pc,lr,#4&
20、#39; at 0x18, 0x1cstr r1,r0;將數(shù)據(jù)段拷貝到RAM中,將ZI數(shù)據(jù)段清零,跳入C語(yǔ)言的main函數(shù)執(zhí)行。;If main( is used, the variable initialization will be done in _main(. :LNOT:USE_MAIN;Copy and paste RW data/zero initialized dataLDR r0, =|Image$RO$Limit| ; Get pointer to ROM dataLDR r1, =|Image$RW$Base| ; and RAM copyLDR r3, =|Image$
21、ZI$Base|;Zero init base => top of initialised dataCMP r0, r1 ; Check that they are differentBEQ %F21CMP r1, r3 ; Copy init dataLDRCC r2, r0, #4 ;-> LDRCC r2, r0 + ADD r0, r0, #4STRCC r2, r1, #4 ;-> STRCC r2, r1 + ADD r1, r1, #4BCC %B12LDR r1, =|Image$ZI$Limit| ; Top of zero init segmentMOV
22、r2, #03CMP r3, r1 ; Zero initSTRCC r2, r3, #4BCC %B3 :LNOT:THUMBCODEbl Main ;Don't use main( because .b . THUMBCODE ;for start-up code for Thumb modeorr lr,pc,#1bx lrCODE16bl Main ;Don't use main( because .b .CODE32;初始化各模式下的堆棧指針I(yè)nitStacks;Don't use DRAM,such as stmfd,ldmfd.;SVCstack is i
23、nitialized before;Under toolkit ver 2.5, 'msr cpsr,r1' can be used instead of 'msr cpsr_cxsf,r1' mrs r0,cpsrbic r0,r0,#MODEMASKorr r1,r0,#UNDEFMODE|NOINTmsr cpsr_cxsf,r1 ;UndefModeldr sp,=UndefStack ; UndefStack=0x33FF_5C00orr r1,r0,#ABORTMODE|NOINTmsr cpsr_cxsf,r1 ;AbortModeldr sp,=
24、AbortStack ; AbortStack=0x33FF_6000orr r1,r0,#IRQMODE|NOINTmsr cpsr_cxsf,r1 ;IRQModeldr sp,=IRQStack ; IRQStack=0x33FF_7000orr r1,r0,#FIQMODE|NOINTmsr cpsr_cxsf,r1 ;FIQModeldr sp,=FIQStack ; FIQStack=0x33FF_8000bic r0,r0,#MODEMASK|NOINTorr r1,r0,#SVCMODEmsr cpsr_cxsf,r1 ;SVCModeldr sp,=SVCStack ; SV
25、CStack=0x33FF_5800;USER mode has not be initialized.mov pc,lr;The LR register won't be valid if the current mode is not SVC mode.;= ; 時(shí)鐘測(cè)試; Assemble code, because VSYNC time is very short;= EXPORT CLKDIV124EXPORT CLKDIV144CLKDIV124ldr r0, = CLKDIVNldr r1, = 0x3 ; 0x3 = 1:2:4str r1, r0;延時(shí)時(shí)鐘穩(wěn)定nopn
26、opnopnopnopldr r0, = REFRESHldr r1, r0bic r1, r1, #0xffbic r1, r1, #(0x7<<8orr r1, r1, #0x470 ; REFCNT135str r1, r0nopnopnopnopnopmov pc, lrCLKDIV144 ldr ldr str nop nop nop nop nop ldr ldr bic bic orr str nop nop nop nop nop mov LTORG SMRDATA DATA ;存儲(chǔ)器控制寄存器的定義區(qū) ; 存儲(chǔ)器訪問(wèn)周期參數(shù) ; The memory settin
27、gs is safe parameters even at HCLK=75Mhz. ; SDRAM refresh period is for HCLK<=75Mhz. DCD (0+(B1_BWSCON<<4+(B2_BWSCON<<8+(B3_BWSCON<<12+(B4_BWSCON<<16+(B5_BWSCON<<20+(B6_BWSCON< <24+(B7_BWSCON<<28 DCD (B0_Tacs<<13+(B0_Tcos<<11+(B0_Tacc<<8
28、+(B0_Tcoh<<6+(B0_Tah<<4+(B0_Tacp<<2+(B0_PMC ;GCS0 DCD (B1_Tacs<<13+(B1_Tcos<<11+(B1_Tacc<<8+(B1_Tcoh<<6+(B1_Tah<<4+(B1_Tacp<<2+(B1_PMC ;GCS1 DCD (B2_Tacs<<13+(B2_Tcos<<11+(B2_Tacc<<8+(B2_Tcoh<<6+(B2_Tah<<4+(B2_Tacp&l
29、t;<2+(B2_PMC ;GCS2 pc, lr r0, = REFRESH r1, r0 r1, r1, #0xff r1, r1, #(0x7<<8 r1, r1, #0x630 ; REFCNT675 - 1520 r1, r0 r0, = CLKDIVN r1, = 0x4 r1, r0 ; 0x4 = 1:4:4 ;延時(shí)時(shí)鐘穩(wěn)定 DCD (B3_Tacs<<13+(B3_Tcos<<11+(B3_Tacc<<8+(B3_Tcoh<<6+(B3_Tah<<4+(B3_Tacp<<2+(B3_PM
30、C ;GCS3 DCD (B4_Tacs<<13+(B4_Tcos<<11+(B4_Tacc<<8+(B4_Tcoh<<6+(B4_Tah<<4+(B4_Tacp<<2+(B4_PMC ;GCS4 DCD (B5_Tacs<<13+(B5_Tcos<<11+(B5_Tacc<<8+(B5_Tcoh<<6+(B5_Tah<<4+(B5_Tacp<<2+(B5_PMC ;GCS5 DCD (B6_MT<<15+(B6_Trcd<<2+(B6_SCAN DCD (B7_MT<<15+(B7_Trcd<<2+(B7_SCAN ;GCS6 ;GCS7 DCD (REFEN<<23+(TREFMD<<22+(Trp<<20+(Trc<<18+(Tchr<<16+REFCNT DCD
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五版應(yīng)急通訊基站搭棚施工合同參考2篇
- 二零二五版交通事故車輛維修及賠償協(xié)議2篇
- 二零二五年度食品飲料品牌授權(quán)銷售合同范本2篇
- 二零二五年度儲(chǔ)罐安裝與環(huán)保驗(yàn)收合同4篇
- 2025年度個(gè)人理財(cái)產(chǎn)品投資及收益分配合同4篇
- 2025年度生物質(zhì)能發(fā)電項(xiàng)目承包清工勞務(wù)合同模板4篇
- 二零二五年度玻璃工藝品設(shè)計(jì)與生產(chǎn)合作協(xié)議
- 二零二五年度轉(zhuǎn)租協(xié)議甲乙丙三方權(quán)益保障合同
- 2025年度跨境電商股權(quán)退出撤資協(xié)議書
- 二零二五年度餐廳租賃合同附餐飲行業(yè)趨勢(shì)研究合作
- 2025年春新滬科版物理八年級(jí)下冊(cè)全冊(cè)教學(xué)課件
- 2025屆高考語(yǔ)文復(fù)習(xí):散文的結(jié)構(gòu)與行文思路 課件
- 電網(wǎng)調(diào)度基本知識(shí)課件
- 拉薩市2025屆高三第一次聯(lián)考(一模)語(yǔ)文試卷(含答案解析)
- 《保密法》培訓(xùn)課件
- 回收二手機(jī)免責(zé)協(xié)議書模板
- (正式版)JC∕T 60023-2024 石膏條板應(yīng)用技術(shù)規(guī)程
- (權(quán)變)領(lǐng)導(dǎo)行為理論
- 2024屆上海市浦東新區(qū)高三二模英語(yǔ)卷
- 2024年智慧工地相關(guān)知識(shí)考試試題及答案
- GB/T 8005.2-2011鋁及鋁合金術(shù)語(yǔ)第2部分:化學(xué)分析
評(píng)論
0/150
提交評(píng)論