wwwxxx国产_337p日本欧洲亚洲大胆张筱雨_免费在线看成人av_日本黄色不卡视频_国产精品成熟老女人_99视频一区_亚洲精品97久久中文字幕_免费精品视频在线_亚洲色图欧美视频_欧美一区二三区

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 4189|回復: 1
打印 上一主題 下一主題
收起左側

s3c2440啟動代碼分析

[復制鏈接]
跳轉到指定樓層
樓主
ID:51090 發表于 2014-9-17 22:55 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
本帖最后由 xiaojuan 于 2014-9-17 22:57 編輯

由于片面問題,所以可能會看起來不太美觀,可以看附件中的內容。

       ARM啟動代碼相當于我們電腦的BIOS,也就是ARM啟動時對處理器的一些初始化及嵌入式系統硬件的一些初始化。由于它直接面對處理器內核和硬件控制器進行編程,一般都是用匯編語言。一般包括:中斷向量表,初始化存儲器系統,初始化堆棧,初始化有特殊要求的斷口,設備初始化,變量初始化等。這幾天對著RealView MDK-ARM中自帶的啟動代碼研究了一下,遇到問題又對著數據手冊和指令表看了一下,總算對S3C2440A的硬件有了一個大致的了解。學習嵌入式系統重在系統,學習ARM只是為學習嵌入式系統鋪路,懶貓比較笨可能在上系統之前要裸奔幾天以強化以下對S3C2440A內部結構的了解。

       把MDK自帶的S3C2440A.S文件的注釋發一下,這些是懶貓結合數據手冊與ARM指令表理解了,可能會有錯誤,放在這里只是引導一下像我一樣還沒有入門的兄弟們,希望你們不要害怕ARM害怕嵌入式,老毛他老人家說的對,世上無難事,只怕有心人,ARM指令就那么多,看一遍不會就多看幾遍,還有一定要學習看軟件自帶的幫助文件.

;/*****************************************************************************/

;/* S3C2440.S: Startup file for Samsung S3C440                                */

;/*****************************************************************************/

;/* <<< Use Configuration Wizard in Context Menu >>>                          */

;/*****************************************************************************/

;/* This file is part of the uVision/ARM development tools.                   */

;/* Copyright (c) 2005-2008 Keil Software. All rights reserved.               */

;/* This software may only be used under the terms of a valid, current,       */

;/* end user licence from KEIL for a compatible version of KEIL software      */

;/* development tools. Nothing else gives you the right to use this software. */

;/*****************************************************************************/

;下面這些參數是與CPSR狀態寄存器有關

;參數的由來:這里各個模式的參數是由寄存器CPSR的模式位設置M[4:0]得來的,

;比如這里的用戶模式,CPSR的M[4:0]設置為10000就是0x10。

;

;Mode_USR -- 用戶模式,正常程序執行模式,用于應用程序

;Mode_FIQ -- 快速中斷模式,用于高速數據傳輸和通道處理。

;Mode_IRQ -- 外部中斷模式,用于通用的中斷處理。

;Mode_SVC -- 管理模式,使用的一種保護模式。

;Mode_ABT -- 數據訪問中止模式,用于虛擬存儲用存儲保護

;Mode_UND -- 未定義指令中止模式,當未定義指令執行時進入此模式。

;Mode_SYS -- 系統模式,用于特權級的操作系統任務。

;I_Bit    -- 如果I位被置1,則外部中斷被禁止(IRQ is disabled)

;F_Bit    -- 如果F位被置1,則快速中斷被禁止(FIQ is disabled)

;

;----------------------------------------------------------------------

Mode_USR        EQU     0x10

Mode_FIQ        EQU     0x11

Mode_IRQ        EQU     0x12

Mode_SVC        EQU     0x13

Mode_ABT        EQU     0x17

Mode_UND        EQU     0x1B

Mode_SYS        EQU     0x1F


I_Bit           EQU     0x80            ; when I bit is set, IRQ is disabled

F_Bit           EQU     0x40            ; when F bit is set, FIQ is disabled


;-----------------------------棧初始化定義-----------------------------------

;下面這些主要是棧配置,系統的棧空間設定

;

;UND_Stack_Size -- 未定義模式的棧大小

;SVC_Stack_Size -- 超級用戶模式的棧大小

;ABT_Stack_Size -- 數據訪問終止模式的棧大小

;FIQ_Stack_Size -- 快速中斷模式的棧大小

;IRQ_Stack_Size -- 外部中斷模式的棧大小

;USR_Stack_Size -- 用戶模式的棧大小

;ISR_Stack_Size -- 總堆棧的大小,也就是也有模式下堆棧相加

;

;-----------------------------------------------------------------------


UND_Stack_Size  EQU     0x00000000

SVC_Stack_Size  EQU     0x00000008

ABT_Stack_Size  EQU     0x00000000

FIQ_Stack_Size  EQU     0x00000000

IRQ_Stack_Size  EQU     0x00000080

USR_Stack_Size  EQU     0x00000400


ISR_Stack_Size  EQU     (UND_Stack_Size + SVC_Stack_Size + ABT_Stack_Size + \

                         FIQ_Stack_Size + IRQ_Stack_Size)



;-----------------------------------------------------------------------

;AREA -- 是一個偽指令,用于段定義。ARM的匯編程序由段組成,段是相對獨立

;        的指令或數據單位,每個段由AREA偽指令定義,并定義段的屬性。

;        STACK  -- AREA指令的一個參數,定義段名稱

;        NOINIT -- AREA指令的一個參數,指定本數據段僅僅保留了內在單元,而

;        將句初始值寫入內存單元,也即將內存單元值初始化為0

;        READWRITE -- 指定本段為可讀可寫,數據段默認為READWRITE。

;                     READWRITE(讀寫)、READONLY(只讀)

;ALIGN -- 也是一個偽指令,指定對齊方式。ALIGN n 指令的對齊值有兩種方案

;  即n 或 2^n,這里采用第二種方案即指定后面的指令8字節對齊。

;

;下面這句話的意思是:

;開辟一個堆棧段,段名字為STACK,定義為可讀可寫,將內存單元初始化為0,

;-----------------------------------------------------------------------


                AREA    STACK, NOINIT, READWRITE, ALIGN=3



;-----------------------------------------------------------------------

;SPACE -- 偽指令,用于分配一塊內存單元,并用0初始化,與%同義

;其指令格式為:

;    {lable}  SPACE  expr

;lable -- 內存起始地址標號   expr -- 所要分配的內存字節數   

;-----------------------------------------------------------------------

Stack_Mem       SPACE   USR_Stack_Size    ;堆棧內存起始地址標號

__initial_sp    SPACE   ISR_Stack_Size    ;匯編代碼的地址標號


Stack_Top    ;堆棧段內容結束, 在這里放個標號,用來獲得堆棧頂部地址


Heap_Size       EQU     0x00000000    ;定義堆大小設置

                ;開辟一個名字為HEAP可讀可寫,不初始化內存單的內存單元。

                AREA    HEAP, NOINIT, READWRITE, ALIGN=3

__heap_base     ;堆的基址

Heap_Mem        SPACE   Heap_Size    ;堆內存起始地址標號

__heap_limit    ;堆結束


;----------------------------內存初始化定義-----------------------------

;在一些應用系統中除了擴展Flash,RAM掛接在外部存儲器接口上外,可能還有其它

;的外設掛接在外部存儲器接口上,不同外設的操作時序什么的都是不一樣的,所以

;在使用這些外設之前必須初始化連接這些外設存儲器接口。這里因為沒擴展,所以

;只定義一個片上內存基地址。

;-----------------------------------------------------------------------


IRAM_BASE       EQU     0x40000000    ;片上SRAM的基地址,即內存基地址


;-------------------------看門狗初始化定義------------------------------

;看門狗在防止程序跑飛,進入無限死循環時起著重要作用。有些應用可能用不上

;看門狗功能,也可能有些應用會用到外部看門狗。在這個時候內部看門狗必須禁

;止,所以有時候會在初始化時將內部看門狗禁止,當以后應用用到時再開啟它。

;看門狗定時器包括三個寄存器:

;WTCON -- 看門狗控制寄存器,設定看門狗定時器模式

;WTDAT -- 看門狗數據寄存器,用于設定超時寬度

;WTCNT -- 看門狗計數寄存器,里面存放的是看門狗定時器當前值

;

;WT_BASE   -- 看門狗定時器基地址

;WTCON_OFS -- 看門狗控制寄存器偏移地址,相對于基址

;WTDAT_OFS -- 看門狗數據寄存器偏移地址,相對于基址

;WTCNT_OFS -- 看門狗計數寄存器偏移地址,相對于基址

;WT_SETUP  -- 看門狗設置

;WTCON_Val -- 看門狗控制寄存器設置,關閉看門狗

;WTDAT_Val -- 看門狗數據寄存器設置,初始值即為0x8000

;-----------------------------------------------------------------------


WT_BASE         EQU     0x53000000      ; Watchdog Timer Base Address

WTCON_OFS     EQU     0x00      ; Watchdog Timer Control Register Offset

WTDAT_OFS      EQU     0x04       ; Watchdog Timer Data Register    Offset

WTCNT_OFS      EQU     0x08       ; Watchdog Timer Count Register   Offset


WT_SETUP        EQU     0

WTCON_Val       EQU     0x00000000

WTDAT_Val       EQU     0x00008000



;----------------------------時鐘與電源管理定義-------------------------

;S3C2440A中的時鐘控制邏輯可以產生必須的時鐘信號,包括CPU的FCLK,AHB總線的

;HCLK 以及APB總線外設的PCLK3C2440A內部有兩個鎖相環(PLL):一個提供FCLK,

;HCLK及PCLK,另一個專用于USB模塊(48MHz).

;

;CLOCK_BASE   -- 時鐘基地址

;LOCKTIME_OFS -- 鎖相環鎖定時間計數寄存器偏移地址,相對于基址

;MPLLCON_OFS  -- MPLL配置寄存器偏移地址,相對于基址,主時鐘源PLL

;UPLLCON_OFS  -- UPLL配置寄存器偏移地址,相對于基址,USB時鐘源PLL

;CLKCON_OFS   -- 時鐘控制寄存器偏移地址,相對于基址

;CLKSLOW_OFS  -- 時鐘減慢控制寄存器偏移地址,相對于基址

;CLKDIVN_OFS  -- 時鐘分頻器控制寄存器偏移地址,相對于基址

;CAMDIVN_OFS  -- 攝像頭時鐘分頻器控制寄存器偏移地址,相對于基址,UPLL提供

;

;CLOCK_SETUP  -- 時鐘設置

;LOCKTIME_Val -- PLL鎖定時間計數器值

;MPLLCON_Val  -- MPLL配置寄存器值

;UPLLCON_Val  -- UPLL配置寄存器值

;CLKCON_Val   -- 時鐘配置寄存器值

;CLKSLOW_Val  -- 時鐘減慢控制寄存器值

;CLKDIVN_Val  -- 時鐘分頻控制寄存器值

;CAMDIVN_Val  -- 攝像頭分頻控制寄存器值

;-----------------------------------------------------------------------

CLOCK_BASE      EQU     0x4C000000      ; Clock Base Address

LOCKTIME_OFS    EQU     0x00    ; PLL Lock Time Count Register   Offset

MPLLCON_OFS     EQU     0x04    ; MPLL Configuration Register    Offset

UPLLCON_OFS     EQU     0x08     ; UPLL Configuration Register    Offset

CLKCON_OFS      EQU     0x0C      ; Clock Generator Control Reg    Offset

CLKSLOW_OFS     EQU     0x10     ; Clock Slow Control Register    Offset

CLKDIVN_OFS     EQU     0x14        ; Clock Divider Control Register Offset

CAMDIVN_OFS     EQU     0x18       ; Camera Clock Divider Register  Offset


CLOCK_SETUP     EQU     0

LOCKTIME_Val    EQU     0x0FFF0FFF

MPLLCON_Val     EQU     0x00043011

UPLLCON_Val     EQU     0x00038021

CLKCON_Val      EQU     0x001FFFF0

CLKSLOW_Val     EQU     0x00000004

CLKDIVN_Val     EQU     0x0000000F

CAMDIVN_Val     EQU     0x00000000


;--------------------存儲控制器設置定義---------------------------------

;下面這些都是一些關于存儲控制器的地址宏定義

;

;MC_BASE      -- 存儲控制器基地址

;BWSCON_OFS   -- 總線寬度和等待控制寄存器偏移地址

;BANKCON0_OFS -- BANK1控制寄存器偏移地址

;   .

;   .

;BANKCON7_OFS -- BANK7控制寄存器偏移地址

;REFRESH_OFS  -- DRAM/SDRAM刷新控制寄存器偏移地址

