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

📄 复件initbdi_key.s

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

             ldr r1,=FLASHROM_addr
             ldrb r0,=0xaa
             strb r0,[r1,#0x555]

             ldrb r0,=0x55
             strb r0,[r1,#0x2aa]             
             
             ldrb r0,=0x80
             strb r0,[r1,#0x555]

             ldrb r0,=0xaa
             strb r0,[r1,#0x555]
                                      
             ldrb r0,=0x55
             strb r0,[r1,#0x2aa] 
                                                  
             cmp r0,#0xFFFFFFFF
             beq Chiperase_Am29f040B

             ldrb r0,=0x30
             strb r0,[r1,r2]  
                          
             bl delay1s  
               
COM_EraseFlash_END                                          
          
             LDR R5,=0x00000041;"A"
             BL sendbyte
             
              LDMFD sp!,{R0-R5,PC};Return


Chiperase_Am29f040B

             ldrb r0,=0x80
             strb r0,[r1,#0x555]
             bl delay8s    
             B COM_EraseFlash_END   



BUF2ROM       STMFD   sp!,{R1,r2,r5,r6,lr}  
;receive buffer to rom              
              LDR R1,=receive_bufffer
              mov r2,r1
              add r2,r2,#0x80;128-byte per sector,end of sector

              
              ;SUB R1,R1,#1              
              LDR R5,=addr_download
              LDR R6,[R5];start addr in r6
              
              ;SUB R6,R6,#1;addr  of  download_cur            

BUFWRI_LOOP   
              LDRB R5,[R1]
              bl wri_byte_Am29F040B
;R5,low 8-bit Value
;r6,addr of program  
       
              bne wri_byte_fail           
              add r1,r1,#1
              add r6,r6,#1  
                         
              CMP R1,R2;RECEIVE_BUFFFER END
              BNE BUFWRI_LOOP

              LDR R5,=addr_download
              STR R6,[R5]

;SECTOR WRITE OK,CAN WAIT 10MS OR NOT

wri_byte_fail 
;=addr_download <> endaddr
              LDMFD sp!,{R1,r2,r5,r6,PC};Return



;GETCHAR      STMFD   sp!,{R0-R2,R5,lr}

             BL  getbyte

             SUB  R5,R5,#0x20 
             MOV  R5,R5,LSL #16           
         
             LDR R1,=0x0000C000;写RAM且地址+1
             ADD R2,R2,R1
     
             LDR R0,=LCDparam 
             STR R2,[R0];param
            ;BL PR11;

;             BL on_p7

             LDMFD sp!,{R0-R2,R5,PC};Return

;WRIstring  
;正常显示字符串,以0x00结尾
;入口:r6=字符串首地址!

;GETSTRING    STMFD   sp!,{R0-R2,R5-R6,lr}

             LDR R5,=0x00000003;HI!
             BL  getstring

             LDR R1,=receive_bufffer   
             LDR R0,[R1]
             
             LDR  R2,=0xFF000000
             BIC  R0,R0,R2;
            
             STR  R0,[R1]
             MOV  R6,R1
;            BL   WRIstring
;             BL on_p7
             LDMFD sp!,{R0-R2,R5-R6,PC};Return


test_USART0 STMFD   sp!,{R0-R1,lr}
            bl init_USART0
test_USART0_loop
            ldr R5,=0x55
            bl  sendbyte
            b test_USART0_loop
            
            LDMFD sp!,{R0-R1,PC};Return


init_USART0
           STMFD   sp!,{R0-R1,lr}
           LDR R0,=USART0
           ;BL DISPLAY_R0 
           
;           LDR R1,=0x000000C0;Normal mode,1 stop bit,even parity,           
                             ;Asynchoronous mode,8-bit,MCKI,
           LDR R1,=0x000008C0;Normal mode,1 stop bit,no parity,
                             ;Asynchoronous mode,8-bit,MCKI,                             
           STR R1,[R0,#0x04];US_MR

           LDR R1,=0x0000000D;115200 BPS 
           STR R1,[R0,#0x20];US_BRGR

           LDR R1,=0x0
           STR R1,[R0,#0x24];US_RTOR Disable Receive Time-out
           LDR R1,=0x0
           STR R1,[R0,#0x28];US_TTGR Disable Transmitter time-guard
           
           LDR R1,=0x00000004;Reset Receiver
           STR R1,[R0];US_CR
           LDR R1,=0x00000008;Reset Transmitter
           STR R1,[R0];US_CR
           LDR R1,=0x00000100;Reset Status bits
           STR R1,[R0];US_CR
           LDR R1,=0x00000010;Receiver Enable
           STR R1,[R0];US_CR
           LDR R1,=0x00000040;Transmitter Enable
           STR R1,[R0];US_CR


           LDR R1,=0xFFFFFE1B;DISENABLE INTERRUPT
           STR R1,[R0,#0x0C] ;US_IDR
           LDR R1,=0x000001E4;ENABLE INTERRUPT
           STR R1,[R0,#0x08] ;US_IER 
                             ;PROSESS ERROR IN TRANSMIT & RECEIVE
     
;           BL on_p7

           LDMFD sp!,{R0-R1,PC};Return


sendbyte   STMFD   sp!,{R0-R2,lr}
;R5:low 8-bit
           LDR R0,=USART0

sendbytewait  LDR R1,[R0,#0x14];US_CSR

           LDR  R2,=0xFFFFFFFD
           BIC  R1,R1,R2;TXRDY
           CMP  R1,#2
           BNE  sendbytewait

           STR R5,[R0,#0x1C];US_THR

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


sendstring  STMFD   sp!,{R0-R2,lr}
;R5:COUNT OF TRANSMIT LOW 16-BIT
;SET R5,BEFORE CALL

          LDR R0,=USART0

sendstrwait2 LDR R1,[R0,#0x14];US_CSR
           LDR  R2,=0xFFFFFFEF
           BIC  R1,R1,R2;ENDTX
           CMP  R1,#0
           BEQ  sendstrwait2

           
            LDR R1,=send_bufffer
            STR R1,[R0,#0x38];US_TPR
                             ;ADDR OF TRANSMITTER POIONTER

            STR R5,[R0,#0x3C];US_TCR

sendstrwait4 LDR R1,[R0,#0x14];US_CSR
           LDR  R2,=0xFFFFFFEF
           BIC  R1,R1,R2;ENDTX
           CMP  R1,#0
           BEQ  sendstrwait4


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




getbyte    STMFD   sp!,{R0-R2,lr}
;R5 low 8-bit
           LDR R0,=USART0

getbytewait  LDR R1,[R0,#0x14];US_CSR

           LDR  R2,=0xFFFFFFFE
           BIC  R1,R1,R2;RXRDY
           CMP  R1,#1
           BNE  getbytewait

           LDR  R5,[R0,#0x18];US_RHR          

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



getstring
           STMFD   sp!,{R0-R2,lr}
;R5:COUNT OF RECEIVER,LOW 16-BIT
;SET R5,BEFORE CALL

            LDR R0,=USART0
          
            LDR R1,=receive_bufffer
            STR R1,[R0,#0x30];US_RPR
                             ;ADDR OF RECEIVER POIONTER

            STR R5,[R0,#0x34];US_RCR

getstrwait2 LDR R1,[R0,#0x14];US_CSR
           LDR  R2,=0xFFFFFFF7
           BIC  R1,R1,R2;ENDRX
           CMP  R1,#0
           BEQ  getstrwait2

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

;-------------------------------------------------------------------

CPL_P0P7
          STMFD sp!,{r0-r3,lr}
;PIO_ODSR           EQU     0xFFFF0038

              LDR  R1,=PIO_BASE
              LDR  R3,=P0_P7MASK
              
              LDR  r0,[r1,#0x38]
              MVN  r0,r0            

              MOV  R2,R0;backup r0
              BIC  R2,R2,R3
              STR  R2,[R1,#0x30];SET OUTPUT DATA REGISTER

              MVN  R2,R0
              BIC  R2,R2,R3
              STR  R2,[R1,#0x34];CLEAR OUTPUT DATA REGISTER

          LDMFD sp!,{r0-r3,PC};Return
          
R0_writeP0_P7
          STMFD sp!,{r1-r3,lr}

;R0 LOW 8-BIT => PIO0-PIO7
;SET R0 BEFORE CALL

              LDR  R1,=PIO_BASE
              LDR  R3,=P0_P7MASK

              MOV  R2,R0;backup r0
              BIC  R2,R2,R3
              STR  R2,[R1,#0x30];SET OUTPUT DATA REGISTER

              MVN  R2,R0
              BIC  R2,R2,R3
              STR  R2,[R1,#0x34];CLEAR OUTPUT DATA REGISTER

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




LIGHTLED      STMDB sp!,{R0-R3,lr}
              LDR     R2,=0x0;COUNT
              LDRB     R3,=0x04
              
LIGHTLED_LOOP
              bl  CPL_P0P7
              bl delay1s
              ADD     R2,R2,#1
              CMP     R2,R3                       
              BNE     LIGHTLED_LOOP        
                                   
              LDMIA sp!,{R0-R3,PC};Return

delay1s
       STMFD sp!,{r0,lr}
       ldr r0, =0x007c0e21
dly1s
       sub r0,r0,#1
       CMP R0,#0            
       bne dly1s

       LDMFD sp!,{r0,PC};Return                  	

delay8s
       STMFD sp!,{r0,lr}
       ldr r0, =0x03e07108
dly8s
       sub r0,r0,#1
       CMP R0,#0            
       bne dly8s

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


delay7us
;24M
       STMFD sp!,{r0,lr}
       ldr r0, =0x00000040
dly7us
       sub r0,r0,#1
       CMP R0,#0 
       bne dly7us

       LDMFD sp!,{r0,PC};Return
       

delay20ms
;24M
       STMFD sp!,{r0,lr}
       ldr r0, =0x000208d5
dly20ms
       sub r0,r0,#1
       CMP R0,#0 
       bne dly20ms

       LDMFD sp!,{r0,PC};Return
       
       
delay2ms
       STMFD sp!,{r0,lr}
       ldr r0, =0x00013880
dly2ms
       sub r0,r0,#1
       CMP R0,#0 
       bne dly2ms

       LDMFD sp!,{r0,PC};Return


delay1ms
       STMFD sp!,{r0,lr}
       ldr r0, =0x00000880
dly1ms
       sub r0,r0,#1
       CMP R0,#0 
       bne dly1ms

       LDMFD sp!,{r0,PC};Return
       
delay600ns
       STMFD sp!,{lr}

;>=600ns is ok
          nop
          nop
          nop
          nop

          nop
          nop
          nop
          nop

          nop
          nop
          nop
          nop

          nop
          nop
          nop
          nop

          nop
          nop
          nop
          nop
          
          nop
          nop
          nop
          nop
;new
          nop
          nop
          nop
          nop

          nop
          nop
          nop
          nop
          
          nop
          nop
          nop
          nop
       
          LDMFD sp!,{PC};Return


R0_readP0_P7
          STMFD sp!,{r2,lr}

              LDR  R2,=PIO_PDSR
              LDR  R0,[R2]
              BIC  R0,R0,#0xFFFFFF00


          LDMFD sp!,{r2,PC};Return




LCD_CommandWrite
          STMFD sp!,{r0-r1,lr}
;写指令,r7

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

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

          mov r0,r7
          bl R0_writeP0_P7

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

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

LCD_CommandRead
          STMFD sp!,{r0-r1,lr}
;读指令

;读BF到C
;读AC到r6 low 8 bit

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

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

          mov r6,r0
          
          mrs r1,CPSR
          bic r1,r1,#0x20000000
          msr CPSR,r1;clr C
          
          mov r0,r0,ROR #8;BF to C flag           
;???????????????????????????????????????
          ldrb r0,=LCD_CR
          ldr r1,=CS4_addr          
          strb r0,[R1]
          bl delay600ns

⌨️ 快捷键说明

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