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

📄 des3428.asm.bak

📁 Led控制,这是一个不错的东东,希望对这方面的朋友有帮助
💻 BAK
字号:
;create by bighandfor des3428, 4/27/2007                                                                         
;LED program for DES3428                                                   
;                                                                          
;LED sequence:                                                             
;  
;LED for FE ports                                                                                                                                  
;Bit NO.	 0						    1	              2	                  3	         
;Function	 p1/10	    		p1/100	  			p2/10	      				p2/100
;Bit NO.	 4						    5	              6	                  7 	       
;Function	 p3/10		    	p3/100	  			p4/10	      				p4/100
;						.
;						.
;						.
;Bit NO.	 44						    45	              46	                47	       
;Function	 p23/10	  			p23/100	  			p24/10							p24/100

;LED for SIO port                                                               
;Bit NO.	 48						    49	            50	                51	       
;Function	 SIO_p1/100/10	SIO_p1/1000	  	SIO_p2/100/10				SIO_p2/1000

;LED for combo port                                                                
;Bit NO.	 52						    53	            54	                55	       
;Function	 COM_p1/100/10	COM_p1/1000  		COM_p2/100/10				COM_p2/1000

;LED for 7-seg led                                                                       
;Bit NO.	 56						    57	            58	              	59	       
;Function	 1A/1B/7_SEG	  2A/7_SEG_LED		2B/7_SEG_LED	    	2C/7_SEG_LED
;Bit NO.	 60						    61	            62	                63
;Function	 2D/7_SEG_LE	  2E/7_SEG_LED	  2F/7_SEG_LED	      2G/7_SEG_LE


; Symbolic names for the bits of the port status fields                
;                                                                      
RX                 equ     0x0     ; received packet                   
TX                 equ     0x1     ; transmitted packet                
COLL               equ     0x2     ; collision indicator               
SPEED_C            equ     0x3     ; 100 Mbps                          
SPEED_M            equ     0x4     ; 1000 Mbps                         
DUPLEX             equ     0x5     ; half/full duplex                  
FLOW               equ     0x6     ; flow control capable              
LINKUP             equ     0x7     ; link down/up status               
LINKEN             equ     0x8     ; link disabled/enabled status      
ZERO               equ     0xE     ; always 0                          
ONE                equ     0xF     ; always 1  


LED_FE_END         equ     24  ;24
LED_SFP_END	       equ     26  ;24 + 2
LED_XE_END         equ     28  ;24 + 2 + 2
LED_MG_END      	 equ     36  ;24 + 2 + 2 + 8 
LED_TOTAL_NUM      equ     36 
LED_TOTAL_BITS     equ     64 

;
LED_TIMER          equ     0xC0 ;led timer
counter            equ     0xC1 ;led counter
phyport            equ     0xC2 ;physical port number

;per port's link status
;Host update LED_LINK according link state
;bit0-bit3: timer
;bit4: 0=linkdown, 1=linkup
;bit5:medium, 1=fiber, 0=copper
;bit6:100M/1000M, 1=1000M on GE port,or 100M on FE port, 0=100M/10M on GE port,or 10M on FE port 
;bit7: 7 segment led

;one byte per port, total 58 bytes
LED_LINK           equ    0xC4  ; total 28

begin:
    ;initialize
    ld      A, 0
    ld      (counter), A

ledloop:
    ;Assign the first port
    ld      B, 0
    ld  		A, (counter)
    call    getportmap
    ld      A, (phyport)
    port    A

    add     A, LED_LINK	  ; A = LED_LINK[phyport]
    call    led_link_status
    inc     (counter)
    ld      A, (counter)
    cmp     A, LED_TOTAL_NUM
    jnz     ledloop
sendto:
    send LED_TOTAL_BITS   

;assume the addrss of link status for phyport has been loaded into A, 
led_link_status:
    ld      B,(counter)
fe_port:
    cmp     B, LED_FE_END
    jnc     xe_port
		jmp     check_link
sfp_port:
		cmp     B, LED_SFP_END
		jnc     sfp_port
		jmp     check_link	
xe_port:
		cmp     B, LED_XE_END
		jnc     seven_seg
		jmp     check_link
					    
seven_seg:
    cmp     B, LED_MG_END  ; if (counter >= LED_SEG_END) jmp sfp_port
    jnc     mg_end 
    tst     (A), 7     
    jc      LED_ON_ONEBIT
    jmp     LED_OFF_ONEBIT

check_link:
    tst    (A), 4
    jnc    LINK_DOWN
traffic:
    pushst  RX
    pushst  TX
    tor
    pop     
    jc      LINK_BLINK 
    ld      B,(A)
    and     B, 0xF0
    ld	    (A), B    ;reset led timer
LINK_UP:
    tst     (A), 6
    jc      LED_ON_GREEN   
    jmp     LED_ON_AMBER

;(A): link status; B: counter
LINK_BLINK:
    inc    (A)
    ld      B,(A)
    and     B, 0x0F
    cmp     B,2
    jc      LINK_DOWN
    cmp     B,3
    jc      LINK_UP
    ld      B, (A)
    and     B, 0xF0
    ld      (A),B
    jmp     LINK_BLINK   

LINK_DOWN:
    pushst    ONE
    pack
LED_OFF_ONEBIT:
    pushst    ONE
    pack
    ret 

LED_ON_ONEBIT:
    pushst    ZERO
    pack
    ret
    
LED_ON_AMBER:
    pushst    ZERO
    pack
    pushst    ONE
    pack
    ret
    
LED_ON_GREEN:
    pushst    ONE
    pack
    pushst    ZERO
    pack
    ret
    
;get portmap, assume counter has been loaded into A
getportmap:
   cmp A, LED_FE_END ; if (counter >= LED_SEG_END) jump sfp_portmap
   jnc  sfp_portmap
   ld B,6
   add A,B
   ld (phyport), A
 	 ret
sfp_portmap:
   cmp A, LED_SFP_END ; if (counter >= LEDSFP_END) jump xe_portmap
   jnc xe_portmap
   ld B, 20
   sub A, B
   ld (phyport), A
   ret
xe_portmap:
   cmp A,LED_XE_END
   jnc mg_portmap
   ld B, 25
   sub A, B
   ld (phyport), A
   ret
mg_portmap:
   cmp A, LED_MG_END
   jnc mg_end
	 ld B, 27
	 sub A, B
	 ld (phyport), A
mg_end:
   ret
   

⌨️ 快捷键说明

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