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

📄 init.s

📁 s3c2410下的简单外部中断实现
💻 S
字号:
 
  area init,code,readonly
  ENTRY
  B   RESET	;复位异常向量,跳转到程序开始位置。
  B       undefined				;未定义指令异常,跳转到当前位置。
  B       SWI				;SWI异常,跳转到当前位置。
  B       INDEX	
  nop			;指令预取中止异常,跳转到当前位置。
  B    DATAEND				;数据访问中止异常,跳转到当前位置。
  B       IRQ	       ;IRQ异常,跳转到响应中断服务程序。
  B       FIQ				;FIQ异常,跳转到当前位置。
  
   
  
   
RESET

    LDR R0,=0X56000010      ;LED controler
    LDR R1,=0X00154000
    STR R1,[R0]
    
    
   ; LDR	SP, =0x3FE1000		;SP指向4K SRAM的尾地址,堆栈向下生成    
            
    LDR R0,=0X56000014      ;LED data_register
    LDR R1,=0Xbff
    STR R1,[R0]
    
    
    ;//////////init 中断
    msr cpsr_c,#0xd2
    ldr sp ,=0x33000000
    msr cpsr_c,#0xdf
    ldr sp, =0x34000000
    ;bl  init_irq            ;////////////////////////////
    LDR R0,=0X56000050      ;GPFCON  TEST-49
   ; LDR R1,=0X80c8
   
    LDR R1,=0X08 
    STR R1,[R0]
    
    ;LDR R0,=0X56000058      ;GPFUP   TEST-50
    ;LDR R1,=0X8E
   ; STR R1,[R0]
    
    LDR R0,=0X560000A4 ;    EINTMASK p280    
    LDR R1,=0Xfffffff0
    STR R1,[R0]
    
    LDR R0,=0X4A000008   ;INTMASK  打印出来的10   
    LDR R1,=0Xfffffffd
    STR R1,[R0]
    
    LDR R0,=0X4A00000C     ;PRIORITY  12
    LDR R1,=0Xfc
    STR R1,[R0]  
    
    msr cpsr_c, #0x5f
    
    
    
    
    ;/////////////////////////////////
        
loop
  nop
  LDR R0,=0X56000014      ;data_register
  LDR R1,=0XFff
  STR R1,[R0]
  
  nop
  LDR R0,=0X56000014
  LDR R1,=0X0
  STR R1,[R0]
  
  
  B loop
  
 ;///////////////////////////////////////////////IRQ_handle 
  
IRQ
   
   	sub lr,lr,#4   ;计算返回地址
   	stmdb sp!,  {r0-r12,lr}   ;保护现场
   	ldr lr ,   =int_return
   	;///////////////////////  清中断
   	
   	;LDR R3,=0X560000A8      ;EINTPEND
   	;LDR R3,=0X560000A8
   	;LDR R4,=0X80 
   	;STR R4,[R3]
   	
   	LDR R0,=0X4A000000            ; SURPND 
   	LDR R1,=0X2
    STR R1,[R0]
    
   	LDR R0,=0X4A000010         ; INTPND
    LDR R1,=0X2
    STR R1,[R0] 
    ; b   pp                       
     ;//////LED display
kkk
     nop
     LDR R0,=0X56000014
     LDR R1,=0Xffff
     STR R1,[R0]
     NOP        
     b delay   ;//////////////////////////////////
    
    LDR R0,=0X56000014
     LDR R1,=0X0000
     STR R1,[R0]
     
     
     
     b delay 
    ;LDR R0,=0X4A000000            ; SURPND 
   	;LDR R1,=0X0
   ; STR R1,[R0]
    
   ; LDR R0,=0X4A000000            ; SURPND 
   ;	LDR R1,=0X2
    ;STR R1,[R0]
    ;b delay
     
    ; B kkk
     ;//////////////
int_return
    ldmia sp!,  {r0-r12,pc}^  ;中断返回,^表示将SPSR的值复制到CPSR

;////////////////////////////////////////

;////////////////////////////////delay
delay
	ldr r3,=0x0ffffff    ;set the delay time
delay1
	sub r3,r3,#1   ;r3=r3-1
	cmp r3,#0x0    ;compare r3 with 0
	bne delay1     ;the result of compare is not 0 call delay1 else excause the last
	mov pc,lr      ;return
;//////////////////////////////////////////////////////
undefined
    B  undefined
SWI
    B  SWI
INDEX
    B INDEX
DATAEND
    B  DATAEND
;IRQ
   ; B  IRQ              
FIQ
    B  FIQ 
   
    END

⌨️ 快捷键说明

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