📄 chipinit.s
字号:
;/****************************************Copyright (c)**************************************************
;**
;**
;** 杭州央海软件科技有限公司
;**
;** http://www.osmcu.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 + -