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

📄 复件initbdi_key.s

📁 at91arm7处理器的启动源码
💻 S
📖 第 1 页 / 共 4 页
字号:

          LDMFD sp!,{r0-r1,PC};Return

LCD_DataRead
          STMFD sp!,{r0-r1,lr}
;读数据,R7

;>=140ns? or delay450ns=>600ns

          ldrb r0,=LCD_DR_E
          ldr r1,=CS4_addr
          strb r0,[R1]
          bl delay600ns
;read,close E
          bl R0_readP0_P7

          mov r7,r0

          ldrb r0,=LCD_DR
          strb r0,[R1]
          bl delay2ms

          LDMFD sp!,{r0-r1,PC};Return

LCD_DataWrite
          STMFD sp!,{r0-r1,lr}
;写数据,r7

;>=140ns? or delay450ns=>600ns

          ldrb r0,=LCD_DW_E
          ldr r1,=CS4_addr
          strb r0,[R1]

          mov r0,r7
          bl R0_writeP0_P7

          bl delay600ns
;write,close E
          ldrb r0,=LCD_DW
          strb r0,[R1]
          bl delay600ns

          LDMFD sp!,{r0-r1,PC};Return

PR1      STMFD sp!,{lr}   
;写指令
;preset R7
PR11
         bl LCD_CommandRead
         bcs PR11
         bl LCD_CommandWrite

         LDMFD sp!,{PC};Return


PR2        STMFD sp!,{lr}
;写显示数据,
;preset r7
PR21
           bl LCD_CommandRead
           bcs PR21
           bl LCD_DataWrite

           bl delay1ms
           
           LDMFD sp!,{PC};Return

PR3        STMFD sp!,{lr}
;读显示数据,r7
PR31
           bl LCD_CommandRead
           bcs PR31
           bl LCD_DataRead           
           LDMFD sp!,{PC};Return





INITLCD    STMFD sp!,{R7,lr}
;LCD初始化设置子程序           

           ldr r7,=0x00000030
           bl  PR1
           bl delay2ms

           ldr r7,=0x00000030
           bl  PR1
           bl delay2ms

           ldr r7,=0x00000030
           bl  PR1
           bl delay2ms

    
           ldr r7,=0x00000038
           bl  PR1;设置工作方式8-bit,
           bl delay2ms
           
           ldr r7,=0x00000001
           bl  PR1;清屏
           bl delay2ms
           
           ldr r7,=0x00000006
           bl  PR1;设置输入方式
           bl delay2ms
           
           ldr r7,=0x00000000F
           bl  PR1;设置显示方式
           bl delay2ms        
        
           LDMFD sp!,{R7,PC};Return

 
DISPLAY_CHAR  STMFD sp!,{r1,R7,lr}
;hex to char
;WRITE R3 LOW 4 BIT BEFORE CALL
;R3 LOW 4-BIT

           LDR  R1,=hex_to_char_tab;hex->char
           LDRB  R7,[R1,R3]
   
           bl PR2
         
           LDMFD sp!,{r1,R7,PC};Return

DISPLAY_R0  STMFD sp!,{R1-R3,lr}
;DISPLAY R0
;WRITE R0 BEFORE

            LDR  R2,=0x1C;右移位数
            LDR  R1,=0x0FFFFFFF

DIS_R0_LOOP 
            BIC  R3,R0,R1
            MOV  R3,R3,LSR R2
            BL DISPLAY_CHAR;
            
            CMP R2,#0
            BEQ DIS_R0_END
   
            MOV  R1,R1,ROR #4
            SUB  R2,R2,#4
            B DIS_R0_LOOP
           
DIS_R0_END
            LDMFD sp!,{R1-R3,PC};Return



DISPLAYRAM STMFD   sp!,{R0-R2,lr}
;r1 start addr
;           LDR  R1,=0x02000000;START ADDRESS TO DISPLAY
;以0xFFFFFFFF结尾
           SUB  R1,R1,#4
           LDR  R2,=0xFFFFFFFF;END OF DISP

DISPRAMLOOP  LDR  R0,[R1,#4]!
             CMP  R0,R2
             BEQ  DISPRAMEND
             
             BL DISPLAY_R0

             B DISPRAMLOOP
DISPRAMEND
             LDMFD sp!,{R0-R2,PC};Return


WRIstring  STMFD sp!,{r0,r7,lr}
;正常显示字符串,以0x00结尾
;入口:r5=字符串首地址!
           LDR  R0,=0x0;COUNT        

WRIachar   LDRB R7,[R5,R0]
           CMP R7,#0
           BEQ WRIstrend

           BL PR2
           ADD R0,R0,#1
           B WRIachar

WRIstrend  LDMFD sp!,{r0,r7,pc};Return



test_DISPLAY_R0
           STMFD sp!,{r0,lr}
           
           ldr r0,=0xa5a5a5a5
           bl DISPLAY_R0

           LDMFD sp!,{r0,pc};Return
           
lcd_main   STMFD sp!,{r5,lr}

           BL INITLCD
           
           LDR  R5,=my_wel_str
           BL WRIstring      
         
           LDMFD sp!,{r5,pc};Return



SoftWareINT
; SWI has routine required in bits 8-23 and data (if any) in
; bits 0-7.
; Assumes R13_svc points to a suitable stack
                            
             stmfd sp!,{r0-r2,lr,pc}
             mov r0,sp
             mrs r1,cpsr
             mrs r2,spsr
             stmfd sp!,{r0-r12}  
                               ;current all

;Mode_USR        EQU     0x10
;Mode_FIQ        EQU     0x11
;Mode_IRQ        EQU     0x12
;Mode_SVC        EQU     0x13
;Mode_ABT        EQU     0x17
;Mode_UND        EQU     0x1B
         ;MOV     R0, #Mode_USR:OR:I_Bit:OR:F_Bit ; No interrupts
         ;MSR     CPSR_c, R0
               
         ;mov r0,r8
         ;mov r1,r9
         ;mov r2,r10
         ;mov r3,r11
         ;mov r4,r12
         ;mov r5,r13
         ;mov r6,r14
                                  
         ;MOV     R0,#Mode_SVC:OR:I_Bit:OR:F_Bit ; No interrupts
         ;MSR     CPSR_c, R0    
              
         ;    stmfd sp!,{r0-r6}
                        
         MOV     R0, #Mode_FIQ:OR:I_Bit:OR:F_Bit ; No interrupts
         MSR     CPSR_c, R0                     
             
         mov r0,r8
         mov r1,r9
         mov r2,r10
         mov r3,r11
         mov r4,r12
         mov r5,r13
         mov r6,r14
         mrs r7,spsr 
             
         MOV     R0,#Mode_SVC:OR:I_Bit:OR:F_Bit ; No interrupts
         MSR     CPSR_c, R0    
              
             stmfd sp!,{r0-r7}  
             
         MOV     R0, #Mode_ABT:OR:I_Bit:OR:F_Bit ; No interrupts
         MSR     CPSR_c, R0                     
             
         mov r1,r13
         mov r2,r14
         mrs r3,spsr 
             
         MOV     R0, #Mode_IRQ:OR:I_Bit:OR:F_Bit ; No interrupts
         MSR     CPSR_c, R0                     
             
         mov r4,r13
         mov r5,r14
         mrs r6,spsr    
             
         MOV     R0, #Mode_UND:OR:I_Bit:OR:F_Bit ; No interrupts
         MSR     CPSR_c, R0                     
             
         mov r7,r13
         mov r8,r14
         mrs r9,spsr     
             
         MOV     R0,#Mode_SVC:OR:I_Bit:OR:F_Bit ; No interrupts
         MSR     CPSR_c, R0    
              
             stmfd sp!,{r1-r9}    
             
             
             mov r0,sp
             ldr r1,=debug_SP_End
             str r0,[r1]
        
             LDR R5,=0x00000053;"S"software stop
             BL sendbyte
        
SoftWareINT_UART0_debugloop
         
;all register push into stack
;save SP in :debug_SP

             
             BL  getbyte          


             CMP R5,#0x46;"F" File  
             bleq  COM_download
             CMP R5,#0x44;"D" Display
             bleq  COM_Display
             CMP R5,#0x43;"C" Change
             bleq  COM_Change
             CMP R5,#0x45;"E" Erase Flash
             bleq  COM_EraseFlash
             CMP R5,#0x47;"G" Target Go 
             bleq  COM_TargetGo             
             
             CMP R5,#0x4E;"N" Go to Next  ,out SWI         
             BEQ SoftWareINT_EDN

             B  SoftWareINT_UART0_debugloop
 
 
SoftWareINT_EDN             
             ldmfd sp!,{r1-r9}              
             ldmfd sp!,{r0-r7} 
             ;ldmfd sp!,{r0-r6}

;in SVC_Stack
         MOV     R0, #Mode_SVC:OR:I_Bit:OR:F_Bit ; No interrupts
         MSR     CPSR_c, R0 
      
             ldmfd sp!,{r0-r12}
             
             msr spsr,r2
             msr cpsr,r1
                                      
             ldmfd sp!,{r0-r2}
             
             ldmfd sp!,{r11,r12}
             mov pc,r11 

             




FIQ_int
; SWI has routine required in bits 8-23 and data (if any) in
; bits 0-7.
; Assumes R13_svc points to a suitable stack
                            
             stmfd sp!,{r0-r2,lr,pc}
             mov r0,sp
             mrs r1,cpsr
             mrs r2,spsr
             stmfd sp!,{r0-r12}  
                               ;current all

;Mode_USR        EQU     0x10
;Mode_FIQ        EQU     0x11
;Mode_IRQ        EQU     0x12
;Mode_SVC        EQU     0x13
;Mode_ABT        EQU     0x17
;Mode_UND        EQU     0x1B
         ;MOV     R0, #Mode_USR:OR:I_Bit:OR:F_Bit ; No interrupts
         ;MSR     CPSR_c, R0
               
         ;mov r0,r8
         ;mov r1,r9
         ;mov r2,r10
         ;mov r3,r11
         ;mov r4,r12
         ;mov r5,r13
         ;mov r6,r14
                                  
         ;MOV     R0,#Mode_SVC:OR:I_Bit:OR:F_Bit ; No interrupts
         ;MSR     CPSR_c, R0    
              
         ;    stmfd sp!,{r0-r6}
                        
         MOV     R0, #Mode_FIQ:OR:I_Bit:OR:F_Bit ; No interrupts
         MSR     CPSR_c, R0                     
             
         mov r0,r8
         mov r1,r9
         mov r2,r10
         mov r3,r11
         mov r4,r12
         mov r5,r13
         mov r6,r14
         mrs r7,spsr 
             
         MOV     R0,#Mode_SVC:OR:I_Bit:OR:F_Bit ; No interrupts
         MSR     CPSR_c, R0    
              
             stmfd sp!,{r0-r7}  
             
         MOV     R0, #Mode_ABT:OR:I_Bit:OR:F_Bit ; No interrupts
         MSR     CPSR_c, R0                     
             
         mov r1,r13
         mov r2,r14
         mrs r3,spsr 
             
         MOV     R0, #Mode_IRQ:OR:I_Bit:OR:F_Bit ; No interrupts
         MSR     CPSR_c, R0                     
             
         mov r4,r13
         mov r5,r14
         mrs r6,spsr    
             
         MOV     R0, #Mode_UND:OR:I_Bit:OR:F_Bit ; No interrupts
         MSR     CPSR_c, R0                     
             
         mov r7,r13
         mov r8,r14
         mrs r9,spsr     
             
         MOV     R0,#Mode_SVC:OR:I_Bit:OR:F_Bit ; No interrupts
         MSR     CPSR_c, R0    
              
             stmfd sp!,{r1-r9}    
             
             
             mov r0,sp
             ldr r1,=debug_SP_End
             str r0,[r1]
        
             LDR R5,=0x00000046;"F"FIQ stop
             BL sendbyte
        
        
        
FIQ_int_UART0_debugloop
         
;all register push into stack
;save SP in :debug_SP

             
             BL  getbyte          


             CMP R5,#0x46;"F" File  
             bleq  COM_download
             CMP R5,#0x44;"D" Display
             bleq  COM_Display
             CMP R5,#0x43;"C" Change
             bleq  COM_Change
             CMP R5,#0x45;"E" Erase Flash
             bleq  COM_EraseFlash
             CMP R5,#0x52;"G" Target Go 
             bleq  COM_TargetGo             
             
             CMP R5,#0x4E;"N" Go to Next  ,out SWI         
             BEQ FIQ_int_EDN

             B  FIQ_int_UART0_debugloop
 
FIQ_int_EDN             
             ldmfd sp!,{r1-r9}              
             ldmfd sp!,{r0-r7} 
             ;ldmfd sp!,{r0-r6}
;in FIQ_Stack
         MOV     R0, #Mode_FIQ:OR:I_Bit:OR:F_Bit ; No interrupts
         MSR     CPSR_c, R0 
      
             ldmfd sp!,{r0-r12}
             
             msr spsr,r2
             msr cpsr,r1
             
                         
             ldmfd sp!,{r0-r2,lr}
             ldmfd sp!,{r3}
             sub pc, lr, #4

my_wel_str  
       DCB  'W','e','l','c';"Welcome!-Happy Long"
       DCB  'o','m','e','!'
       DCB  '-','H','a','p'
       DCB  'p','y',' ','L'
       DCB  'o','n','g',' '
    
       DCD  0x00000000;C7D6 NO

hex_to_char_tab
       DCB  "0","1","2","3"
       DCB  "4","5","6","7"
       DCB  "8","9","A","B"
       DCB  "C","D","E","F"
           
           
 END



⌨️ 快捷键说明

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