www.pudn.com > system.rar > ChipInit.s, change:2006-10-20,size:7734b


;/****************************************Copyright (c)************************************************** 
;**                                       
;**                                           
;**                               杭州央海软件科技有限公司 
;** 
;**                                 http://www.osmcu.com 
;** 
;**--------------文件信息-------------------------------------------------------------------------------- 
;** 文 件 名: ChipInit.s 
;** 创 建 人: 罗辉联 	 
;** 创建日期: 2006年6月10日 
;** 描    述: 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年6月10日 
;**------------------------------------------------------------------------------------------------------- 
;** 修 改 人:  
;** 日   期:  
;**------------------------------------------------------------------------------------------------------ 
;********************************************************************************************************/   
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