亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? usbtiny2313.asm

?? AVR的USB開發源代碼 USB-RS232轉換
?? ASM
?? 第 1 頁 / 共 5 頁
字號:
;***************************************************************************
;* U S B   S T A C K   F O R   T H E   A V R   F A M I L Y
;*
;* File Name            :"USBtiny2313.asm"
;* Title                :AVR309:USB to UART protocol converter (simple - small FIFO)
;* Date                 :09.01.2006
;* Version              :1.1
;* Target MCU           :ATtiny2313
;* AUTHOR		:Ing. Igor Cesko
;* 			 Slovakia
;* 			 cesko@internet.sk
;* 			 http://www.cesko.host.sk
;*
;* DESCRIPTION:
;*  USB protocol implementation into MCU with noUSB interface:
;*  Device:
;*  Universal USB interface (8-bit I/O port + RS232 serial line + EEPROM)
;*  + added RS232 FIFO buffer
;*
;* The timing is adapted for 12 MHz crystal (overclocked MCU !!!)
;*
;*
;* to add your own functions - see section: TEMPLATE OF YOUR FUNCTION
;*
;* to customize device to your company you must change VendorUSB ID (VID)
;* to VID assigned to your company (for more information see www.usb.org)
;*
;***************************************************************************
.include "tn2313def.inc"

.equ	E2END			=127

.equ	inputport		=PINB
.equ	outputport		=PORTB
.equ	USBdirection		=DDRB
.equ	DATAplus		=1		;signal D+ on PB1
.equ	DATAminus		=0		;signal D- on PB0 - mount 1.5kOhm pull-up on this pin
.equ	USBpinmask		=0b11111100	;mask low 2 bits (D+,D-) on PB
.equ	USBpinmaskDplus		=~(1<<DATAplus)	;mask D+ bit on PB
.equ	USBpinmaskDminus	=~(1<<DATAminus);mask D- bit on PB

.equ	TSOPPort		=PINB
.equ	TSOPpullupPort		=PORTB
.equ	TSOPPin			=2		;signal OUT from IR sensor TSOP1738 on PB2

.equ	LEDPortLSB		=PORTD		;connecting LED diode LSB
.equ	LEDPinLSB		=PIND		;connecting LED diode LSB (input)
.equ	LEDdirectionLSB		=DDRD		;input/output LED LSB
.equ	LEDPortMSB		=PORTB		;LED diodes MSB
.equ	LEDPinMSB		=PINB		;LED diodes MSB  (input)
.equ	LEDdirectionMSB		=DDRB		;input/output LED MSB
.equ	LEDlsb0			=3		;LED0 to pin PD3
.equ	LEDlsb1			=5		;LED1 to pin PD5
.equ	LEDlsb2			=6		;LED2 to pin PD6
.equ	LEDmsb3			=3		;LED3 to pin PB3
.equ	LEDmsb4			=4		;LED4 to pin PB4
.equ	LEDmsb5			=5		;LED5 to pin PB5
.equ	LEDmsb6			=6		;LED6 to pin PB6
.equ	LEDmsb7			=7		;LED7 to pin PB7

.equ	SOPbyte			=0b10000000	;Start of Packet byte
.equ	DATA0PID		=0b11000011	;PID for DATA0 part
.equ	DATA1PID		=0b01001011	;PID for DATA1 part
.equ	OUTPID			=0b11100001	;PID for OUT part
.equ	INPID			=0b01101001	;PID for IN part
.equ	SOFPID			=0b10100101	;PID for SOF part
.equ	SETUPPID		=0b00101101	;PID for SETUP part
.equ	ACKPID			=0b11010010	;PID for ACK part
.equ	NAKPID			=0b01011010	;PID for NAK part
.equ	STALLPID		=0b00011110	;PID for STALL part
.equ	PREPID			=0b00111100	;PID for PRE part