;BANKSIZE_OFS -- 可調的bank大小寄存器偏移地址

;MRSRB6_OFS   -- bank6模式控制寄存器偏移地址

;MRSRB7_OFS   -- bank7模式控制寄存器偏移地址

;

;MC_SETUP     -- 存儲器控制寄存器設置

;BWSCON_Val   -- 寫入總線寬度和等待控制寄存值

;BANKCON0_Val -- 寫入Blank0的值

;   .

;   .

;BANKCON7_Val -- 寫入BANK7 的值

;REFRESH_Val  -- 寫入DRAM/SDRAM刷新控制寄存的值

;BANKSIZE_Val -- 寫入可調的bank大小寄存的值

;MRSRB6_Val   -- 寫入bank6模式控制寄存器的值

;MRSRB7_Val   -- 寫入bank7模式控制寄存器的值

;-----------------------------------------------------------------------

MC_BASE         EQU     0x48000000      ; Memory Controller Base Address

BWSCON_OFS      EQU     0x00     ; Bus Width and Wait Status Ctrl Offset

BANKCON0_OFS    EQU     0x04    ; Bank 0 Control Register        Offset

BANKCON1_OFS    EQU     0x08     ; Bank 1 Control Register        Offset

BANKCON2_OFS    EQU     0x0C     ; Bank 2 Control Register        Offset

BANKCON3_OFS    EQU     0x10      ; Bank 3 Control Register        Offset

BANKCON4_OFS    EQU     0x14      ; Bank 4 Control Register        Offset

BANKCON5_OFS    EQU     0x18       ; Bank 5 Control Register        Offset

BANKCON6_OFS    EQU     0x1C       ; Bank 6 Control Register        Offset

BANKCON7_OFS    EQU     0x20        ; Bank 7 Control Register        Offset

REFRESH_OFS     EQU     0x24          ; SDRAM Refresh Control Register Offset

BANKSIZE_OFS    EQU     0x28           ; Flexible Bank Size Register    Offset

MRSRB6_OFS      EQU     0x2C           ; Bank 6 Mode Register           Offset

MRSRB7_OFS      EQU     0x30           ; Bank 7 Mode Register           Offset


MC_SETUP        EQU     1

BWSCON_Val      EQU     0x22000000

BANKCON0_Val    EQU     0x00000700

BANKCON1_Val    EQU     0x00000700

BANKCON2_Val    EQU     0x00000700

BANKCON3_Val    EQU     0x00000700

BANKCON4_Val    EQU     0x00000700

BANKCON5_Val    EQU     0x00000700

BANKCON6_Val    EQU     0x00018005

BANKCON7_Val    EQU     0x00018005

REFRESH_Val     EQU     0x008404F3

BANKSIZE_Val    EQU     0x00000032

MRSRB6_Val      EQU     0x00000020

MRSRB7_Val      EQU     0x00000020


;---------------------I/O端口宏定義--------------------------------------

;GPA_BASE   -- 端口A基地址

;   .

;GPJ_BASE   -- 端口J基地址

;GPCON_OFS  -- 端口配置寄存器偏移地址

;GPDAT_OFS  -- 端口數據寄存器偏移地址

;GPUP_OFS   -- 端口上拉寄存器偏移地址

;GP_SETUP   -- 端口設置

;GPA_SETUP  -- 端口A配置

;GPACON_Val -- 寫入端口A配置寄存器的值

;      .

;      .

;GPJ_SETUP  -- 端口J配置

;GPJCON_Val -- 寫入端口J配置寄存器的值

;GPJUP_Val  -- 寫入端口J上拉寄存器的值

;-----------------------------------------------------------------------

GPA_BASE        EQU     0x56000000      ; GPA Base Address

GPB_BASE        EQU     0x56000010      ; GPB Base Address

GPC_BASE        EQU     0x56000020      ; GPC Base Address

GPD_BASE        EQU     0x56000030      ; GPD Base Address

GPE_BASE        EQU     0x56000040      ; GPE Base Address

GPF_BASE        EQU     0x56000050      ; GPF Base Address

GPG_BASE        EQU     0x56000060      ; GPG Base Address

GPH_BASE        EQU     0x56000070      ; GPH Base Address

GPJ_BASE        EQU     0x560000D0      ; GPJ Base Address

GPCON_OFS       EQU     0x00            ; Control Register Offset

GPDAT_OFS       EQU     0x04            ; Data Register Offset

GPUP_OFS        EQU     0x08            ; Pull-up Disable Register Offset


GP_SETUP        EQU     1


;-----------------------------------------------------------------------

;端口A配置

;-----------------------------------------------------------------------

GPA_SETUP       EQU     0

GPACON_Val      EQU     0x000003FF


;-----------------------------------------------------------------------

;端口B配置

;-----------------------------------------------------------------------

GPB_SETUP       EQU     0

GPBCON_Val      EQU     0x00000000

GPBUP_Val       EQU     0x00000000


;-----------------------------------------------------------------------

;端口C配置

;-----------------------------------------------------------------------

GPC_SETUP       EQU     0

GPCCON_Val      EQU     0x00000000

GPCUP_Val       EQU     0x00000000


;-----------------------------------------------------------------------

;端口D配置

;-----------------------------------------------------------------------

GPD_SETUP       EQU     0

GPDCON_Val      EQU     0x00000000

GPDUP_Val       EQU     0x00000000


;-----------------------------------------------------------------------

;端口E配置

;-----------------------------------------------------------------------

GPE_SETUP       EQU     0

GPECON_Val      EQU     0x00000000

GPEUP_Val       EQU     0x00000000


;-----------------------------------------------------------------------

;端口F配置

;-----------------------------------------------------------------------

GPF_SETUP       EQU     0

GPFCON_Val      EQU     0x00000000

GPFUP_Val       EQU     0x00000000


;-----------------------------------------------------------------------

;端口G配置

;-----------------------------------------------------------------------

GPG_SETUP       EQU     0

GPGCON_Val      EQU     0x00000000

GPGUP_Val       EQU     0x00000000


;-----------------------------------------------------------------------

;端口H配置

;-----------------------------------------------------------------------

GPH_SETUP       EQU     0

GPHCON_Val      EQU     0x00000000

GPHUP_Val       EQU     0x00000000


;-----------------------------------------------------------------------

;端口J配置

;-----------------------------------------------------------------------

GPJ_SETUP       EQU     0

GPJCON_Val      EQU     0x00000000

GPJUP_Val       EQU     0x00000000


