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

📄 hidkb_2313.lst

📁 MAX的USB3420E芯片的技术应用文档
💻 LST
📖 第 1 页 / 共 5 页
字号:
0003be 2808      .DB tab,dash,sp,SH+F,l,e,kx,i,b,l,e,enter
0003bf 2d2b
0003c0 972c
0003c1 131c
0003c2 1608
0003c3 8c2c
0003c4 1617
0003c5 922c
0003c6 111a
0003c7 872c
0003c8 1704
0003c9 2c04
0003ca 0b96
0003cb 0808
0003cc 2817      .DB tab,dash,sp,SH+T,ky,p,e,s,sp,SH+i,t,s,sp,SH+O,w,n,sp,SH+d,a,t,a,sp,SH+s,h,e,e,t,enter
0003cd 2d2b
0003ce 982c
0003cf 0816
0003d0 9c2c
0003d1 1812
0003d2 2c15
0003d3 1b88
0003d4 160c
0003d5 0c17
0003d6 0a11
0003d7 182c
0003d8 2c93
0003d9 2ca4
0003da 1297
0003db 0f12
0003dc 2816
C:\AVR Projects\MAX3420E_EVKIT2_Code\HID_KB_2313_Descriptors_and_Data.inc(153): warning: .cseg .db misalignment - padding zero byte
C:\AVR Projects\MAX3420E_EVKIT2_Code\MAX3420E_EVKIT2_DemoCode.asm(54): 'C:\AVR Projects\MAX3420E_EVKIT2_Code\HID_KB_2313_Descriptors_and_Data.inc' included form here
0003dd 00ff      .DB tab,dash,sp,SH+u,s,e,sp,SH+ky,o,u,r,sp,SH+e,kx,i,s,t,i,n,g,sp,u,SH+p,sp,ampersand,sp,SH+t,o,o,l,s,enter,0xFF
                 
                 
                 Message_End:
                 
                 .include "MAX3420E_Macros.inc"
                 
                 .MACRO	SCK_LO	
                 		cbi	PORTB,SCK 
                 .ENDMACRO
                 
                 .MACRO	SCK_HI
                 		sbi	PORTB,SCK
                 .ENDMACRO
                 
                 .MACRO	SS_LO
                 		cbi	PORTB,SSN
                 .ENDMACRO
                 
                 .MACRO	SS_HI
                 		sbi	PORTB,SSN
                 .ENDMACRO
                 
                 .MACRO	MOSI_LO
                 		cbi	PORTB,MOSI
                 .ENDMACRO
                 
                 .MACRO	MOSI_HI
                 		sbi	PORTB,MOSI
                 .ENDMACRO
                 
                 .MACRO	WRISRAM		; WRITE IMMEDIATE to SRAM. WRISRAM addr, const
                 		ldi	r25,@1
                 		sts	@0,r25
                 .ENDMACRO
                 
                 .MACRO	TSTSRAM		; TEST a byte in SRAM, set flags. TSTSRAM addr
                 		lds	r25,@0
                 		tst	r25
                 .ENDMACRO
                 
                 .MACRO	SETFLAG			; args: @0=bit name
                 		set				; T=1
                 		bld	flags,@0	; T -> reg bit
                 .ENDMACRO
                 
                 .MACRO	CLRFLAG
                 		clt
                 		bld	flags,@0
                 .ENDMACRO
                 
                 .MACRO	SKIP_ON_FLAG	; usage SKIP_ON_FLAG flagname (in flags register)
                 	sbrs	flags,@0	; skip if this flag = 1
                 .ENDMACRO
                 
                 .MACRO	mWREG			; usage: mWREG(register,register)
                 	ldi		MAX_Reg,@0
                 	mov		MAX_Dat,@1
                 	rcall	wreg
                 .ENDMACRO
                 
                 .MACRO	WREGI			; usage: WREGI(register, immediate value)
                 	ldi		MAX_Reg,@0
                 	ldi		MAX_Dat,@1
                 	rcall	wreg
                 .ENDMACRO
                 
                 .MACRO	WREG_AS			; usage: WREG(register, data(in register))
                 	ldi		MAX_Reg,@0
                 	mov		MAX_Dat,@1
                 	rcall	wregAS
                 .ENDMACRO
                 
                 .MACRO	WREGI_AS		; usage: WREGI(register, immediate value)
                 	ldi		MAX_Reg,@0
                 	ldi		MAX_Dat,@1
                 	rcall	wregAS
                 .ENDMACRO
                 
                 .MACRO mRREG
                 	ldi		MAX_Reg,@0
                 	rcall	rreg
                 .ENDMACRO
                 
                 .MACRO RREG_AS
                 	ldi		MAX_Reg,@0
                 	rcall	rregAS
                 .ENDMACRO
                 
                 .MACRO		STALL_EP0
                 	ldi		MAX_Reg,rEPSTALLS
                 	ldi		MAX_Dat,0x23
                 	rcall	wreg
                 .ENDMACRO
                 
                 .MACRO	BRLTE			; Branch if op1 LTE op2. Usage: BRLTE op1, op2, branch label. 
                 	cp		@1,@0
                 	BRSH	@2
                 .ENDMACRO
                 
                 		
                 ;
                 ; AtTiny2313 PORT B bit assignments 
                 ;
                 .EQU	MOSI	=	5	; out
                 .EQU	MISO	=	6	; in
                 .EQU	SCK		=	7	; out
                 .EQU	INTR	=	3	; in
                 .EQU	SSN		=	4	; out
                 ;
                 .EQU	BUTTC	 	= 250	; time constant to check pushbuttons
                 .EQU	BLINKTC		= 150	; decremented every buttime
                 
                 ; Assign names to registers. R0-R15 for variables that are not loaded with immediate values.
                 
                 .DEF	configval		= R0	; Initialize to 0, set to contents of host Set_Config request
                 .DEF	dat				= R3
                 .DEF	rval			= R4
                 .DEF	desclen			= R5	; descriptor length, read from ROM
                 	
                 ; Registers that require load-immediate addressing
                 
                 .DEF	flags			= R16;	; flags b7=inhibit_send, b6=RWU_enabled, b5=Suspended, b4=ep3stall
                 .equ	Send_Flag		= 7
                 .equ	bmSend_Flag		= 0b10000000	; for eor instruction		
                 .equ	RWU_enabled		= 6
                 .equ	Suspended		= 5
                 .equ	ep3stall		= 4
                 .equ	setclrfeature	= 3
                 .equ	UNIflag			= 2		; Unicode string descriptor requested
                 .equ	butstate		= 1		; send/stop button state
                 .equ	keyupflag		= 0		; send keys-up after every keystroke
                 
                 .DEF	button_time		= R17	; Time delay for polling the pushbuttons. 0-255.
                 .DEF	MAX_Reg 		= R18	; Used by rreg and wreg
                 .DEF	MAX_Dat 		= R19	; Used by rreg and wreg
                 .DEF	bitcount		= R20	; used by rreg & wreg
                 .DEF	temp			= R21	; ditto
                 .DEF	pMessage		= R22	; Message pointer
                 .DEF	reqlen			= R23	; Requested length
                 .DEF	blink_time		= R24	; Time between light blinks. This 8 bit timer runs 0-255
                 ;
                 ; R25 is reserved for SRAM macros.
                 ; R26 is reserved for the WAIT_TICK macro (not used in this app)
                 ; Note: R26-27=X, R28-29=Y, R30-31=Z
                 ; This program uses only Z as an index register, so R26-R29 are free.
                 ;
                 .DSEG
000060           SUD:	.BYTE 8		; 8 setup bytes
                 
                 .CSEG
                 .ORG 0				; Interrupt Vectors
000000 c00b      rjmp	RESET		; RESET
000001 9518      reti				; INT0
000002 9518      reti				; INT1
000003 9518      reti				; TIM1_CAPT
000004 9518      reti				; TIM1_COMPA
000005 9518      reti				; TIM1_OVF
000006 9518      reti				; TIM0_OVF
000007 9518      reti				; USART0_RXC
000008 9518      reti				; USART0_DRE
000009 9518      reti				; USART0_TXC
00000a 9518      reti				; ANA_COMP
00000b 9518      reti				; PCINT (8 more interrupt vectors but we aren't using them)
                 ;
                 ;------------------------------------------------------
                 RESET:
                 ;
00000c ed0f      	ldi		R16,LOW(RAMEND)
00000d bf0d      	out		SPL,r16					; set stack pointer to top of RAM
00000e 2700      	clr		flags					; initalze all flag bits
00000f 2400      	clr		configval				; we're initially unconfigured
                 ;
000010 98c7      	SCK_LO							; initialize the SPI outputs before enabling them as outputs
000011 9ac4      	SS_HI
000012 98c5      	MOSI_LO
000013 eb40      	ldi		r20,0b10110000			; AtTiny2313: bits 7,5,4 are SPI outputs, bits 6 (MISO),3 (INT) are inputs
000014 bb47      	out		DDRB,r20				; make them so
000015 e121
000016 e135
000017 d195      	WREGI	rPINCTL,(bmFDUPSPI+bmPOSINT+1)	; Must do this to set up SPI full duplex before accessing any regs. GPX = VBDetect
000018 d07b      	rcall	Reset_MAX
                 ;
                 ; At power on, check for any button press. If so, enter a test loop that copies button states to the 
                 ; four LEDS attached to the MAX3420E GP0 pins. If not, proceed directly to the HID Keyboard application.
                 ;
000019 e124
00001a d17e      	mRREG	rIOPINS					; GPIN3 GPIN2 GPIN1 GPIN0 GPOUT3 GPOUT2 GPOUT1 GPOUT0
00001b 7f30      	andi	MAX_dat,0b11110000		; consider only the input pins
00001c 3f30      	cpi		MAX_dat,0b11110000		; all up?
00001d f049      	breq	doApp					; go right to the app if nothing pressed. Otherwise, drop thru to button/light test.
                 ;
                 testbuts:
00001e e124
00001f d179      	mRREG	rIOPINS					
000020 9532      	swap	MAX_dat
000021 e124
000022 2f33
000023 d189      	mWREG	rIOPINS,MAX_dat			; PB's & LEDS: 1=off, 0=on
000024 703f      	andi	MAX_dat,0b00001111
000025 3036      	cpi		MAX_dat,0b00000110		; pressing both (active low) buttons 0 & 3 stop this test
000026 f7b9      	brne	testbuts
                 ;
                 doApp:
000027 e124
000028 e030
000029 d183      	WREGI	rIOPINS,0x00			; all lights off
00002a e02f
00002b e038
00002c d180      	WREGI	rUSBCTL,bmCONNECT
                 ;
                 Initialize:
00002d e02c
00002e e330
00002f d17d      	WREGI	rEPIEN,(bmSUDAVIE+bmIN3BAVIE)
000030 e02e
000031 e038
000032 d17a      	WREGI	rUSBIEN,(bmUSBRESIE)	; NOTE: The suspend interrupt is enabled when we are configured as a USB device (Set_Configuration)
000033 e120
000034 e031
000035 d177      	WREGI	rCPUCTL,bmIE			; enable the INT output pin
000036 e986      	ldi		blink_time,BLINKTC
                 ;
000037 e060      	ldi		pMessage,LOW(KB_Message*2); Initialize a pointer to the message to type
000038 d139      	rcall	send_keystroke			; preload the first KB bytes to clear the IN3BAVIRQ
                 ;
                 ; ******************************************************************************
                 ; Endless loop to check for blink timer, suspend interrupt, and any USB requests
                 ;
                 mainloop:
000039 9bb3      	sbis	pinb,3					; MAX3420E INT bit tied to PORTB.3 & configured for pos edge
00003a c027      	rjmp	L5
                 
                 ; Check for Setup Data Available IRQ
00003b e02b
00003c d15c      	mRREG	rEPIRQ
00003d 2e43      	mov		rval,MAX_Dat		
00003e fe45      	sbrs	rval,5					; EPIRQ reg bit 5 is SUDAVIRQ
00003f c004      	rjmp	L2
000040 e02b
000041 e230
000042 d16a      	WREGI	rEPIRQ,bmSUDAVIRQ		; clear the IRQ bit
000043 d05d      	rcall	Do_SETUP
                 
                 ; Check for EP3 Buffer Available IRQ
000044 fe44      L2:	sbrs	rval,4					; EPIRQ reg bit 4 is IN3BAVIRQ
000045 c001      	rjmp	L3
000046 d12b      	rcall	send_keystroke
                 
                 ; Check for USB reset IRQ
000047 e02d
000048 d150      L3:	mRREG	rUSBIRQ
000049 2e43      	mov		rval,MAX_Dat
00004a fe43      	sbrs	rval,3					; USBIRQ reg bit 3 is URESIRQ
00004b c011      	rjmp	L4	
00004c e02d
00004d e038
00004e d15e      	WREGI	rUSBIRQ,bmUSBRESIRQ		; clear the IRQ bit
00004f e124
000050 e032
000051 d15b      	WREGI	rIOPINS,0x02			; L1 on
000052 e02d      	ldi		MAX_Reg,rUSBIRQ
000053 d145      LR1:rcall	rreg
000054 7830      	andi	MAX_Dat,bmUSBRESDNIRQ	; check for reset done
000055 f3e9      	breq	LR1
000056 e02d
000057 e830
000058 d154      	WREGI	rUSBIRQ,bmUSBRESDNIRQ	; clear the IRQ
000059 e124
00005a e030

⌨️ 快捷键说明

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