?? chipinit.s
字號:
;/****************************************Copyright (c)**************************************************
;**
;**
;** 杭州央海軟件科技有限公司
;**
;** http://www.armgcc.com
;**
;**--------------文件信息--------------------------------------------------------------------------------
;** 文 件 名: ChipReset.s
;** 創建日期: 2006年5月18日
;** 描 述: STR710啟動時芯片初始化代碼
;**
;**-----------版本信息-----------------------------------------------------------------------------------
;** 修 改 人: 羅輝聯
;** 版 本: V1.0
;** 日 期:
;** 描 述:
;**
;**------------------------------------------------------------------------------------------------------
;********************************************************************************************************/
;中斷控制寄存器說明
EIC_BASE_ADDR EQU 0xFFFFF800 ;//EIC接口基地址
CICR_OFF_ADDR EQU 0x04 ;//當前中斷通道寄存器偏移量
ICR_OFF_ADDR EQU 0x00 ;//中斷控制寄存器偏移量
CIPR_OFF_ADDR EQU 0x08 ;//當前中斷優先級寄存器偏移量
IVR_OFF_ADDR EQU 0x18 ;//中斷向量寄存器偏移量
FIR_OFF_ADDR EQU 0x1C ;//快速中斷寄存器偏移量
IER_OFF_ADDR EQU 0x20 ;//中斷允許寄存器偏移量
IPR_OFF_ADDR EQU 0x40 ;//中斷懸掛寄存器偏移量
SIR0_OFF_ADDR EQU 0x60
;I/O端口寄存器配置說明
GPIO0_BASE_ADDR EQU 0xE0003000 ;//GPIO0基地址
GPIO1_BASE_ADDR EQU 0xE0004000
GPIO2_BASE_ADDR EQU 0xE0005000
PC0_OFF_ADDR EQU 0x00 ;//端口配置寄存器0偏移量
PC1_OFF_ADDR EQU 0x04 ;//端口配置寄存器1偏移量
PC2_OFF_ADDR EQU 0x08 ;//端口配置寄存器2偏移量
PD_OFF_ADDR EQU 0x0C ;//端口配數據寄存器2偏移量
;ABP橋配置寄存器說明
APB1_BASE_ADDR EQU 0xC0000000 ;//APB橋1基地址
APB2_BASE_ADDR EQU 0xE0000000
CKDIS_OFF_ADDR EQU 0x10 ;//APB橋時鐘禁止寄存器偏移量
SWRES_OFF_ADDR EQU 0x14 ;//APB橋軟件復位寄存器偏移量
CKDIS1_CONFIG_ALL EQU 0x27FB
SWRES1_CONFIG_ALL EQU 0x27FB
CKDIS2_CONFIG_ALL EQU 0x7FDD
SWRES2_CONFIG_ALL EQU 0x7FDD
;EMI配置寄存器說明
EMI_ENABLE EQU 0x8000 ;//EMI允許控制
EMI_SIZE_16 EQU 0x0001
EMI_SIZE_8 EQU 0x0000 ;//EMI接口寬度定義
EMI_WAIT_STATE_0 EQU 0x0 ;//存儲器讀寫過程插入的等待周期定義
EMI_WAIT_STATE_1 EQU 0x4
EMI_WAIT_STATE_2 EQU 0x8
EMI_WAIT_STATE_3 EQU 0xC
EMI_WAIT_STATE_4 EQU 0x10
EMI_WAIT_STATE_5 EQU 0x14
EMI_WAIT_STATE_6 EQU 0x18
EMI_WAIT_STATE_7 EQU 0x1C
EMI_WAIT_STATE_8 EQU 0x20
EMI_WAIT_STATE_9 EQU 0x24
EMI_WAIT_STATE_10 EQU 0x28
EMI_WAIT_STATE_11 EQU 0x2C
EMI_WAIT_STATE_12 EQU 0x30
EMI_WAIT_STATE_13 EQU 0x34
EMI_WAIT_STATE_14 EQU 0x38
EMI_WAIT_STATE_15 EQU 0x3C
EMI_BASE_ADDR EQU 0x6C000000 ;//EMI基址
BCON0_OFF_ADDR EQU 0x00
BCON1_OFF_ADDR EQU 0x04 ;//Bank1配置寄存器偏移量
BCON2_OFF_ADDR EQU 0x08
BCON3_OFF_ADDR EQU 0x0C ;//Bank3配置寄存器偏移量
;存儲器重映射寄存器說明
CPM_BASE_ADDR EQU 0xA0000040 ;//CPM基地址
BOOTCR_OFF_ADDR EQU 0x10 ;//CPM BOOT配置寄存器
REMAP_INTER_RAM EQU 0x0001 ;//0x00000000地址映射到內部 RAM
REMAP_INTER_FLASH EQU 0x0002 ;//0x00000000地址映射到FLASH
REMAP_EXT_MEMORY EQU 0x0003 ;//0x00000000地址映射到外部存儲器
;BANK初始化選擇邏輯變量定義
; GBLL BANK0_SELECT
GBLL BANK1_SELECT
; GBLL BANK2_SELECT
; GBLL BANK3_SELECT
;給外部使用的標號或者函數
EXPORT ChipResetInit
;代碼段聲明
CODE32
AREA ChipReset,CODE,READONLY
;/*********************************************************************************************************
;** 函數名稱: ChipResetInit
;** 功能描述: 芯片基本初始化
;**
;** 參 數: None
;**
;** 返 回 值: None
;**
;** 作 者: 羅輝聯
;** 日 期: 2006年5月18日
;**-------------------------------------------------------------------------------------------------------
;** 修 改 人:
;** 日 期:
;**------------------------------------------------------------------------------------------------------
;********************************************************************************************************/
ChipResetInit
MOV R8, LR ;//函數返回地址保存在R8中
;CPU基本設備初始化
LDR R1, =APB1_BASE_ADDR ;//取得APB1基地址
LDR R2, =APB2_BASE_ADDR ;//取得APB2基地址
LDR R0, =CKDIS1_CONFIG_ALL
STRH R0, [R1, #CKDIS_OFF_ADDR] ;//禁止所有APB1設備時鐘
LDR R0, =CKDIS2_CONFIG_ALL
STRH R0, [R2, #CKDIS_OFF_ADDR] ;//禁止所有APB2設備時鐘
LDR R0, =SWRES1_CONFIG_ALL
STRH R0, [R1, #SWRES_OFF_ADDR] ;//軟件復位所有的APB1設備
LDR R0, =SWRES2_CONFIG_ALL
STRH R0, [R2, #SWRES_OFF_ADDR] ;//軟件復位所有的APB2設備
MOV R7, #10 ;//等待軟件復位結束
Loop1 SUBS R7, R7, #1
BNE Loop1
MOV R0, #0
STRH R0, [R1, #SWRES_OFF_ADDR] ;//允許所有APB1設備
STRH R0, [R2, #SWRES_OFF_ADDR] ;//允許所有APB1設備
STRH R0, [R1, #CKDIS_OFF_ADDR] ;//允許所有APB1設備時鐘
STRH R0, [R2, #CKDIS_OFF_ADDR] ;//允許所有APB1設備時鐘
MOV R7, #10
Loop2 SUBS R7, R7, #1
BNE Loop2
;EMI基本初始化
LDR R0, =GPIO2_BASE_ADDR
LDR R2, =0xFFFF ;//Only Configure P2.0~P2.3 in AF_PP mode for CS0~CS3
STRH R2, [R0, #PC0_OFF_ADDR]
LDR R2, =0xFFFF ;//其余的GPIO2為輸入
STRH R2, [R0, #PC1_OFF_ADDR]
LDR R2, =0x00FF
STRH R2, [R0, #PC2_OFF_ADDR]
LDR R0, =EMI_BASE_ADDR
IF :DEF: BANK0_SELECT
LDR R1, =EMI_WAIT_STATE_7:OR:EMI_ENABLE:OR:EMI_SIZE_16
STR R1, [R0, #BCON0_OFF_ADDR] ;//允許BANK0 16-bit 7 wait state
ENDIF
IF :DEF: BANK1_SELECT
LDR R1, =EMI_WAIT_STATE_7:OR:EMI_ENABLE:OR:EMI_SIZE_16
STR R1, [R0, #BCON1_OFF_ADDR] ;//允許BANK1 16-bit 7 wait state
ENDIF
IF :DEF: BANK3_SELECT
LDR R1, =EMI_WAIT_STATE_7:OR:EMI_ENABLE:OR:EMI_SIZE_16
STR R1, [R0, #BCON2_OFF_ADDR] ;//允許BANK2 16-bit 7 wait state
ENDIF
IF :DEF: BANK4_SELECT
LDR R1, =EMI_WAIT_STATE_7:OR:EMI_ENABLE:OR:EMI_SIZE_16
STR R1, [R0, #BCON3_OFF_ADDR] ;//允許BANK3 16-bit 7 wait state
ENDIF
;ECI基本初始化
LDR R3, =EIC_BASE_ADDR
MOV R0, #0
MVN R1, #0
MOV R2, #0x0C
STR R0, [R3, #ICR_OFF_ADDR] ;//禁止IRQ和FIQ中斷
STR R0, [R3, #IER_OFF_ADDR] ;//禁止IRQ中斷的所有通道
STR R1, [R3, #IPR_OFF_ADDR] ;//清除IRQ中斷各Pending位
STR R2, [R3, #FIR_OFF_ADDR] ;//禁止FIQ通道中斷,同時清除FIQ中斷通道Pending位
STR R0, [R3, #CIPR_OFF_ADDR] ;//初始化所有IRQ通道中斷的優先級為零
MOV PC, R8 ;//程序返回
END
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -