在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

<menu id="6qfwx"><li id="6qfwx"></li></menu>
    1. <menu id="6qfwx"><dl id="6qfwx"></dl></menu>

      <label id="6qfwx"><ol id="6qfwx"></ol></label><menu id="6qfwx"></menu><object id="6qfwx"><strike id="6qfwx"><noscript id="6qfwx"></noscript></strike></object>
        1. <center id="6qfwx"><dl id="6qfwx"></dl></center>

            新聞中心

            S3C2440-啟動(dòng)分析

            作者: 時(shí)間:2016-12-02 來源:網(wǎng)絡(luò) 收藏
            ;===========================================================
            ;function initializing stacks
            InitStacks
            ;Don t use DRAM,such as stmfd,ldmfd......
            ;SVCstack is initialized before
            ;Under toolkit ver 2.5, msr cpsr,r1 can be used instead of msr cpsr_cxsf,r1
            /*******************************************************************
            修改狀態(tài)寄存器一般是通過“讀取-修改-寫回”,先將cpsr中的內(nèi)容取出,放入r0中,通過orr操作進(jìn)行置位,然后通過指令msr寫回到cpsr,這樣就進(jìn)行了工作狀態(tài)的切換,棧的地址前面已經(jīng)聲明過了,所以這里直接賦值就可以。 系統(tǒng)復(fù)位后進(jìn)入的是SVC模式,而且各種模式下的lr不同,因此要想從該函數(shù)內(nèi)返回,要首先切換到SVC模式,再使用lr,這樣可以返回了,
            mov pc,lr 。
            *******************************************************************/
            mrs r0,cpsr
            bic r0,r0,#MODEMASK
            orr r1,r0,#UNDEFMODE|NOINT
            msr cpsr_cxsf,r1 ;UndefMode
            ldr sp,=UndefStack ; UndefStack=0x33FF_5C00
            orr r1,r0,#ABORTMODE|NOINT
            msr cpsr_cxsf,r1 ;AbortMode
            ldr sp,=AbortStack ; AbortStack=0x33FF_6000
            orr r1,r0,#IRQMODE|NOINT
            msr cpsr_cxsf,r1 ;IRQMode
            ldr sp,=IRQStack ; IRQStack=0x33FF_7000
            orr r1,r0,#FIQMODE|NOINT
            msr cpsr_cxsf,r1 ;FIQMode
            ldr sp,=FIQStack ; FIQStack=0x33FF_8000
            bic r0,r0,#MODEMASK|NOINT
            orr r1,r0,#SVCMODE
            msr cpsr_cxsf,r1 ;SVCMode
            ldr sp,=SVCStack ; SVCStack=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.
            ;--------------------LED test
            EXPORT Led_Test
            Led_Test
            mov r0, #0x56000000
            mov r1, #0x5500
            str r1, [r0, #0x50]
            0
            mov r1, #0x50
            str r1, [r0, #0x54]
            mov r2, #0x100000
            1
            subs r2, r2, #1
            bne %B1
            mov r1, #0xa0
            str r1, [r0, #0x54]
            mov r2, #0x100000
            2
            subs r2, r2, #1
            bne %B2
            b %B0
            mov pc, lr
            LTORG
            ;GCS0->SST39VF1601
            ;GCS1->16c550
            ;GCS2->IDE
            ;GCS3->CS8900
            ;GCS4->DM9000
            ;GCS5->CF Card
            ;GCS6->SDRAM
            ;GCS7->unused
            SMRDATA DATA
            ; Memory configuration should be optimized for best performance
            ; The following parameter is not optimized.
            ; Memory access cycle parameter strategy
            ; 1) The memory settings is safe parameters even at HCLK=75Mhz.
            ; 2) SDRAM refresh period is for HCLK<=75Mhz.
            /*******************************************************************
            這個(gè)是SMRDATA區(qū)域的13個(gè)寄存器的值,下面的一些符號在Memcfg.inc中定義。用于初始化各個(gè)bank。
            Memory control
            BWSCON EQU 0x48000000 ;Bus width & wait status
            BANKCON0 EQU 0x48000004 ;Boot ROM control
            BANKCON1 EQU 0x48000008 ;BANK1 control
            BANKCON2 EQU 0x4800000c ;BANK2 control
            BANKCON3 EQU 0x48000010 ;BANK3 control
            BANKCON4 EQU 0x48000014 ;BANK4 control
            BANKCON5 EQU 0x48000018 ;BANK5 control
            BANKCON6 EQU 0x4800001c ;BANK6 control
            BANKCON7 EQU 0x48000020 ;BANK7 control
            REFRESH EQU 0x48000024 ;DRAM/SDRAM refresh
            BANKSIZE EQU 0x48000028 ;Flexible Bank Size
            MRSRB6 EQU 0x4800002c ;Mode register set for SDRAM Bank6
            MRSRB7 EQU 0x48000030 ;Mode register set for SDRAM Bank7
            *******************************************************************/
            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)+(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<<2)+(B2_PMC)) ;GCS2
            DCD ((B3_Tacs<<13)+(B3_Tcos<<11)+(B3_Tacc<<8)+(B3_Tcoh<<6)+(B3_Tah<<4)+(B3_Tacp<<2)+(B3_PMC)) ;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)) ;GCS6
            DCD ((B7_MT<<15)+(B7_Trcd<<2)+(B7_SCAN)) ;GCS7
            DCD ((REFEN<<23)+(TREFMD<<22)+(Trp<<20)+(Tsrc<<18)+(Tchr<<16)+REFCNT)
            DCD 0x32 ;SCLK power saving mode, BANKSIZE 128M/128M
            ;DCD 0x02 ;SCLK power saving disable, BANKSIZE 128M/128M
            DCD 0x20 ;MRSR6 CL=2clk
            DCD 0x20 ;MRSR7 CL=2clk
            /*******************************************************************
            運(yùn)行域定義,比如|Image$$ZI$$Base|是ZI區(qū)在RAM中的起始地址,|Image$$ZI$$Limit|是ZI區(qū)在RAM中的結(jié)束地址。在CodeWarrior的設(shè)置中,RW Base選項(xiàng)保留為空,RO屬性的輸出段,RW屬性的輸出段以及ZI屬性的輸出段都包含在一個(gè)域中,這些可以在從List.txt文件中看出,3者定義的地址是順序相連的,它們之間的相對位置不用重新加載已經(jīng)是正確的了。所以直接把這三個(gè)段整體拷貝到SDRAM中就可以運(yùn)行,而不需要再按照各段的值進(jìn)行加載。如果RW設(shè)置某一固定值,這時(shí)就需要3個(gè)段值進(jìn)行加載了。
            *******************************************************************/
            BaseOfROM DCD |Image$$RO$$Base|
            TopOfROM DCD |Image$$RO$$Limit|
            BaseOfBSS DCD |Image$$RW$$Base|
            BaseOfZero DCD |Image$$ZI$$Base|
            EndOfBSS DCD |Image$$ZI$$Limit|
            ALIGN
            ;Function for entering power down mode
            ; 1. SDRAM should be in self-refresh mode.
            ; 2. All interrupt should be maksked for SDRAM/DRAM self-refresh.
            ; 3. LCD controller should be disabled for SDRAM/DRAM self-refresh.
            ; 4. The I-cache may have to be turned on.
            ; 5. The location of the following code may have not to be changed.
            ;void EnterPWDN(int CLKCON);
            /*******************************************************************
            進(jìn)入電源管理部分,ATPCS定義了{R0~R3}作為參數(shù)傳遞和結(jié)果返回,超過4個(gè)放堆棧里。編程時(shí)盡可能4個(gè)之內(nèi)的參數(shù)。所以這里R0是EnterPWDN的參數(shù),r0=CLKCON。
            *******************************************************************/
            EnterPWDN
            mov r2,r0 ;r2=rCLKCON
            tst r0,#0x8 ;SLEEP mode?
            bne ENTER_SLEEP
            ENTER_STOP
            ldr r0,=REFRESH ; 進(jìn)入IDLE模式前要設(shè)置SDRAM的自刷新,否則數(shù)據(jù)丟失了
            ldr r3,[r0] ;r3=rREFRESH
            mov r1, r3
            orr r1, r1, #BIT_SELFREFRESH
            str r1, [r0] ;Enable SDRAM self-refresh
            mov r1,#16 ;就是一個(gè)等待
            0 subs r1,r1,#1
            bne %B0
            ldr r0,=CLKCON ;進(jìn)入IDLE模式
            str r2,[r0]
            mov r1,#32
            0 subs r1,r1,#1 ;1) wait until the STOP mode is in effect.
            bne %B0 ;2) Or wait here until the CPU&eripherals will be turned-off
            ; Entering SLEEP mode, only the reset by wake-up is available.
            ldr r0,=REFRESH
            str r3,[r0] ;這里的r3是設(shè)置了自刷新之前的值,改變的是r1,所以可以用r3直 接賦值
            MOV_PC_LR
            ENTER_SLEEP
            ;NOTE.
            ;1) rGSTATUS3 should have the return address after wake-up from SLEEP mode.
            ldr r0,=REFRESH ;進(jìn)入睡眠模式也要自刷新
            ldr r1,[r0] ;r1=rREFRESH
            orr r1, r1, #BIT_SELFREFRESH
            str r1, [r0] ;Enable SDRAM self-refresh
            mov r1,#16 ;Wait until self-refresh is issued,which may not be needed.
            0 subs r1,r1,#1
            bne %B0
            ldr r1,=MISCCR
            ldr r0,[r1]
            orr r0,r0,#(7<<17) ;Set SCLK0=0, SCLK1=0, SCKE=0.
            str r0,[r1]
            ldr r0,=CLKCON ; Enter sleep mode
            str r2,[r0]
            b . ;CPU will die here.
            WAKEUP_SLEEP
            ;Release SCLKn after wake-up from the SLEEP mode.
            ldr r1,=MISCCR
            ldr r0,[r1]
            bic r0,r0,#(7<<17) ;SCLK0:0->SCLK, SCLK1:0->SCLK, SCKE:0->=SCKE.
            str r0,[r1]

            評論


            技術(shù)專區(qū)

            關(guān)閉