⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 chipinit.s

📁 STR71X ARM 启动代码, 与网上的大多数移植代码有些不一样
💻 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 + -