;-----------------------------------------------------------------------

;PRESERVE8 -- 偽指令,指示當前文件請求堆棧為8字節對齊。

;  匯編程序數據8字節對齊,c和匯編有8位對齊的要求.

;-----------------------------------------------------------------------

                PRESERVE8


;-----------------------------------------------------------------------

;存儲區設定和程序入口點

;啟動代碼必須連接到第一個地址才能運行

;下面這句話的意思是:

;       聲明一個名為RESET的代碼段,屬性為只讀

;-----------------------------------------------------------------------

                AREA    RESET, CODE, READONLY

                ARM    ;ARM模式運行程序

;-----------------------------------------------------------------------               

;IMPORT -- 相當于C語言中的關鍵字extern

;        指當前的符號在其他源文件中定義的,在本源文件中可能引用該符號.

;EXPORT -- 相當于C語言中的關鍵字global

;          聲明一個符號可以被其它文件引用.相當于聲明了一個全局變量

;下面這幾句話是的意思是:

;    如果定義了_EVAL這個變量,引用RO輸出區的字節長度與RW輸出區的字節長度

;注意:

;ARM連接器定義了一些包含$$的符號。這些符號及其他所有包含$$的名稱都是ARM的

;保留字。這些符號被用于指定域的基地址,輸出段的基地址和輸入段的基地址及其

;大小。我們可以自己的匯編語言程序中引用這些符號地址,把它們用作可重定位的

;地址,也可能在C或C++代碼中使用extern關鍵字來引用它們。這個可以查看uVision

;Help 的Region-related symbols這一節。

;-----------------------------------------------------------------------

                IF      :LNOT::DEF:__EVAL     ;邏輯判斷是否定義了_EVAL這個變量

                IMPORT  ||Image$$ER_ROM1$$RO$$Length||

                IMPORT  ||Image$$RW_RAM1$$RW$$Length||

                ENDIF


;-----------------------------------------------------------------------

;    異常向量,映射到地址0,必須使用絕對尋址方式,子程序用無限循環方式

;實現可以被修改。

;-----------------------------------------------------------------------

Vectors         LDR     PC, Reset_Addr ;將復位地址裝載到程序指針,即復位        

                LDR     PC, Undef_Addr ;未定義指令

                LDR     PC, SWI_Addr   ;軟件中斷

                LDR     PC, PAbt_Addr  ;中止(預取)

                LDR     PC, DAbt_Addr  ;中止(數據)

                IF      :DEF:__EVAL    ;如果定義了__EVAL 變量

                  DCD   0x4000         ;分配2k空間

                ELSE                   ;否則分配空間大小為RO輸出區的字節

                                                            ;長度與RW輸出區的字節長度之和

                  DCD   ||Image$$ER_ROM1$$RO$$Length||+\

                        ||Image$$RW_RAM1$$RW$$Length||

                ENDIF

                LDR     PC, IRQ_Addr   ;外部中斷

                LDR     PC, FIQ_Addr   ;快速中斷


                IF      :DEF:__RTX     ;如果定義了__RTX

                IMPORT  SWI_Handler    ;則定義中斷子程序

                IMPORT  IRQ_Handler_RTX ;定義快速中斷子程序

                ENDIF

;-----------------------------------------------------------------------

;下面這幾句的任務是把各個子程序的入口地址分配給相應的地址變量

;-----------------------------------------------------------------------

Reset_Addr      DCD     Reset_Handler ;復位子程序入口地址賦值給Reset_Addr

Undef_Addr      DCD     Undef_Handler ;未定義子程序入口地址賦值給Undef_Addr

SWI_Addr        DCD     SWI_Handler   ;中斷子程序入口地址賦值給SWI_Addr

PAbt_Addr       DCD     PAbt_Handler  ;中止(預存)子程序入口地址賦給PAbt_Addr

DAbt_Addr       DCD     DAbt_Handler  ;中止(數據)子程序入口地址賦給DAbt_Addr

                DCD     0             ;保留地址      

                IF      :DEF:__RTX    ;如果定義了__RTX

IRQ_Addr        DCD     IRQ_Handler_RTX  ;快速中斷子程序入口地址給IRQ_Addr

                ELSE

IRQ_Addr        DCD     IRQ_Handler      ;否則把IRQ_Handler入口地址給IRQ_Addr

                ENDIF

FIQ_Addr        DCD     FIQ_Handler      ;快速中斷入口地址給FIQ_Addr


;-----------------------------------------------------------------------

;這些子程序都是用無限循環方式實現的可以被修改。

;-----------------------------------------------------------------------


Undef_Handler   

                                     B       Undef_Handler    ;跳轉到Undef_Handler,還是在這個地方

                IF      :DEF:__RTX       ;如果定義了DEF:__RTX,在此等待中斷

                ELSE

SWI_Handler   

                                     B       SWI_Handler      ;否則跳轉到軟件中斷

                ENDIF

PAbt_Handler   

                                     B       PAbt_Handler     ;中止(預存)子程

DAbt_Handler   

                                     B       DAbt_Handler     ;中止(數據)子程

;-----------------------------------------------------------------------

;外部中斷子程序

;     如果函數標有PROC與ENDP,但沒有FRAME PUSH 或 FRAME POP,則堆棧作用量

;假定為0.這意味著無需手動添加FRAME PUSH 0或FRAME POP 0

;-----------------------------------------------------------------------                                   

IRQ_Handler                             

                                     PROC

                EXPORT  IRQ_Handler  [WEAK] ;聲明一個全局變量,并且其它

                                                                 ;同名符優先于本符號被引用

                B       .   ;跳轉到當前地址即在此等待“.”代表當前指令地址

                ENDP

FIQ_Handler                                ;快速中斷子程序  

                B       FIQ_Handler


;-----------------------------------------------------------------------

;復位子程序

;-----------------------------------------------------------------------

                EXPORT  Reset_Handler     ; 聲明一個全局變量

Reset_Handler   


;-----------------------------------------------------------------------

;配置看門狗

;前面已經初始化 WT_SETUP == 0,要想執行下面的程序需將WT_SETUP置1

;-----------------------------------------------------------------------

                IF      WT_SETUP != 0

                LDR     R0, =WT_BASE    ;加載看門狗基址

                LDR     R1, =WTCON_Val  ;加載看門狗控制寄存器數據

                LDR     R2, =WTDAT_Val  ;加載看門狗數據寄存器數據

                STR     R2, [R0, #WTCNT_OFS]  ;將WTDAT_Val配置給看門狗

                                                                   ;計數寄存器

                STR     R2, [R0, #WTDAT_OFS]  ;將WTDAT_Val 配置給看門狗

                                                                   ;數據寄存器

                STR     R1, [R0, #WTCON_OFS]  ;將WTCON_Val配置給看門狗

                                                                   ;控制寄存器

                ENDIF


分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:51090 發表于 2014-9-17 22:56 | 只看該作者


;-----------------------------------------------------------------------

;配置時鐘

;如果邏輯上沒有定義 NO_CLOCK_SETUP并且 CLOCK_SETUP != 0執行下面程序

;-----------------------------------------------------------------------                                             

                IF      (:LNOT:(:DEF:NO_CLOCK_SETUP)):LAND:(CLOCK_SETUP != 0)

                LDR     R0,      =CLOCK_BASE    ;加載時鐘基址

                LDR     R1,      =LOCKTIME_Val  ;加載PLL鎖定時間計數值

                STR     R1, [R0, #LOCKTIME_OFS] ;并將該值配置到PLL鎖定時間計數器

                MOV     R1,      #CLKDIVN_Val  

                STR     R1, [R0, #CLKDIVN_OFS]  ;配置時鐘分頻器

                LDR     R1,      =CAMDIVN_Val

                STR     R1, [R0, #CAMDIVN_OFS]  ;配置攝像頭分頻控制寄存器

                LDR     R1,      =MPLLCON_Val

                STR     R1, [R0, #MPLLCON_OFS]  ;配置MPLL配置寄存器

                LDR     R1,      =UPLLCON_Val

                STR     R1, [R0, #UPLLCON_OFS]  ;配置UPLL配置寄存器

                MOV     R1,      #CLKSLOW_Val

                STR     R1, [R0, #CLKSLOW_OFS]  ;配置時鐘減慢控制寄存器

                LDR     R1,      =CLKCON_Val

                STR     R1, [R0, #CLKCON_OFS]   ;配置時鐘配控制寄存器

                ENDIF


;-----------------------------------------------------------------------

;存儲器設定

;如果沒有定義NO_MC_SETUP且CLOCK_SETUP != 0則執行下面的程序

;-----------------------------------------------------------------------

                IF      (:LNOT:(:DEF:NO_MC_SETUP)):LAND:(CLOCK_SETUP != 0)

                LDR     R0,      =MC_BASE  ;加載存儲控制器基址

                LDR     R1,      =BWSCON_Val

                STR     R1, [R0, #BWSCON_OFS]   ;配置總線寬度和等待控制寄存器

                LDR     R1,      =BANKCON0_Val

                STR     R1, [R0, #BANKCON0_OFS] ;配置BLANK0控制寄存器

                LDR     R1,      =BANKCON1_Val

                STR     R1, [R0, #BANKCON1_OFS] ;配置BLANK1控制寄存器

                LDR     R1,      =BANKCON2_Val

                STR     R1, [R0, #BANKCON2_OFS] ;配置BLANK2控制寄存器

                LDR     R1,      =BANKCON3_Val

                STR     R1, [R0, #BANKCON3_OFS] ;配置BLANK3控制寄存器

                LDR     R1,      =BANKCON4_Val

                STR     R1, [R0, #BANKCON4_OFS] ;配置BLANK4控制寄存器

                LDR     R1,      =BANKCON5_Val

                STR     R1, [R0, #BANKCON5_OFS] ;配置BLANK5控制寄存器

                LDR     R1,      =BANKCON6_Val

                STR     R1, [R0, #BANKCON6_OFS] ;配置BLANK6控制寄存器

                LDR     R1,      =BANKCON7_Val

                STR     R1, [R0, #BANKCON7_OFS] ;配置BLANK7控制寄存器

                LDR     R1,      =REFRESH_Val

                STR     R1, [R0, #REFRESH_OFS]  ;配置DRAM/SDRAM刷新控制寄存器

                MOV     R1,      #BANKSIZE_Val

                STR     R1, [R0, #BANKSIZE_OFS] ;配置可調的bank大小寄存器

                MOV     R1,      #MRSRB6_Val

                STR     R1, [R0, #MRSRB6_OFS]   ;配置bank6模式控制寄存器

                MOV     R1,      #MRSRB7_Val

                STR     R1, [R0, #MRSRB7_OFS]   ;配置bank7模式控制寄存器

                ENDIF                           


;-----------------------------------------------------------------------

;IO端口配置

;如果沒有定義NO_GP_SETUP并且GP_SETUP != 0則執行下面的程序

;-----------------------------------------------------------------------            

                IF      (:LNOT:(:DEF:NO_GP_SETUP)):LAND:(GP_SETUP != 0)


                IF      GPA_SETUP != 0

                LDR     R0, =GPA_BASE      ;配置端口A功能

                LDR     R1, =GPACON_Val    ;A口有25個口,做IO時只能做輸出口

                STR     R1, [R0, #GPCON_OFS]  

                ENDIF


                IF      GPB_SETUP != 0

                LDR     R0, =GPB_BASE      ;配置端口B功能

                LDR     R1, =GPBCON_Val

                STR     R1, [R0, #GPCON_OFS]

                LDR     R1, =GPBUP_Val     ;配置端口B上拉寄存器

                STR     R1, [R0, #GPUP_OFS]

                ENDIF


                IF      GPC_SETUP != 0

                LDR     R0, =GPC_BASE      ;配置端口C功能

                LDR     R1, =GPCCON_Val

                STR     R1, [R0, #GPCON_OFS]

                LDR     R1, =GPCUP_Val     ;配置端口C上拉寄存器

                STR     R1, [R0, #GPUP_OFS]

                ENDIF


                IF      GPD_SETUP != 0

                LDR     R0, =GPD_BASE      ;配置端口D功能

                LDR     R1, =GPDCON_Val

                STR     R1, [R0, #GPCON_OFS]

                LDR     R1, =GPDUP_Val     ;配置端口D上位寄存器

                STR     R1, [R0, #GPUP_OFS]

                ENDIF


                IF      GPE_SETUP != 0

                LDR     R0, =GPE_BASE

                LDR     R1, =GPECON_Val   ;配置端口E功能

                STR     R1, [R0, #GPCON_OFS]

                LDR     R1, =GPEUP_Val    ;配置端口E上位寄存器

                STR     R1, [R0, #GPUP_OFS]

                ENDIF


                IF      GPF_SETUP != 0

                LDR     R0, =GPF_BASE

                LDR     R1, =GPFCON_Val   ;配置端口F功能

                STR     R1, [R0, #GPCON_OFS]

                LDR     R1, =GPFUP_Val    ;配置端口F上位寄存器

                STR     R1, [R0, #GPUP_OFS]

                ENDIF


                IF      GPG_SETUP != 0

                LDR     R0, =GPG_BASE

                LDR     R1, =GPGCON_Val   ;配置端口G功能

                STR     R1, [R0, #GPCON_OFS]

                LDR     R1, =GPGUP_Val    ;配置端口G上位寄存器

                STR     R1, [R0, #GPUP_OFS]

                ENDIF

  

                IF      GPH_SETUP != 0

                LDR     R0, =GPH_BASE

                LDR     R1, =GPHCON_Val   ;配置端口H功

                STR     R1, [R0, #GPCON_OFS]

                LDR     R1, =GPHUP_Val    ;配置端口H上位寄存器

                STR     R1, [R0, #GPUP_OFS]

                ENDIF


                IF      GPJ_SETUP != 0

                LDR     R0, =GPJ_BASE

                LDR     R1, =GPJCON_Val   ;配置端口J功

                STR     R1, [R0, #GPCON_OFS]

                LDR     R1, =GPJUP_Val    ;配置端口J上位寄存

                STR     R1, [R0, #GPUP_OFS]

                ENDIF

               

                ENDIF

               

;-----------------------------------------------------------------------

;拷貝異常向量到內部RAM

;如果定義了RAM_INTVEC就執行下面一段程序

;-----------------------------------------------------------------------

                IF      :DEF:RAM_INTVEC

                ADR     R8,  Vectors    ; 讀取向量源地址

                LDR     R9, =IRAM_BASE  ; 讀取片上SRAM的基地址

                LDMIA   R8!, {R0-R7}    ; 批量加載異常向量

                STMIA   R9!, {R0-R7}    ; 批量存儲向量

                LDMIA   R8!, {R0-R7}    ; 加載程序入口地址(Load Handler Addresses )

                STMIA   R9!, {R0-R7}    ; 存儲程序入口地址(Store Handler Addresses)

                ENDIF


;-----------------------------------------------------------------------

;配置相應模式棧的大小(Setup Stack for each mode )

;下面這一段主要是設置各個異常模式的堆棧,注意在設置的時候需要禁止IRQ和FIQ.

;這段代碼也是系統復位后執行的第一段代碼。執行完這段代碼后系統處于系統模

;式,并且IRQ和FIQ都是禁止的。

;-----------------------------------------------------------------------   

                LDR     R0, =Stack_Top  ;加載棧頂指針地址


;-----------------------------------------------------------------------

;進入未定義模式,并設定其棧指針

;-----------------------------------------------------------------------

                ;將(Mode_UND | I_Bit | F_Bit)賦值給 CPSR_c即CPSR[7:0]

                MSR     CPSR_c, #Mode_UND:OR:I_Bit:OR:F_Bit

                MOV     SP, R0    ;棧頂指針地址賦值給SP指針

                SUB     R0, R0, #UND_Stack_Size  ;分其棧指針

                                    

;-----------------------------------------------------------------------

;進入異常中斷模式,并設定其棧指針

;下面這三句話與上面原理一樣

;-----------------------------------------------------------------------

                MSR     CPSR_c, #Mode_ABT:OR:I_Bit:OR:F_Bit

                MOV     SP, R0

                SUB     R0, R0, #ABT_Stack_Size


;-----------------------------------------------------------------------

;進入FIQ模式,并設定其棧指針

;下面這三句話與上面原理一樣

;-----------------------------------------------------------------------

                MSR     CPSR_c, #Mode_FIQ:OR:I_Bit:OR:F_Bit

                MOV     SP, R0

                SUB     R0, R0, #FIQ_Stack_Size


;-----------------------------------------------------------------------

;進入IRQ模式,并設定其棧指針

;下面這三句話與上面原理一樣

;-----------------------------------------------------------------------

                MSR     CPSR_c, #Mode_IRQ:OR:I_Bit:OR:F_Bit

                MOV     SP, R0

                SUB     R0, R0, #IRQ_Stack_Size


;-----------------------------------------------------------------------

;進入Supervisor模式,并設定其棧指針

;下面這三句話與上面原理一樣

;-----------------------------------------------------------------------

                MSR     CPSR_c, #Mode_SVC:OR:I_Bit:OR:F_Bit

                MOV     SP, R0

                SUB     R0, R0, #SVC_Stack_Size


;-----------------------------------------------------------------------

;進入用戶模式,并設定其棧指針

;下面這三句話與上面原理一樣

;-----------------------------------------------------------------------

;  Enter User Mode and set its Stack Pointer

                MSR     CPSR_c, #Mode_USR

                MOV     SP, R0

                SUB     SL, SP, #USR_Stack_Size


;-----------------------------------------------------------------------

;進入用戶模式

;-----------------------------------------------------------------------

                MSR     CPSR_c, #Mode_USR

                IF      :DEF:__MICROLIB  ;如果定義了__MICROLIB


                EXPORT __initial_sp      ;那么就聲明__initial_sp


                ELSE


                MOV     SP, R0           ;否則就設定用戶模式棧指針

                SUB     SL, SP, #USR_Stack_Size


                ENDIF


;-----------------------------------------------------------------------

;些處開始正式進入C代碼區

;反匯編以后C程序中的main函數名就變成了__main

;-----------------------------------------------------------------------

                IMPORT  __main      ;聲明__main 函數

                LDR     R0, =__main ;加載__main 函數入口地址

                BX      R0          ;跳轉到__main處



                IF      :DEF:__MICROLIB  ;如果定義了__MICROLIB


                EXPORT  __heap_base      ;則聲明__heap_base

                EXPORT  __heap_limit     ;聲明__heap_limit


                ELSE

;-----------------------------------------------------------------------

;用戶初始化堆與棧,用于動態申請內存使用

;__use_two_region_memory這是MDK的庫函

;__user_initial_stackheap也是一個庫函數,它的返回值有

;           * 堆基址(heap base)  --> R0

;           * 棧基址(stack base) --> R1 一般為棧的最高地址

;           * 堆頂(heap limit)   --> R2

;           * 棧頂(stack limit)  --> R3

;

;-----------------------------------------------------------------------

                AREA    |.text|, CODE, READONLY


                IMPORT  __use_two_region_memory

                EXPORT  __user_initial_stackheap

__user_initial_stackheap


                LDR     R0, =  Heap_Mem  ;堆內存起始地址 -->R0

                LDR     R1, =(Stack_Mem + USR_Stack_Size) ;棧起始地址 -->R1

                LDR     R2, = (Heap_Mem +      Heap_Size) ;堆頂 -->R2

                LDR     R3, = Stack_Mem  ;棧頂地址 --> R3

                BX      LR               ;子程序返回

                ENDIF


                END
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
日本一二三不卡视频| 国产精品免费aⅴ片在线观看| 日韩欧美国产激情| 国产精品视频xxxx| 成人乱码一区二区三区av| 特大巨黑人吊性xxx视频| 亚洲mmav| 国产亚洲1区2区3区| 国产成人综合av| 老头老太做爰xxx视频| 浮力影院网站午夜| 国产精品超碰| 偷窥国产亚洲免费视频| 好看的日韩精品| 国产性生活网站| 国产在线视频福利| 日本v片在线高清不卡在线观看| 国产丝袜一区二区| 激情综合网俺也去| 亚洲 小说区 图片区 都市| 四虎亚洲成人| 国产精品一区二区男女羞羞无遮挡 | 欧美tk—视频vk| 久久精品国产sm调教网站演员| 黄色一级视频免费看| 99热国产在线中文| www.66久久| 日本伊人精品一区二区三区介绍 | 欧美暴力喷水在线| 日韩欧美国产系列| 国产网站免费在线观看| 一本大道久久精品| 六月丁香久久丫| 在线观看国产精品网站| 亚洲国产91精品在线观看| 9191国产视频| 天天舔天天操天天干| 最新天堂资源在线资源| 久久99伊人| 美女福利精品视频| 日本少妇毛茸茸| 动漫h在线观看| 免费成人性网站| 国自在线精品视频| 午夜精品久久久久99蜜桃最新版 | 99riav国产精品视频| fc2ppv完全颜出在线播放| 黄色工厂这里只有精品| 亚洲最新av在线| 人妻av一区二区| 自拍av在线| 国产一区二区在线影院| 亚洲精品你懂的| 亚洲精品一区二| 一区二区视频在线观看免费的| 国产调教精品| 日韩亚洲欧美一区二区三区| 欧美性猛交久久久乱大交小说| 五月网丁香网| 黄色精品网站| 蜜臀久久99精品久久久无需会员 | 欧美综合国产| 午夜精品视频在线| 久久久久亚洲av无码专区体验| 国产1区在线| 中文子幕无线码一区tr| 国产午夜精品一区| 精品国产亚洲一区二区麻豆| 亚洲电影二区| 欧美日韩免费一区二区三区视频| 欧美在线观看成人| 成人在线播放网站| 免费成人在线观看| 国产精品入口免费视频一| 国产精品suv一区| 欧美黑粗硬大| 欧美日韩视频在线第一区| 国产三级日本三级在线播放| 国产成人午夜精品| 国产福利91精品| 成人区精品一区二区| 精品毛片在线观看| 窝窝社区一区二区| 亚洲精品自拍偷拍| 欧美在线一级片| 深夜福利视频在线观看| 国产超碰在线一区| 亚洲在线www| 国产日产亚洲系列最新| 日韩免费成人| 欧美一区二区三区免费视频| av在线网站免费观看| 欧美18xxxxx| 久久久不卡网国产精品一区| 日韩国产美国| 国产剧情av片巨作醉酒女邻居 | 国产精品一区二区入口九绯色| 免费一级在线观看播放网址| 91美女片黄在线观看91美女| 久久另类ts人妖一区二区| 天堂在线资源8| 天天揉久久久久亚洲精品| 日韩视频一区在线| 福利一区二区三区四区| www一区二区三区| 精品va天堂亚洲国产| 一本色道综合久久欧美日韩精品| 色综合久久影院| 一区二区三区资源| 熟女性饥渴一区二区三区| 香蕉自在线视频| 26uuu亚洲| 96pao国产成视频永久免费| 国产浮力第一页| 欧美亚洲国产精品久久| 蜜月aⅴ免费一区二区三区| 妺妺窝人体色www聚色窝仙踪| 日韩成人亚洲| 日韩欧美一级二级三级久久久| 亚洲v在线观看| 麻豆免费在线观看| 精品久久久久久久久久久久久久| 91制片厂毛片| h视频在线免费| 亚洲国产aⅴ成人精品无吗| 欧美性猛交xxx乱久交| 精品美女视频在线观看免费软件| 亚洲婷婷国产精品电影人久久| 777精品久无码人妻蜜桃| 95影院理论片在线观看| 国产精品久久久久一区二区三区 | a级黄色毛片| a亚洲天堂av| 一区二区三区四区视频在线观看| 日皮视频免费观看| 国产精品亚洲一区二区三区妖精| 欧美精品一区三区在线观看| 欧美精品一区二区成人| 亚洲成人1区| 亚洲国产精品久久不卡毛片| 成人性生生活性生交12| 国产日韩精品在线看| 亚洲一区二区精品3399| 久久久久xxxx| 青春草在线免费视频| 欧美日韩一区二区欧美激情| 免费黄色片网站| 亚洲一二av| 欧美日韩国产999| www.黄色av| 久久精品九九| 色播亚洲婷婷| 黄页网址大全在线播放| 精品福利一区二区| 素人fc2av清纯18岁| 高清久久一区| 午夜精品一区二区三区在线视| 亚洲精品久久久久avwww潮水| 9国产精品视频| 麻豆亚洲一区| 一本免费视频| 欧美日韩在线视频一区二区| 91在线无精精品白丝| 粉嫩av一区二区| 欧美一区二区视频97| 无国产精品白浆免费视| 不卡一区在线观看| 91香蕉视频污版| 美女搞黄视频在线观看| 亚洲人成电影网站色xx| 中文字幕欧美人妻精品| 免费看黄裸体一级大秀欧美| 亚洲精品自在在线观看| 男人av在线| 日韩一级在线观看| 天堂а√在线中文在线新版| 在线不卡亚洲| 色爱区成人综合网| 四虎影院在线播放| 91精品国产综合久久精品app| xxxxxx国产| 国产精品videosex极品| 久久亚洲一区二区| 在线国产1区| 欧美日韩国产片| 国产成人愉拍精品久久 | 伊人成综合网yiren22| 国产欧美韩国高清| 成在线人视频免费视频| 中文成人综合网| 在线观看亚洲免费视频| 欧美另类中文字幕| 欧美性在线观看| 香蕉视频网页版| 亚洲激情在线激情| 久久午夜夜伦鲁鲁片| 国内欧美日韩| 欧美激情一区二区三区久久久| 国产麻豆91视频| 久久国产精品久久w女人spa| 日韩成人在线资源| 四虎国产精品成人永久免费影视| 91免费在线视频观看| 波多野结衣免费观看| 尤物在线视频| 亚洲精品天天看| 精品视频一区二区在线观看| 亚洲国产精品一区| 无码人妻aⅴ一区二区三区日本| 国产黄色av免费看| 欧美中文字幕一区| 久久久久久九九九九九| 久久不见久久见国语| 久久久久久伊人| 男女视频免费看| 国产精品久久久久毛片大屁完整版 | 久久久国产欧美| 极品美乳网红视频免费在线观看| 欧美一区二区视频在线观看 | 国产免费一区二区三区香蕉精| 免费黄色av| 久久―日本道色综合久久| 青青草视频网站| 欧美影视资讯| 在线观看三级视频欧美| 欧美精品色哟哟| 亚洲瘦老头同性70tv| 久久久久久高清| 国产免费a∨片在线观看不卡| 日韩欧美在线播放| 国产又大又黄又粗| 综合色一区二区| 女同性恋一区二区| 欧洲毛片在线| 欧洲国产伦久久久久久久| 美女一区视频| 日本网站免费观看| 国产区精品区| 色与欲影视天天看综合网| japanese国产| 国产欧美精品区一区二区三区| 国产无套内射久久久国产| 天天综合91| 欧美日本高清视频| av官网在线| 亚洲乱码中文字幕| 日本三级欧美三级| 日韩在线观看| 日本道在线视频| 黄色大片在线看| 日韩一级裸体免费视频| 精品国产18久久久久久| 91蜜桃在线免费视频| 日日噜噜夜夜狠狠| 国产区精品视频在线观看豆花| 国产91热爆ts人妖在线| 在线视频尤物| 欧美三级电影在线看| av加勒比在线| 久久黄色级2电影| 久草免费资源站| 日韩视频一区二区三区四区| 国产精品一区二区免费看| 电影天堂久久| 欧美先锋资源| 国产乱子伦精品无码专区| 2222www色视频在线观看| 亚洲欧美日本另类| a天堂在线视频| 亚洲欧美综合色| 老熟妇精品一区二区三区| 欧美成人国产| 五月天亚洲综合小说网| 亚洲永久av| 色综合天天综合网国产成人网| 国产精品久久久久久免费| 日本亚洲三级在线| 日本少妇毛茸茸| 国产精品久久久网站| 视频一区亚洲| 日韩精品黄色| 日韩av观看网址| 色先锋最新资源| 日韩欧美国产一二三区| 亚洲综合免费视频| 中文字幕一区二区三| 精品人妻无码一区二区三区换脸| 国产亚洲精品v| 黄网站色视频免费观看| 成人另类视频| 欧洲亚洲免费视频| 国产午夜在线观看| 欧美日韩第一区日日骚| 男女午夜激烈无遮挡| 免费xxxx性欧美18vr| 久草视频福利在线| 精品成人av| 日本一区二区三不卡| 伪装者免费全集在线观看| 国产+人+亚洲| 无码国精品一区二区免费蜜桃| 欧美日韩另类字幕中文| 男人晚上看的视频| 成人午夜视频在线| 国产真实乱子伦| 91蜜臀精品国产自偷在线| 国产日产精品一区二区三区四区| 久久久123| 精品久久久av| 宅男视频免费在线观看视频| 在线亚洲人成电影网站色www| 高清视频一区二区三区四区| 另类小说一区二区三区| 国产性猛交xx乱| 精品视频免费| 天天操狠狠操夜夜操| 丝袜美女写真福利视频| 欧美国产在线电影| www中文字幕| 91精品国产一区二区三区蜜臀| 2023国产在线观看| 日本韩国一区二区三区视频| 影音先锋中文在线播放| 日韩美女视频一区二区| 国产xxxx孕妇| 国产精品私房写真福利视频| 一本色道久久综合亚洲| 337p粉嫩大胆噜噜噜噜噜91av | 日韩精品在线看片z| a级片在线播放| 色女孩综合影院| 中文无码av一区二区三区| 亚洲精品成人天堂一二三| 妺妺窝人体色www聚色窝仙踪| 91网址在线看| 日本少妇xxxxx| 91色九色蝌蚪| 亚洲视频久久久| 国产亚洲短视频| 性做久久久久久久| 亚洲色图欧洲色图| 蜜桃91麻豆精品一二三区| 国产亚洲自拍一区| 亚洲熟妇无码久久精品| 久久久久久久久久看片| 91成品人影院| 国产精品久久久久久久久免费桃花 | 国产精品午夜国产小视频| 一级特黄毛片| 一区三区二区视频| 亚洲第一页在线观看| 欧美亚洲一区三区| 你懂的视频网址| 91精选在线观看| a级毛片免费| 亚洲国产成人在线视频| 国产日本精品视频| 亚洲精品五月天| 亚洲欧美综合自拍| 精品久久久一区二区| 国产黄色免费| 欧美一区二区女人| 国产无遮挡又黄又爽免费软件| 亚洲黄色有码视频| 亚洲做受高潮| 久操成人在线视频| 中文字幕在线播放网址| 国产精品久久中文| 日韩av懂色| 国产精品视频免费观看| 一区二区三区亚洲变态调教大结局 | 亚洲欧美综合网| 一区二区在线观看视频在线| 欧美精品一区二区三区高清aⅴ | 亚洲成人一二三| 国产又粗又猛又爽又黄视频| 欧美另类久久久品| 一区二区三区激情视频| 亚洲视频第一页| 先锋影音资源综合在线播放av| 日本久久久久久久| 求av网址在线观看| 亚洲人久久久| 91精品国产自产拍在线观看蜜| www.日日操| 精品一区二区久久久| 国产三级在线观看完整版| 国产精品热久久久久夜色精品三区 | av伊人久久| 99999精品视频| 奇米影视一区二区三区小说| 三上悠亚ssⅰn939无码播放| 中日韩av电影| 国产无套在线观看| 一本到不卡免费一区二区| 国产综合图区| 亚洲美女www午夜| 最新av网站在线观看| 成人免费高清完整版在线观看| 视频精品一区|