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

📄 pm5337_eos_eapo.tcl

📁 用于EOS芯片的驱动程序, 供参考 参考
💻 TCL
📖 第 1 页 / 共 4 页
字号:
  set addr_0xE808 [dec2hex [expr 0xE808 + ($dir * 0x200)]]
  set addr_0xE809 [dec2hex [expr 0xE809 + ($dir * 0x200)]]
  set addr_0xE80A [dec2hex [expr 0xE80A + ($dir * 0x200)]]
  set addr_0xE80B [dec2hex [expr 0xE80B + ($dir * 0x200)]]
  
  set addr_0xE869 [dec2hex [expr 0xE869 + ($dir * 0x200)]]
  set addr_0xE86A [dec2hex [expr 0xE86A + ($dir * 0x200)]]
  set addr_0xE86B [dec2hex [expr 0xE86B + ($dir * 0x200)]]
  set addr_0xE86C [dec2hex [expr 0xE86C + ($dir * 0x200)]]
  set addr_0xE86D [dec2hex [expr 0xE86D + ($dir * 0x200)]] 
                  
  ### Configure header filters start position and mask ###
  
  # a) Write value to indirect data register
    
  # Set dst2 + hfindex2 + src2 + value2[47:39] to IND_DATA3 (Bit 127 to 96)
  set word [expr ($dst2<< 15)|(0x1<<13)|($hfindex2<<12)|($src2<<9)|[imask $value2 47 39]]
  admwr $devID $addr_0xE869 $word
  
  # Set value2[38:7] to IND_DATA2(Bit 95 to 64)  
  admwr $devID $addr_0xE86A [imask $value2 38 7]  
  
  # Set value2[6:0] + dst1 + hfindex1 + src1 + value1[47:32] to IND_DATA1 (Bit 63 to 32)
  set word [expr ([imask $value2 6 0] << 25)|($dst1<<22)|(0x1<<20)|($hfindex1<<19)|($src1<<16)|[imask $value1 47 32]]
  admwr $devID $addr_0xE86B $word
     
  # Set value1[31:0] to IND_DATA0 (Bit 31 to 0)   
  admwr $devID $addr_0xE86C [imask $value1 31 0] 				
  
  # b) Write value to indirect address register
  set BUSY_ING 1
  set BUSY_EGR 0
  set RWB 0
  set IND_ADDR [expr 0x0A0 + 0x1 * ($index_n - 1) ]
  set iaddr [expr ($BUSY_ING << 31)|($BUSY_EGR << 30)|($RWB << 29)|$IND_ADDR]
  set iaddr [dec2hex $iaddr]
  admwr $devID $addr_0xE86D $iaddr
  
  #c) Poll BUSY bit until low
  Poll_BUSY_Bit $devID $addr_0xE86D 31                  
}

#------------------------------------------------------------------------------
# SCRIPT NAME:	EOS_Aggregation_Demo
#
# DESCRIPTION:	The procedure provides an example on how to configure the
#               aggregation feature in the EAPO-E.    
#		
# PARAMETERS:   devID - This parameter is used to specify the device 
#                       under configuration
#
#               dir - 0 (Drop direction), 
#                     1 (Add direction)
#
#               incoming - 0 to 7
#
#               outgoing - 0 to 7
#
# NOTE:    
#
#------------------------------------------------------------------------------

proc EOS_Aggregation_Demo {devID dir incoming outgoing} {

  set addr1 [dec2hex [expr 0xE85B + (0x200*$dir)]]
  set addr2 [dec2hex [expr 0xE85C + (0x200*$dir)]]
  
  if {$incoming == 0} {  
    set init_value [rd adm $addr1]
    set value [expr ($init_value & 0x7FFFFFF8) | $outgoing ]
    set value [dec2hex $value]
    admwr $devID $addr1 $value
  }
  if {$incoming == 1} {  
    set init_value [rd adm $addr1]
    set value [expr ($init_value & 0x7FFFFF1F) | ($outgoing << 5)]
    set value [dec2hex $value]
    admwr $devID $addr1 $value            
  }
  if {$incoming == 2} {  
    set init_value [rd adm $addr1]
    set value [expr ($init_value & 0x7FFFE3FF) | ($outgoing << 10) ]
    set value [dec2hex $value]
    admwr $devID $addr1 $value            
  }
  if {$incoming == 3} {  
    set init_value [rd adm $addr1]
    set value [expr ($init_value & 0x7FFA7FFF) | ($outgoing << 15)]
    set value [dec2hex $value]
    admwr $devID $addr1 $value            
  }
  if {$incoming == 4} {  
    set init_value [rd adm $addr1]
    set value [expr ($init_value & 0x7F8FFFFF) | ($outgoing << 20)]
    set value [dec2hex $value]
    admwr $devID $addr1 $value            
  }
  if {$incoming == 5} {  
    set init_value [rd adm $addr1]
    set value [expr ($init_value & 0x71FFFFFF) | ($outgoing << 25)]
    set value [dec2hex $value]
    admwr $devID $addr1 $value            
  }
  if {$incoming == 6} {  
    set init_value [rd adm $addr2]
    set value [expr ($init_value & 0x7FFFFFF8) | $outgoing ]
    set value [dec2hex $value]
    admwr $devID $addr2 $value            
  }
  if {$incoming == 7} {  
    set init_value [rd adm $addr2]
    set value [expr ($init_value & 0x7FFFFF1F) | ($outgoing << 5)]
    set value [dec2hex $value]
    admwr $devID $addr2 $value            
  }    
}


#------------------------------------------------------------------------------
# SCRIPT NAME:	EAPO_Counter
#
# DESCRIPTION:	The procedure provides an example on how use the programmable
#               counter in the EAPO block.
#		
# PARAMETERS:   devID - This parameter is used to specify the device 
#                       under configuration
#
# NOTE:    
#
#------------------------------------------------------------------------------

proc EAPO_Counter {devID} {
  
  ######################
  # EAPO counter
  
  # Configure programmable counter 1
  admwr $devID 0xEA62 0x60
  
  # initialize transfer
  admwr $devID 0xea68 0x0
  
  # Read counter value
  set n 1 ;# counter 1
  set indreg [expr 0x190 + 0x1*($n-1)]
  set indreg [dec2hex $indreg]
  set busy_ing 1
  set busy_eg 0
  set rwb 1
  
  set addrvalue [expr ($busy_ing << 31)|($busy_eg << 30)|($rwb << 29)|$indreg]
  set addrvalue [dec2hex $addrvalue]
  admwr $devID 0xEA6D $addrvalue
  
  puts "IND_DATA0 = [admrd $devID 0xEA6C]"
  puts "IND_DATA1 = [admrd $devID 0xEA6B]"
  puts "IND_DATA2 = [admrd $devID 0xEA6A]"
  puts "IND_DATA3 = [admrd $devID 0xEA69]"
  
}


#------------------------------------------------------------------------------        
# SCRIPT NAME:	imask              
#                                                                                      
# DESCRIPTION:	This procedure filter a 64-bit value to a 32-bit value using a
#               programmable 32-bit windows.
#		                                                                       
# PARAMETERS:   input - 0x0000000000000000 to 0xFFFFFFFFFFFFFFFF
#
#               msbpos - Window upper bound: 0 to 63
#
#               lsbpos - Window lower bound: 0 to 63
#                                                                                      
# NOTES:  The size of the window must be 32-bit.  
#                                                                                       
#------------------------------------------------------------------------------    

proc imask {input msbpos lsbpos} {
  
  # Check mask size within 32 bit
  set masksize [expr $msbpos - $lsbpos]
  
  if {$masksize > 31 || $masksize < 0} {
    puts "Error invalid mask size"
  }
  
  # Count the number of hex character
  set hex_char 1
    
  for {set i 2} {$i <= 17} {incr i} {        
    set input_i [string index $input $i]    
    if {$input_i != ""} {
      incr hex_char      
    }    
  }         
  
  # Convert 64 bits input to the mask size    
  if {$hex_char <= 9} {
    set msb 0x0
    set lsb $input             
  }
  
  if {$hex_char == 10} {
      
    # Assign input HEX value to a separate variable    
    set i2 [string index $input 2] 
    set i3 [string index $input 3]
    set i4 [string index $input 4] 
    set i5 [string index $input 5 ]
    set i6 [string index $input 6 ] 
    set i7 [string index $input 7 ]
    set i8 [string index $input 8 ] 
    set i9 [string index $input 9 ]
    set i10 [string index $input 10]   
      
    set lsb "0x$i3$i4$i5$i6$i7$i8$i9$i10"
    set msb "0x$i2"
  }  
  
  if {$hex_char == 11} {
      
    # Assign input HEX value to a separate variable    
    set i2 [string index $input 2] 
    set i3 [string index $input 3]
    set i4 [string index $input 4] 
    set i5 [string index $input 5 ]
    set i6 [string index $input 6 ] 
    set i7 [string index $input 7 ]
    set i8 [string index $input 8 ] 
    set i9 [string index $input 9 ]
    set i10 [string index $input 10]   
    set i11 [string index $input 11]   
      
    set lsb "0x$i4$i5$i6$i7$i8$i9$i10$i11"
    set msb "0x$i2$i3"
  }  
  
  if {$hex_char == 12} {
      
    # Assign input HEX value to a separate variable    
    set i2 [string index $input 2]
    set i3 [string index $input 3]
    set i4 [string index $input 4]
    set i5 [string index $input 5]
    set i6 [string index $input 6]
    set i7 [string index $input 7]
    set i8 [string index $input 8]
    set i9 [string index $input 9]
    set i10 [string index $input 10]   
    set i11 [string index $input 11]   
    set i12 [string index $input 12]   
      
    set lsb "0x$i5$i6$i7$i8$i9$i10$i11$i12"
    set msb "0x$i2$i3$i4"
  }  
  
  if {$hex_char == 13} {
      
    # Assign input HEX value to a separate variable    
    set i2 [string index $input 2] 
    set i3 [string index $input 3]
    set i4 [string index $input 4] 
    set i5 [string index $input 5 ]
    set i6 [string index $input 6 ] 
    set i7 [string index $input 7 ]
    set i8 [string index $input 8 ] 
    set i9 [string index $input 9 ]
    set i10 [string index $input 10] 
    set i11 [string index $input 11]   
    set i12 [string index $input 12]  
    set i13 [string index $input 13]  
      
    set lsb "0x$i6$i7$i8$i9$i10$i11$i12$i13"
    set msb "0x$i2$i3$i4$i5"
  }  
  
  if {$hex_char == 14} {
      
    # Assign input HEX value to a separate variable    
    set i2 [string index $input 2] 
    set i3 [string index $input 3]
    set i4 [string index $input 4] 
    set i5 [string index $input 5 ]
    set i6 [string index $input 6 ] 
    set i7 [string index $input 7 ]
    set i8 [string index $input 8 ] 
    set i9 [string index $input 9 ]
    set i10 [string index $input 10]   
    set i11 [string index $input 11]   
    set i12 [string index $input 12]  
    set i13 [string index $input 13] 
    set i14 [string index $input 14]
     
    set lsb "0x$i7$i8$i9$i10$i11$i12$i13$i14"
    set msb "0x$i2$i3$i4$i5$i6"
  }  
  
  if {$hex_char == 15} {
      
    # Assign input HEX value to a separate variable    
    set i2 [string index $input 2] 
    set i3 [string index $input 3]
    set i4 [string index $input 4] 
    set i5 [string index $input 5 ]
    set i6 [string index $input 6 ] 
    set i7 [string index $input 7 ]
    set i8 [string index $input 8 ] 
    set i9 [string index $input 9 ]
    set i10 [string index $input 10]
    set i11 [string index $input 11]   
    set i12 [string index $input 12]  
    set i13 [string index $input 13] 
    set i14 [string index $input 14] 
    set i15 [string index $input 15]
      
    set lsb "0x$i8$i9$i10$i11$i12$i13$i14$i15"
    set msb "0x$i2$i3$i4$i5$i6$i7"
  }  
  
  if {$hex_char == 16} {
      
    # Assign input HEX value to a separate variable    
    set i2 [string index $input 2] 
    set i3 [string index $input 3]
    set i4 [string index $input 4] 
    set i5 [string index $input 5 ]
    set i6 [string index $input 6 ] 
    set i7 [string index $input 7 ]
    set i8 [string index $input 8 ] 
    set i9 [string index $input 9 ]
    set i10 [string index $input 10] 
    set i11 [string index $input 11]   
    set i12 [string index $input 12]  
    set i13 [string index $input 13] 
    set i14 [string index $input 14] 
    set i15 [string index $input 15]  
    set i16 [string index $input 16]  
      
    set lsb "0x$i9$i10$i11$i12$i13$i14$i15$i16"
    set msb "0x$i2$i3$i4$i5$i6$i7$i8"
  }  
  
  if {$hex_char == 17} {
      
    # Assign input HEX value to a separate variable    
    set i2 [string index $input 2] 
    set i3 [string index $input 3]

⌨️ 快捷键说明

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