.equ	nSOPbyte		=0b00000001	;Start of Packet byte - reverse order
.equ	nDATA0PID		=0b11000011	;PID for DATA0 part - reverse order
.equ	nDATA1PID		=0b11010010	;PID for DATA1 part - reverse order
.equ	nOUTPID			=0b10000111	;PID for OUT part - reverse order
.equ	nINPID			=0b10010110	;PID for IN part - reverse order
.equ	nSOFPID			=0b10100101	;PID for SOF part - reverse order
.equ	nSETUPPID		=0b10110100	;PID for SETUP part - reverse order
.equ	nACKPID			=0b01001011	;PID for ACK part - reverse order
.equ	nNAKPID			=0b01011010	;PID for NAK part - reverse order
.equ	nSTALLPID		=0b01111000	;PID for STALL part - reverse order
.equ	nPREPID			=0b00111100	;PID for PRE part - reverse order

.equ	nNRZITokenPID		=~0b10000000	;PID mask for Token packet (IN,OUT,SOF,SETUP) - reverse order NRZI
.equ	nNRZISOPbyte		=~0b10101011	;Start of Packet byte - reverse order NRZI
.equ	nNRZIDATA0PID		=~0b11010111	;PID for DATA0 part - reverse order NRZI
.equ	nNRZIDATA1PID		=~0b11001001	;PID for DATA1 part - reverse order NRZI
.equ	nNRZIOUTPID		=~0b10101111	;PID for OUT part - reverse order NRZI
.equ	nNRZIINPID		=~0b10110001	;PID for IN part - reverse order NRZI
.equ	nNRZISOFPID		=~0b10010011	;PID for SOF part - reverse order NRZI
.equ	nNRZISETUPPID		=~0b10001101	;PID for SETUP part - reverse order NRZI
.equ	nNRZIACKPID		=~0b00100111	;PID for ACK part - reverse order NRZI
.equ	nNRZINAKPID		=~0b00111001	;PID for NAK part - reverse order NRZI
.equ	nNRZISTALLPID		=~0b00000111	;PID for STALL part - reverse order NRZI
.equ	nNRZIPREPID		=~0b01111101	;PID for PRE part - reverse order NRZI
.equ	nNRZIADDR0		=~0b01010101	;Address = 0 - reverse order NRZI

						;status bytes - State
.equ	BaseState		=0		;
.equ	SetupState	=1		;
.equ	InState			=2		;
.equ	OutState		=3		;
.equ	SOFState		=4		;
.equ	DataState		=5		;
.equ	AddressChangeState	=6		;

						;Flags of required task
.equ	DoNone					=0
.equ	DoReceiveOutData			=1
.equ	DoReceiveSetupData			=2
.equ	DoPrepareOutContinuousBuffer		=3
.equ	DoReadySendAnswer			=4


.equ	CRC5poly		=0b00101		;CRC5 polynomial
.equ	CRC5zvysok		=0b01100		;CRC5 remainder after correct CRC5
.equ	CRC16poly		=0b1000000000000101	;CRC16 polynomial
.equ	CRC16zvysok		=0b1000000000001101	;CRC16 remainder after correct CRC16

.equ	MAXUSBBYTES		=14			;maximum bytes in USB input message
.equ	MAXRS232LENGTH		=36			;maximum length of RS232 code (count of ones and zeros together) (attention: MAXRS232LENGTH must be even number !!!)
.equ	NumberOfFirstBits	=10			;how many first bits allowed be longer
.equ	NoFirstBitsTimerOffset	=256-12800*12/1024	;Timeout 12.8ms (12800us) to terminate after firsts bits(12Mhz:clock, 1024:timer predivider, 256:timer overflow value)
.equ	InitBaudRate		=12000000/16/57600-1	;UART on 57600 (for 12MHz=12000000Hz)

.equ	InputBufferBegin	=RAMEND-127				;start of receiving buffer
.equ	InputShiftBufferBegin	=InputBufferBegin+MAXUSBBYTES		;start of receiving shift buffer
.equ	RS232BufferBegin	=InputShiftBufferBegin+MAXUSBBYTES	;start of buffer for RS232 receiving

.equ	MyInAddressSRAM		=RS232BufferBegin+MAXRS232LENGTH+1
.equ	MyOutAddressSRAM	=MyInAddressSRAM+1

.equ	OutputBufferBegin	=RAMEND-MAXUSBBYTES-2	;begin of transmitting buffer
.equ	AckBufferBegin		=OutputBufferBegin-3	;begin of transmitting buffer Ack
.equ	NakBufferBegin		=AckBufferBegin-3	;begin of transmitting buffer Nak

.equ	StackBegin		=NakBufferBegin-1	;bottom of stack

.def	ConfigByte		=R1		;0=unconfigured state
.def	backupbitcount		=R2		;backup bitcount register in INT0 disconnected
.def	RAMread			=R3		;if reading from SRAM
.def	backupSREGTimer		=R4		;backup Flag register in Timer interrupt
.def	backupSREG		=R5		;backup Flag register in INT0 interrupt
.def	ACC			=R6		;accumulator
.def	lastBitstufNumber	=R7		;position in bitstuffing
.def	OutBitStuffNumber	=R8		;how many bits to send last byte - bitstuffing
.def	BitStuffInOut		=R9		;if insertion or deleting of bitstuffing
.def	TotalBytesToSend	=R10		;how many bytes to send
.def	TransmitPart		=R11		;order number of transmitting part
.def	InputBufferLength	=R12		;length prepared in input USB buffer
.def	OutputBufferLength	=R13		;length answers prepared in USB buffer
.def	MyOutAddress		=R14		;my USB address (Out Packet) for update
.def	MyInAddress		=R15		;my USB address (In/SetupPacket)


.def	ActionFlag		=R16		;what to do in main program loop
.def	temp3			=R17		;temporary register
.def	temp2			=R18		;temporary register
.def	temp1			=R19		;temporary register
.def	temp0			=R20		;temporary register
.def	bitcount		=R21		;counter of bits in byte
.def	ByteCount		=R22		;counter of maximum number of received bytes
.def	inputbuf		=R23		;receiver register
.def	shiftbuf		=R24		;shift receiving register
.def	State			=R25		;state byte of status of state machine
.def	RS232BufptrX		=R26		;XL register - pointer to buffer of received IR codes
.def	RS232BufferFull		=R27		;XH register - flag of full RS232 Buffer
.def	USBBufptrY		=R28		;YL register - pointer to USB buffer input/output
.def	ROMBufptrZ		=R30		;ZL register - pointer to buffer of ROM data

;requirements on descriptors
.equ	GET_STATUS		=0
.equ	CLEAR_FEATURE		=1
.equ	SET_FEATURE		=3
.equ	SET_ADDRESS		=5
.equ	GET_DESCRIPTOR		=6
.equ	SET_DESCRIPTOR		=7
.equ	GET_CONFIGURATION	=8
.equ	SET_CONFIGURATION	=9
.equ	GET_INTERFACE		=10
.equ	SET_INTERFACE		=11
.equ	SYNCH_FRAME		=12

;descriptor types
.equ	DEVICE			=1
.equ	CONFIGURATION		=2
.equ	STRING			=3
.equ	INTERFACE		=4
.equ	ENDPOINT		=5

.equ	USER_FNC_NUMBER		=100


;------------------------------------------------------------------------------------------
;********************************************************************
;* Interrupt table
;********************************************************************
.cseg
;------------------------------------------------------------------------------------------
.org 0						;after reset
		rjmp	reset
;------------------------------------------------------------------------------------------
.org INT0addr					;external interrupt INT0
		rjmp	INT0handler
;------------------------------------------------------------------------------------------
.org URXCaddr					;receiving from serial line
		push	temp0
		in	temp0,UDR			;put to temp0 received data from UART
		sei					;enable interrupts to service USB
		in	backupSREGTimer,SREG		;backup SREG
		cbi	UCSRB,RXCIE			;disable interrupt from UART receiving
		cpi	RS232BufferFull,MAXRS232LENGTH-4
		brcc	NoIncRS232BufferFull
		push	RS232BufptrX
		lds	RS232BufptrX,RS232BufferBegin+2	;set position to begin of buffer write RS232 code : 3-th.byte of header (code length + reading + writing + reserve)
		st	X+,temp0			;and save it to buffer
		cpi	RS232BufptrX,RS232BufferBegin+MAXRS232LENGTH+1	;if not reached maximum of RS232 buffer
		brne	NoUARTBufferOverflow		;then continue
		ldi	RS232BufptrX,RS232BufferBegin+4	;otherwise set position to buffer begin
 NoUARTBufferOverflow:
		sts	RS232BufferBegin+2,RS232BufptrX	;save new offset of buffer write RS232 code : 3-th.byte of header (code length + reading + writing + reserve)
		inc	RS232BufferFull			;increment length of RS232 buffer
		pop	RS232BufptrX
 NoIncRS232BufferFull:
		pop	temp0
		out	SREG,backupSREGTimer		;restore SREG
		cli					;disable interrupt because to prevent reentrant interrupt call
		sbi	UCSRB,RXCIE			;enable interrupt from receiving of UART
		reti
;------------------------------------------------------------------------------------------
;********************************************************************
;* Init program
;********************************************************************
;------------------------------------------------------------------------------------------
reset:			;initialization of processor and variables to right values
		ldi	temp0,StackBegin	;initialization of stack
		out	SPL,temp0

		clr	XH			;RS232 pointer
		clr	YH			;USB pointer
		clr	ZH			;ROM pointer
		sts	RS232BufferBegin+0,YH	;clear lengths of RS232 code in buffer
		ldi	temp0,RS232BufferBegin+4
		sts	RS232BufferBegin+1,temp0;znuluj ukazovatel citania
		sts	RS232BufferBegin+2,temp0;znuluj ukazovatel zapisu
		clr	RS232BufferFull

		rcall	InitACKBufffer		;initialization of ACK buffer
		rcall	InitNAKBufffer		;initialization of NAK buffer

		rcall	USBReset		;initialization of USB addresses

		sbi	TSOPpullupPort,TSOPpin	;set pull-up on TSOP input

		ldi	temp0,(1<<LEDlsb0)+(1<<LEDlsb1)+(1<<LEDlsb2)
		out	LEDPortLSB,temp0	;set pull-up on all LED LSB
		ldi	temp0,(1<<LEDmsb3)+(1<<LEDmsb4)+(1<<LEDmsb5)+(1<<LEDmsb6)+(1<<LEDmsb7)
		out	LEDPortMSB,temp0	;set pull-up on all LED MSB

		sbi	PORTD,0			;set pull-up on RxD input
		ldi	temp0,InitBaudRate	;set UART speed
		out	UBRRL,temp0
		sbi	UCSRB,TXEN		;enable transmiting of UART
		sbi	UCSRB,RXEN		;enable receiving of UART
		sbi	UCSRB,RXCIE		;enable interrupt from receiving of UART

		ldi	temp0,0x0F		;INT0 - respond to leading edge
		out	MCUCR,temp0		;
		ldi	temp0,1<<INT0		;enable external interrupt INT0
		out	GIMSK,temp0
;------------------------------------------------------------------------------------------
;********************************************************************
;* Main program
;********************************************************************
		sei					;enable interrupts globally
Main:
		sbis	inputport,DATAminus	;waiting till change D- to 0
		rjmp	CheckUSBReset		;and check, if isn't USB reset

		cpi	ActionFlag,DoReceiveSetupData
		breq	ProcReceiveSetupData
		cpi	ActionFlag,DoPrepareOutContinuousBuffer
		breq	ProcPrepareOutContinuousBuffer
		rjmp	Main

CheckUSBReset:
		ldi	temp0,255		;counter duration of reset (according to specification is that cca 10ms - here is cca 100us)
WaitForUSBReset:
		sbic	inputport,DATAminus	;waiting till change D+ to 0
		rjmp	Main
		dec	temp0
		brne	WaitForUSBReset
		rcall	USBReset
		rjmp	Main

ProcPrepareOutContinuousBuffer:
		rcall	PrepareOutContinuousBuffer	;prepare next sequence of answer to buffer
		ldi	ActionFlag,DoReadySendAnswer
		rjmp	Main
ProcReceiveSetupData:
		ldi	USBBufptrY,InputBufferBegin	;pointer to begin of receiving buffer

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲婷婷在线视频| 国产女主播视频一区二区| 国产一区91精品张津瑜| 性做久久久久久| 国产精品美女久久久久久久久久久| 欧美一级免费观看| 国产精品一卡二卡在线观看| 久久国产夜色精品鲁鲁99| 午夜伦理一区二区| 日本在线观看不卡视频| 日本亚洲免费观看| 色94色欧美sute亚洲线路一久 | 欧美精品一区二区三区四区| 欧美三级乱人伦电影| 欧美亚洲综合在线| 欧洲精品一区二区三区在线观看| 欧美在线观看视频一区二区| 欧美国产一区在线| 国产精品人人做人人爽人人添| 日本在线不卡视频一二三区| 欧美在线观看视频在线| 亚洲天堂免费在线观看视频| 国模无码大尺度一区二区三区| 国产一区二区在线影院| 91麻豆精品国产91久久久| 欧美一区二区三区精品| 日韩激情视频网站| 日日夜夜精品免费视频| 色噜噜久久综合| 亚洲欧洲在线观看av| 亚洲成人黄色影院| 欧美综合一区二区| 亚洲精品久久久久久国产精华液| 亚洲资源中文字幕| 久久精品99国产精品| 欧美日韩视频第一区| 亚洲天堂成人在线观看| 99久久99久久久精品齐齐| 欧美综合久久久| 亚洲一区中文在线| 欧美三级日韩三级| 偷拍日韩校园综合在线| 欧美三级中文字| 五月婷婷综合网| 欧美日本一区二区三区| 亚洲国产高清不卡| 成人激情免费视频| 欧美日本一区二区| 视频在线观看一区| 欧美不卡一二三| 亚洲不卡一区二区三区| 欧美浪妇xxxx高跟鞋交| 久久久久久综合| 亚洲激情在线播放| 欧美日韩国产综合视频在线观看| 日本在线不卡视频一二三区| 欧美成va人片在线观看| 国产呦精品一区二区三区网站| 久久精品视频网| 亚洲女爱视频在线| 国产精品 日产精品 欧美精品| 欧美日韩精品一区二区三区四区| 亚洲成av人片一区二区梦乃| 日韩欧美123| 日韩成人一级大片| 久久亚洲私人国产精品va媚药| 亚洲6080在线| 久久精品无码一区二区三区| 不卡电影一区二区三区| 午夜精品福利在线| 国产视频一区在线播放| 欧美调教femdomvk| 国产毛片精品视频| 亚洲一区在线观看视频| 精品国产精品一区二区夜夜嗨| 99久久伊人精品| 美女在线观看视频一区二区| 欧美精品一卡二卡| 国产成人精品免费一区二区| 亚洲成av人片一区二区三区| 中文字幕的久久| 日韩欧美国产一区二区三区| 成人国产一区二区三区精品| 日韩二区在线观看| 亚洲欧美激情视频在线观看一区二区三区 | 综合在线观看色| 欧美一区二区三区四区五区| av男人天堂一区| 亚洲天堂a在线| 欧美成人免费网站| 欧美三片在线视频观看 | 91精彩视频在线| 国产呦精品一区二区三区网站| 亚洲丶国产丶欧美一区二区三区| 久久久久久久电影| 欧美剧情片在线观看| 91在线观看下载| 国产精品久久久久aaaa樱花| av欧美精品.com| 国产一区二区三区黄视频| 亚洲二区在线视频| 欧美成人一区二区三区| 欧美日韩综合不卡| 91亚洲男人天堂| 不卡的电视剧免费网站有什么| 国产乱码精品一品二品| 日本少妇一区二区| 亚洲bt欧美bt精品777| 亚洲精品成人悠悠色影视| 亚洲色图清纯唯美| 亚洲欧美日韩国产中文在线| 亚洲欧洲日产国产综合网| 国产清纯美女被跳蛋高潮一区二区久久w | 欧美色爱综合网| 欧美三级中文字| 欧美日韩久久久| 欧美日韩一区不卡| 欧美精选在线播放| 4438x成人网最大色成网站| 欧美日本一区二区三区四区| 欧美精品免费视频| 日韩一区二区电影| 久久在线免费观看| 国产午夜精品美女毛片视频| 久久久精品国产99久久精品芒果| 欧美激情在线观看视频免费| 久久精品一区蜜桃臀影院| 欧美国产日韩一二三区| 综合av第一页| 亚洲不卡av一区二区三区| 天堂久久久久va久久久久| 欧美aaaaaa午夜精品| 国产精品国产a| 亚洲视频在线观看三级| 亚洲一区二区视频在线观看| 日日骚欧美日韩| 久久国产剧场电影| 北条麻妃一区二区三区| 欧洲日韩一区二区三区| 日韩午夜中文字幕| 欧美韩国日本不卡| 亚洲一区二区精品久久av| 秋霞av亚洲一区二区三| 国产激情视频一区二区在线观看| 99久久久国产精品| 欧美日韩精品一区二区天天拍小说 | 国产欧美日韩另类一区| 亚洲视频香蕉人妖| 男人的天堂久久精品| 国产精品18久久久久久久久久久久| 成人免费观看av| 蜜臀av亚洲一区中文字幕| 国产99久久久久| 激情小说欧美图片| 97精品视频在线观看自产线路二| 欧美日韩电影在线播放| 久久久不卡网国产精品二区 | 欧美国产欧美综合| 五月婷婷久久丁香| 国产精品综合视频| 欧美日韩你懂得| 国产欧美一区二区三区在线看蜜臀| 伊人色综合久久天天人手人婷| 久久精品二区亚洲w码| 色综合天天综合给合国产| 黄色成人免费在线| 在线亚洲免费视频| 国产日韩欧美一区二区三区乱码 | 亚洲影院久久精品| 国产福利一区在线| 欧美高清视频不卡网| 成人欧美一区二区三区视频网页| 免费观看30秒视频久久| 91麻豆产精品久久久久久| 亚洲精品在线观看视频| 五月婷婷激情综合网| 色综合视频在线观看| 色成人在线视频| 国产欧美精品区一区二区三区 | 久久国产精品99久久人人澡| 在线亚洲一区观看| 国产精品大尺度| 国产麻豆精品久久一二三| 日韩一区二区三区三四区视频在线观看| 中文字幕一区二区三区蜜月| 国产91丝袜在线18| 久久综合国产精品| 久久9热精品视频| 51午夜精品国产| 婷婷丁香激情综合| 欧美日韩在线免费视频| 尤物av一区二区| 色综合天天综合给合国产| 亚洲视频电影在线| 91浏览器打开| 亚洲日本va午夜在线电影| 不卡的av电影在线观看| 国产精品福利av| 91丨九色丨蝌蚪丨老版| 亚洲欧美视频在线观看视频|