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

📄 44binit.s

📁 ARM7(s3c44b0)开发平台LCD驱动程序
💻 S
📖 第 1 页 / 共 2 页
字号:
;/*
;************************************************************************************************************
;*				        				北京精仪达盛科技有限公司
;*                                     	     研    发    部
;*
;*                                 	     http://www.techshine.com
;*
;*--------------------------------------------- 文件信息 ----------------------------------------------------                                      
;*
;* 文件名称 : 44binit.s	
;* 文件功能 : 该文件为ARM7硬件平台的C语言启动代码,用于分配中断向量表,初始化ISR地址,初始化堆栈空间,
;*            初始化应用程序执行环境,配置存储器系统,设定时钟周期,呼叫主应用程序。
;* 补充说明 : 基于S3C44B0的ARM7硬件平台的启动代码
;*-------------------------------------------- 最新版本信息 -------------------------------------------------
;* 修改作者 : ARM开发小组
;* 修改日期 : 2004/04/25
;* 版本声明 : V1.0.1
;*-------------------------------------------- 历史版本信息 -------------------------------------------------
;* 文件作者 : ARM开发小组
;* 创建日期 : 2004/04/20
;* 版本声明 : v1.0.0
;*-----------------------------------------------------------------------------------------------------------
;*-----------------------------------------------------------------------------------------------------------
;************************************************************************************************************
;*/
 
    GET ..\inc\option.inc
    GET ..\inc\memcfg.inc
 
    IMPORT	|Image$$RO$$Limit|  		         ;// 声明输入ROM区中的RW地址(即:存储RO代码最后地址的下一地址)
    IMPORT	|Image$$RW$$Base|   		                                          ;// 声明输入RAM区的开始地址
    IMPORT	|Image$$ZI$$Base|   		                                     ;// 声明输入零初始化区的开始地址
    IMPORT	|Image$$ZI$$Limit|  		                             ;// 声明输入零初始化区的末地址的下一地址

    IMPORT  Main    					                                           ;// 声明输入主程序入口地址
   
    AREA    Init,CODE,READONLY

    ENTRY 
    b ResetHandler  					                                               ;//调试用的程序入口地址
    b HandlerUndef  					 ;//从未定义向量地址跳到一个地址,该地址存放进入未定义服务子程序的地址
    b HandlerSWI    					 ;//从软中断向量地址跳到一个地址,该地址存放进入软中断服务子程序的地址
    b HandlerPabort 	 ;//从指令预取指终止向量地址跳到一个地址,该地址存放进入指令预取指终止服务子程序的地址
    b HandlerDabort 				 ;//从数据终止向量地址跳到一个地址,该地址存放进入数据终止服务子程序的地址
    b .		    						                                                           ;//系统保留
    subs pc,lr,#4   					                                                   ;//使用向量中断方式
    b HandlerFIQ						       ;//从FIQ向量地址跳到一个地址,该地址存放进入FIQ服务子程序的地址
	
;/*********************************************** 注意! ******************************************************/

	   ;// 如果向量中断模式使能, 上面两条指令应按下面给出的相应改变
	   ;// b HandlerIRQ  ->  subs pc,lr,#4
	   ;// b HandlerFIQ  ->  subs pc,lr,#4

;/******************************* S3C44B0X中断控制器的向量中断的向量地址表 ***********************************/	
VECTOR_BRANCH
    ldr pc,=HandlerEINT0    																      ;//0x00000020
    ldr pc,=HandlerEINT1    																	  ;//0x00000024	
    ldr pc,=HandlerEINT2    																	  ;//0x00000028
    ldr pc,=HandlerEINT3    																	  ;//0x0000002C
    ldr pc,=HandlerEINT4567 																	  ;//0x00000030
    ldr pc,=HandlerTICK	    																	  ;//0x00000034
    
    	ldr pc,=HandlerDef																		  ;//0x00000038
    	ldr pc,=HandlerDef																		  ;//0x0000003C
    	
    ldr pc,=HandlerZDMA0    																	  ;//0x00000040
    ldr pc,=HandlerZDMA1    																	  ;//0x00000044
    ldr pc,=HandlerBDMA0    																	  ;//0x00000048
    ldr pc,=HandlerBDMA1    																	  ;//0x0000004C
    ldr pc,=HandlerWDT	    																	  ;//0x00000050
    ldr pc,=HandlerUERR01   																	  ;//0x00000054
    
    	ldr pc,=HandlerDef																		  ;//0x00000058
    	ldr pc,=HandlerDef																		  ;//0x0000005C
    	
    ldr pc,=HandlerTIMER0   																	  ;//0x00000060
    ldr pc,=HandlerTIMER1   																	  ;//0x00000064
    ldr pc,=HandlerTIMER2   																	  ;//0x00000068
    ldr pc,=HandlerTIMER3   																	  ;//0x0000006C
    ldr pc,=HandlerTIMER4   																	  ;//0x00000070
    ldr pc,=HandlerTIMER5   																	  ;//0x00000074
    
    	ldr pc,=HandlerDef																		  ;//0x00000078
    	ldr pc,=HandlerDef																		  ;//0x0000007C
    	
    ldr pc,=HandlerURXD0    																	  ;//0x00000080
    ldr pc,=HandlerURXD1    																	  ;//0x00000084
    ldr pc,=HandlerIIC	    																	  ;//0x00000088
    ldr pc,=HandlerSIO	    																	  ;//0x0000008C
    ldr pc,=HandlerUTXD0    																	  ;//0x00000090
    ldr pc,=HandlerUTXD1    																	  ;//0x00000094
    
    	ldr pc,=HandlerDef																		  ;//0x00000098
    	ldr pc,=HandlerDef																		  ;//0x0000009C
    	
    ldr pc,=HandlerRTC	    																	  ;//0x000000A0
    
    	ldr pc,=HandlerDef		    															  ;//0x000000A4
    	ldr pc,=HandlerDef			    														  ;//0x000000A8
    	ldr pc,=HandlerDef			    														  ;//0x000000AC
    	ldr pc,=HandlerDef			    														  ;//0x000000B0
    	ldr pc,=HandlerDef	    																  ;//0x000000B4
    	ldr pc,=HandlerDef																		  ;//0x000000B8
    	ldr pc,=HandlerDef																	      ;//0x000000BC
    	
    ldr pc,=HandlerADC	    																	  ;//0x000000C0
    
    	ldr pc,=HandlerDef			    														  ;//0x000000C4
    	ldr pc,=HandlerDef			    														  ;//0x000000C8
    	ldr pc,=HandlerDef			    														  ;//0x000000CC
    	ldr pc,=HandlerDef			    														  ;//0x000000D0
    	ldr pc,=HandlerDef		 																  ;//0x000000D4
    	ldr pc,=HandlerDef																		  ;//0x000000D8
    	ldr pc,=HandlerDef																		  ;//0x000000DC
    	
	ldr pc,=EnterPWDN       														  ;//0x000000E0 = EnterPWDN
    	LTORG	

HandlerFIQ      HANDLER  	HandleFIQ
HandlerIRQ		HANDLER  	HandleIRQ     															;//没有使用!
HandlerUndef	HANDLER  	HandleUndef
HandlerSWI		HANDLER  	HandleSWI
HandlerDabort	HANDLER  	HandleDabort
HandlerPabort	HANDLER  	HandlePabort

HandlerADC      VHANDLER 	HandleADC
HandlerRTC      VHANDLER 	HandleRTC
HandlerUTXD1	VHANDLER 	HandleUTXD1
HandlerUTXD0	VHANDLER 	HandleUTXD0
HandlerSIO		VHANDLER 	HandleSIO
HandlerIIC		VHANDLER 	HandleIIC
HandlerURXD1	VHANDLER 	HandleURXD1
HandlerURXD0	VHANDLER 	HandleURXD0
HandlerTIMER5	VHANDLER 	HandleTIMER5
HandlerTIMER4	VHANDLER 	HandleTIMER4
HandlerTIMER3	VHANDLER 	HandleTIMER3
HandlerTIMER2	VHANDLER 	HandleTIMER2
HandlerTIMER1	VHANDLER 	HandleTIMER1
HandlerTIMER0	VHANDLER 	HandleTIMER0
HandlerUERR01	VHANDLER 	HandleUERR01
HandlerWDT	    VHANDLER 	HandleWDT
HandlerBDMA1	VHANDLER 	HandleBDMA1
HandlerBDMA0	VHANDLER 	HandleBDMA0
HandlerZDMA1	VHANDLER 	HandleZDMA1
HandlerZDMA0	VHANDLER 	HandleZDMA0
HandlerTICK	    VHANDLER 	HandleTICK
HandlerEINT4567	VHANDLER 	HandleEINT4567
HandlerEINT3	VHANDLER 	HandleEINT3
HandlerEINT2	VHANDLER	HandleEINT2
HandlerEINT1	VHANDLER 	HandleEINT1
HandlerEINT0	VHANDLER 	HandleEINT0

HandlerDef
     stmfd   sp!,{r0,r1}																		;//r0,r1入栈
     ldr     r0,=I_PMST													 ;//把中断主从优先级分配器地址放入r0
     ldr     r1,[r0]																 ;//把其里面的内容放入r1
     str     r1,[r0]							             ;//把寄存器r1的内容放入中断主从优先级分配器地址
     ldmfd   sp!,{r0,r1}						                                ;//原r0,r1工作寄存器内容出栈
     subs    pc,lr,#4							                                         ;//跳回到原执行地址
     
;/*
;************************************************************************************************************
;**						                         程序开始		                                           **
;************************************************************************************************************
;*/

ResetHandler
    b  Main
    ldr	    r0,=WTCON	    														;//把看门狗定时器地址给r0 
    mov     r1,#0x00             																	;//赋初值		
    str	    r1,[r0]																	      ;//关闭看门狗定时器

    ldr	    r0,=INTMSK							                                  ;//把屏蔽中断寄存器地址给r0 
    mov     r1,#0x07ffffff   					                                                    ;//赋初值 
    str	    r1,[r0]								                                              ;//关闭所有中断
	
;/*
;************************************************************************************************************
;**	                                             时钟控制器配置                                            **
;************************************************************************************************************
;*/
    
    ldr	r0,=LOCKTIME							                                  ;//把上锁时间定时器地址给r0
    ldr r1,=0x8fc;        						         ;//赋初值count = t_lock * Fin = 230us * 10MHz = 2300
    str	r1,[r0]									                   ;//写入上锁时间定时器,PLL稳定时间为230 us

    [ PLLONSTART
	ldr	r0,=PLLCON								                                     ;//PLL控制寄存器地址给r0
	ldr	r1,=((M_DIV<<12) + (P_DIV<<4) + S_DIV)	                           ;//设定锁相环 Fin=10MHz,Fout=40MHz
	str	r1,[r0]									                                         ;//写入PLL控制寄存器
    ]

    ldr	    r0,=CLKCON							                                     ;//把时钟控制器地址给r0	 
    ldr	    r1,=0x7ff8							                              ;//给所有外设单元的时钟打开赋值	
    str	    r1,[r0]								                                            ;//写入时钟控制器
;/*
;************************************************************************************************************
;**			                                   DMA寄存器配置                                               ** 	
;************************************************************************************************************
;*/
    ldr     r0,=BDIDES0       
    ldr     r1,=0x40000000   													;//BDIDES0 复位值为 0x40000000	 
    str     r1,[r0]

    ldr     r0,=BDIDES1      
    ldr     r1,=0x40000000   													;//BDIDES1 复位值为 0x40000000	 
    str     r1,[r0]	
;/*
;************************************************************************************************************
;**			                                   存储器寄存器配置                                            ** 	
;************************************************************************************************************
;*/
    
    ldr	    r0,=SMRDATA							                                  ;//把配置数据的存放地址送入
    ldmia   r0!,{r1-r13}							                                            ;//存入寄存器
    mov     r0,#0x01c80000            			                                        ;//加载总线控制器地址
    stmia   r0!,{r1-r13}							                                ;//送入控制字到总线控制器
    
;/*
;************************************************************************************************************
;**                                               初始化堆栈                                               ** 
;************************************************************************************************************
;*/
    
    bl	    InitStacks
	

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -