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

📄 flash.sa

📁 网络中交换节点的上数据的交换和下行数据分发的硬件实现
💻 SA
📖 第 1 页 / 共 2 页
字号:
               ldw    *ar8++,br4
               ldw    *ar8++,br5
               ldw    *ar8++,br6
               
               stw    br17,*ar7                   ;0xA0->0x01460000
               stw    br3,*ar7++                  ;写数据
               
label5:        stw    br17,*ar7
			   ldw    *-ar7[1],br20               ;验证数据
               cmpeq  br20,br3,br21
    [!br21]    b      label5                      
              ; stw    br17,*ar7
               stw    br4,*ar7++
               
label6:        ldw    *-ar7[1],br20
               cmpeq  br20,br4,br21
    [!br21]    b      label6                
               
               stw    br17,*ar7
               stw    br5,*ar7++
               
label7:        ldw    *-ar7[1],br20
               cmpeq  br20,br5,br21
    [!br21]    b      label7                      
               
               stw    br17,*ar7
               stw    br6,*ar7++
               
label8:        ldw    *-ar7[1],br20
               cmpeq  br20,br6,br21
    [!br21]    b      label8                      
               
               sub    br15,1,br15                  ;写flash
    [br15]     b      label4
               
               stw    br18,*ar7
               stw    br19,*ar7                    ;Reset,退出Bypass状态
               
               zero   br7
               
               stw    br7,*ar0
               mv     br7,status
               
exit0:          nop
              .return  status
              
              .endproc 
              
;本函数用于向flash中写入密码卡ID号(由密码卡制造商提供)


              .global  _cardserial_write
              
_cardserial_write:        .cproc

              .reg status,error1,op_addr,exchange
              .reg ar0,ar1,ar2,ar3,ar4,ar5,ar6,ar7
              .reg br0,br1,br2,br3,br4,br5,br6,br7,br8,br9,br10,br11,br12,br13,br14,br15,br16
              
              zero ar6
               
              mvk   0x0a,error1       		  ;错误代码
               
              mvkl   0x8000BFFC,op_addr
              mvkh   0x8000BFFC,op_addr      ;操作员权限地址               
              
              mvkl   0x80008800,exchange
              mvkh   0x80008800,exchange     ;状态码地址 
              
              ldw    *op_addr,ar7            ;确定当前是否有操作员
          	  cmpeq  ar6,ar7,ar6	
   	[ar6]     stw    error1,*exchange        ;当前没有操作员权限,退出
   	[ar6]     mv     error1,status
  	[ar6]     b      exit1
              
              
              
              
              
               mvkl   0x80008800,ar0
               mvkh   0x80008800,ar0          ;状态码地址
               
               mvkl   0x80008804,ar1
               mvkh   0x80008804,ar1          ;ID号存储地址
             
               mvkl   0x01420010,ar2
               mvkh   0x01420010,ar2          ;程序版本号在flash中的存储地址
               
               mvkl   0x1401554,ar3
               mvkh   0x1401554,ar3           ;擦除flash需要的地址
               
               mvkl   0x1400aa8,ar4
               mvkh   0x1400aa8,ar4           ;擦除flash需要的地址
               
               mvkl   0x01420000,ar5
               mvkh   0x01420000,ar5          ;要擦除的flash扇区地址
               
               zero   br0                     ;作为状态码使用
               
               mvkl   0xaa00aa,br2
               mvkh   0xaa00aa,br2            ;擦除flash需要的参数
               
               mvkl   0x550055,br3
               mvkh   0x550055,br3            ;擦除flash需要的参数
               
               mvkl   0x800080,br4
               mvkh   0x800080,br4            ;擦除flash需要的参数
               
               mvkl   0x300030,br5
               mvkh   0x300030,br5            ;擦除flash需要的参数
               
               mvkl   0xffffffff,br6
               mvkh   0xffffffff,br6          ;擦除flash需要的参数
               
               mvkl   0x200020,br9
               mvkh   0x200020,br9            ;Bypass写需要的参数
               
               mvkl   0xA000A0,br10
               mvkh   0xA000A0,br10           ;Bypass写需要的参数
               
               mvkl   0x900090,br11
               mvkh   0x900090,br11           ;Bypass reset需要的参数
               
               ldw    *ar2,br1                ;将程序版本号备份出来
               
               stw    br2,*ar3
               stw    br3,*ar4
               stw    br4,*ar3
               stw    br2,*ar3
               stw    br3,*ar4
               stw    br5,*ar5
               
label9:        ldw    *ar5,br7 
               cmpeq  br7,br6,br8
    [!br8]     b      label9                   ;擦除0x01420000扇区
    
               stw    br2,*ar3
               stw    br3,*ar4
               stw    br9,*ar3                 ;设置flash进入Unlock Bypass状态
               
               ldw    *ar1++,br12
               ldw    *ar1++,br13
               ldw    *ar1++,br14
               
               stw    br10,*ar5
               stw    br12,*ar5++
               
label10:       ldw    *-ar5[1],br15
               cmpeq  br15,br12,br16
    [!br16]    b      label10 
    
               stw    br10,*ar5
               stw    br13,*ar5++
               
label11:       ldw    *-ar5[1],br15
               cmpeq  br15,br13,br16
    [!br16]    b      label11
    
               stw    br10,*ar5
               stw    br14,*ar5++
               
label12:       ldw    *-ar5[1],br15
               cmpeq  br15,br14,br16
    [!br16]    b      label12                  ;向flash中写入密码卡ID                                                                    
    
               stw    br10,*ar5
               stw    br1,*ar2
               
label13:       ldw    *ar2,br15
               cmpeq  br15,br1,br16
    [!br16]    b      label13                   ;重新向flash写入程序版本号    
    
               stw    br11,*ar5
               stw    br0,*ar5                  ;Reset,退出Bypass状态
               
               stw    br0,*ar0
               mv     br0,status
exit1:               
              .return  status
              
              .endproc
              
                         
;本函数用于读取密码卡的ID号  

              .global   _cardserial_read
              
_cardserial_read:        .cproc 

              .reg status
              .reg ar0,ar1,ar2
              .reg br0,br1,br2,br3,br4,br5,br6,br7,br8,br9,br10
              
               mvkl   0x80008800,ar0
               mvkh   0x80008800,ar0            ;状态码地址
               
               mvkl   0x80008804,ar1
               mvkh   0x80008804,ar1            ;密码卡ID存放地址
               
               mvkl   0x01420000,ar2
               mvkh   0x01420000,ar2            ;密码卡ID在flash中的存放地址
               
               zero   br0                       ;作为操作成功状态码
               
               mvkl   0x57,br1
               mvkh   0x57,br1                  ;作为没有装入密码卡ID的状态码
               
               mvkl   0xFFFFFFFF,br5
               mvkh   0xFFFFFFFF,br5        
               
               ldw    *ar2++,br2
               ldw    *ar2++,br3
               ldw    *ar2++,br4                 
                                            
               cmpeq  br2,br5,br6
               cmpeq  br3,br5,br7
               cmpeq  br4,br5,br8
               
               and    br6,br7,br9
               and    br8,br9,br10
    
    [br10]     stw    br1,*ar0
    [br10]     mv     br1,status                 ;若没有装入过密码卡ID,则停止执行,返回相关状态码
    [br10]     b      label14
    
               stw    br2,*ar1++
               stw    br3,*ar1++
               stw    br4,*ar1++                 ;上传密码卡ID
    
               stw    br0,*ar0
               mv     br0,status
                   
label14:       
              .return  status
              
              .endproc
              
              
;本程序用于读取程序版本号

              .global  _softrev_read
              
_softrev_read:       .cproc  

              .reg status
              .reg ar0,ar1,ar2
              .reg br0,br1
              
               mvkl   0x80008800,ar0
               mvkh   0x80008800,ar0             ;状态码存储地址
               
               mvkl   0x80008804,ar1
               mvkh   0x80008804,ar1             ;程序版本号存储地址
               
               mvkl   0x01420010,ar2
               mvkh   0x01420010,ar2             ;程序版本号在flash中的存储地址
               
               zero   br0
               
               ldw    *ar2,br1                   ;从flash中读出程序版本号
               
               stw    br1,*ar1                    ;上传程序版本号
               
               stw    br0,*ar0                   ;设置状态码
               mv     br0,status
               
              .return  status
              
              .endproc                             
                             
                                                                                                                                                                                                                                          
                                                                                      
                                                                                                        
                                                                                                                          
                                                                                                                                            
                                                                                                                                                              
                                                                                                                                                                                
                                                                                                                                                                                                  
                                                                                                                                                                                                                    
                                                                                                                                                                                                                                      
                                                                                                                                                                                                                                                                          

⌨️ 快捷键说明

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