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

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

?? usbtiny2313.asm

?? AVR的USB開發源代碼 USB-RS232轉換
?? ASM
?? 第 1 頁 / 共 5 頁
字號:
		breq	ComposeSET_DESCRIPTOR		;

		cpi	temp1,GET_CONFIGURATION		;
		breq	ComposeGET_CONFIGURATION	;

		cpi	temp1,SET_CONFIGURATION		;
		breq	ComposeSET_CONFIGURATION	;

		cpi	temp1,GET_INTERFACE		;
		breq	ComposeGET_INTERFACE		;

		cpi	temp1,SET_INTERFACE		;
		breq	ComposeSET_INTERFACE		;

		cpi	temp1,SYNCH_FRAME		;
		breq	ComposeSYNCH_FRAME		;
							;if not found known request
		rjmp	ZeroDATA1Answer			;if that was something unknown, then prepare zero answer

ComposeSET_ADDRESS:
		lds	temp1,InputBufferBegin+4	;new address to temp1
		rcall	SetMyNewUSBAddresses		;and compute NRZI and bitstuffing coded adresses
		ldi	State,AddressChangeState	;set state for Address changing
		rjmp	ZeroDATA1Answer			;send zero answer

ComposeSET_CONFIGURATION:
		lds	ConfigByte,InputBufferBegin+4	;number of configuration to variable ConfigByte
ComposeCLEAR_FEATURE:
ComposeSET_FEATURE:
ComposeSET_INTERFACE:
ZeroStringAnswer:
		rjmp	ZeroDATA1Answer			;send zero answer
ComposeGET_STATUS:
TwoZeroAnswer:
		ldi	temp0,2				;number of my bytes answers to temp0
ComposeGET_STATUS2:
		ldi	ZH, high(StatusAnswer<<1)	;ROMpointer to  answer
		ldi	ZL,  low(StatusAnswer<<1)
		rjmp	ComposeEndXXXDescriptor		;and complete
ComposeGET_CONFIGURATION:
		and	ConfigByte,ConfigByte		;if I am unconfigured
		breq	OneZeroAnswer			;then send single zero - otherwise send my configuration
		ldi	temp0,1				;number of my bytes answers to temp0
		ldi	ZH, high(ConfigAnswerMinus1<<1)	;ROMpointer to  answer
		ldi	ZL,  low(ConfigAnswerMinus1<<1)+1
		rjmp	ComposeEndXXXDescriptor		;and complete
ComposeGET_INTERFACE:
		ldi	ZH, high(InterfaceAnswer<<1)	;ROMpointer to answer
		ldi	ZL,  low(InterfaceAnswer<<1)
		ldi	temp0,1				;number of my bytes answers to temp0
		rjmp	ComposeEndXXXDescriptor		;and complete
ComposeSYNCH_FRAME:
ComposeSET_DESCRIPTOR:
		rcall	ComposeSTALL
		ret
ComposeGET_DESCRIPTOR:
		lds	temp1,InputBufferBegin+5	;DescriptorType to temp1
		cpi	temp1,DEVICE			;DeviceDescriptor
		breq	ComposeDeviceDescriptor		;
		cpi	temp1,CONFIGURATION		;ConfigurationDescriptor
		breq	ComposeConfigDescriptor		;
		cpi	temp1,STRING			;StringDeviceDescriptor
		breq	ComposeStringDescriptor		;
		ret
ComposeDeviceDescriptor:
		ldi	ZH, high(DeviceDescriptor<<1)	;ROMpointer to descriptor
		ldi	ZL,  low(DeviceDescriptor<<1)
		ldi	temp0,0x12			;number of my bytes answers to temp0
		rjmp	ComposeEndXXXDescriptor		;and complete
ComposeConfigDescriptor:
		ldi	ZH, high(ConfigDescriptor<<1)	;ROMpointer to descriptor
		ldi	ZL,  low(ConfigDescriptor<<1)
		ldi	temp0,9+9+7			;number of my bytes answers to temp0
ComposeEndXXXDescriptor:
		lds	TotalBytesToSend,InputBufferBegin+8	;number of requested bytes to TotalBytesToSend
		cp	TotalBytesToSend,temp0			;if not requested more than I can send
		brcs	HostConfigLength		;transmit the requested number
		mov	TotalBytesToSend,temp0		;otherwise send number of my answers
HostConfigLength:
		mov	temp0,TotalBytesToSend		;
		clr	TransmitPart			;zero the number of 8 bytes answers
		andi	temp0,0b00000111		;if is length divisible by 8
		breq	Length8Multiply			;then not count one answer (under 8 byte)
		inc	TransmitPart			;otherwise count it
Length8Multiply:
		mov	temp0,TotalBytesToSend		;
		lsr	temp0				;length of 8 bytes answers will reach
		lsr	temp0				;integer division by 8
		lsr	temp0
		add	TransmitPart,temp0		;and by addition to last non entire 8-bytes to variable TransmitPart
		ldi	temp0,DATA0PID			;DATA0 PID - in the next will be toggled to DATA1PID in load descriptor
		sts	OutputBufferBegin+1,temp0	;store to output buffer
		rjmp	ComposeNextAnswerPart
ComposeStringDescriptor:
		ldi	temp1,4+8			;if RAMread=4(insert zeros from ROM reading) + 8(behind first byte no load zero)
		mov	RAMread,temp1
		lds	temp1,InputBufferBegin+4	;DescriptorIndex to temp1
		cpi	temp1,0				;LANGID String
		breq	ComposeLangIDString		;
		cpi	temp1,2				;DevNameString
		breq	ComposeDevNameString		;
		brcc	ZeroStringAnswer		;if is DescriptorIndex higher than 2 - send zero answer
							;otherwise is VendorString
ComposeVendorString:
		ldi	ZH, high(VendorStringDescriptor<<1)	;ROMpointer to descriptor
		ldi	ZL,  low(VendorStringDescriptor<<1)
		ldi	temp0,(VendorStringDescriptorEnd-VendorStringDescriptor)*4-2	;number of my bytes answers to temp0
		rjmp	ComposeEndXXXDescriptor		;and complete
ComposeDevNameString:
		ldi	ZH, high(DevNameStringDescriptor<<1)	;ROMpointer to descriptor
		ldi	ZL,  low(DevNameStringDescriptor<<1)
		ldi	temp0,(DevNameStringDescriptorEnd-DevNameStringDescriptor)*4-2	;number of my bytes answers to temp0
		rjmp	ComposeEndXXXDescriptor		;and complete
ComposeLangIDString:
		clr	RAMread
		ldi	ZH, high(LangIDStringDescriptor<<1)	;ROMpointer to descriptor
		ldi	ZL,  low(LangIDStringDescriptor<<1)
		ldi	temp0,(LangIDStringDescriptorEnd-LangIDStringDescriptor)*2;pocet mojich bytovych odpovedi do temp0
		rjmp	ComposeEndXXXDescriptor		;and complete
;------------------------------------------------------------------------------------------
ZeroDATA1Answer:
		rcall	ComposeZeroDATA1PIDAnswer
		ret
;------------------------------------------------------------------------------------------
SetMyNewUSBAddresses:		;set new USB addresses in NRZI coded
		mov	temp2,temp1		;address to temp2 and temp1 and temp3
 		mov	temp3,temp1		;
		cpi	temp1,0b01111111	;if address contains less than 6 ones
		brne	NewAddressNo6ones	;then don't add bitstuffing
		ldi	temp1,0b10111111	;else insert one zero - bitstuffing
 NewAddressNo6ones:
		andi	temp3,0b00000111	;mask 3 low bits of Address
		cpi	temp3,0b00000111	;and if 3 low bits of Address is no all ones
		brne	NewAddressNo3ones	;then no change address
						;else insert zero after 3-rd bit (bitstuffing)
		sec				;set carry
		rol	temp2			;rotate left
		andi	temp2,0b11110111	;and inserted zero after 3-rd bit
 NewAddressNo3ones:
		sts	MyOutAddressSRAM,temp2	;store new non-coded address Out (temp2)
						;and now perform NRZI coding
		rcall	NRZIforAddress		;NRZI for AddressIn (in temp1)
		sts	MyInAddressSRAM,ACC	;store NRZI coded AddressIn

		lds	temp1,MyOutAddressSRAM	;load non-coded address Out (in temp1)
		rcall	NRZIforAddress		;NRZI for AddressOut
		sts	MyOutAddressSRAM,ACC	;store NRZI coded AddressOut

		ret				;and return
;------------------------------------------------------------------------------------------
NRZIforAddress:
		clr	ACC			;original answer state - of my nNRZI USB address
		ldi	temp2,0b00000001	;mask for xoring
		ldi	temp3,8			;bits counter
SetMyNewUSBAddressesLoop:
		mov	temp0,ACC		;remember final answer
		ror	temp1			;to carry transmitting bit LSB (in direction firstly LSB then MSB)
		brcs	NoXORBits		;if one - don't change state
		eor	temp0,temp2		;otherwise state will be changed according to last bit of answer
NoXORBits:
		ror	temp0			;last bit of changed answer to carry
		rol	ACC			;and from carry to final answer to the LSB place (and reverse LSB and MSB order)
		dec	temp3			;decrement bits counter
		brne	SetMyNewUSBAddressesLoop	;if bits counter isn't zero repeat transmitting with next bit
		ret
;------------------------------------------------------------------------------------------
;------------------------------------------------------------------------------------------
PrepareOutContinuousBuffer:
		rcall	PrepareContinuousBuffer
		rcall	MakeOutBitStuff
		ret
;------------------------------------------------------------------------------------------
PrepareContinuousBuffer:
		mov	temp0,TransmitPart
		cpi	temp0,1
		brne	NextAnswerInBuffer		;if buffer empty
		rcall	ComposeZeroAnswer		;prepare zero answer
		ret
NextAnswerInBuffer:
		dec	TransmitPart			;decrement general length of answer
ComposeNextAnswerPart:
		mov	temp1,TotalBytesToSend	;decrement number of bytes to transmit
		subi	temp1,8			;is is necessary to send more as 8 byte
		ldi	temp3,8			;if yes - send only 8 byte
		brcc	Nad8Bytov
		mov	temp3,TotalBytesToSend	;otherwise send only given number of bytes
		clr	TransmitPart
		inc	TransmitPart		;and this will be last answer
Nad8Bytov:
		mov	TotalBytesToSend,temp1	;decremented number of bytes to TotalBytesToSend
		rcall	LoadXXXDescriptor
		ldi	ByteCount,2		;length of output buffer (only SOP and PID)
		add	ByteCount,temp3		;+ number of bytes
		rcall	AddCRCOut		;addition of CRC to buffer
		inc	ByteCount		;length of output buffer + CRC16
		inc	ByteCount
		ret				;finish
;------------------------------------------------------------------------------------------
.equ	USBversion		=0x0101		;for what version USB is that (1.01)
.equ	VendorUSBID		=0x03EB		; vendor identifier (Atmel=0x03EB)
.equ	DeviceUSBID		=0x21FE		;product identifier (USB to RS232 converter ATmega8=0x21FF)
.equ	DeviceVersion		=0x0002		;version number of product (version=0.02)
.equ	MaxUSBCurrent		=46		;current consumption from USB (46mA)
;------------------------------------------------------------------------------------------
DeviceDescriptor:
		.db	0x12,0x01		;0 byte - size of descriptor in byte
						;1 byte - descriptor type: Device descriptor
		.dw	USBversion		;2,3 byte - version USB LSB (1.00)
		.db	0x00,0x00		;4 byte - device class
						;5 byte - subclass
		.db	0x00,0x08		;6 byte - protocol code
						;7 byte - FIFO size in bytes
		.dw	VendorUSBID		;8,9 byte - vendor identifier (Cypress=0x04B4)
		.dw	DeviceUSBID		;10,11 byte - product identifier (teplomer=0x0002)
		.dw	DeviceVersion		;12,13 byte - product version number (verzia=0.01)
		.db	0x01,0x02		;14 byte - index of string "vendor"
						;15 byte - index of string "product"
		.db	0x00,0x01		;16 byte - index of string "serial number"
						;17 byte - number of possible configurations
DeviceDescriptorEnd:
;------------------------------------------------------------------------------------------
ConfigDescriptor:
		.db	0x9,0x02		;length, descriptor type
ConfigDescriptorLength:
		.dw	9+9+7			;entire length of all descriptors
	ConfigAnswerMinus1:			;for sending the number - congiguration number (attention - addition of 1 required)
		.db	1,1			;numInterfaces, congiguration number
		.db	0,0x80			;string index, attributes; bus powered
		.db	MaxUSBCurrent/2,0x09	;current consumption, interface descriptor length
		.db	0x04,0			;interface descriptor; number of interface
	InterfaceAnswer:			;for sending number of alternatively interface
		.db	0,1			;alternatively interface; number of endpoints except EP0
	StatusAnswer:				;2 zero answers (saving ROM place)
		.db	0,0			;interface class; interface subclass
		.db	0,0			;protocol code; string index
		.db	0x07,0x5		;length, descriptor type - endpoint
		.db	0x81,0			;endpoint address; transfer type
		.dw	0x08			;max packet size
		.db	10,0			;polling interval [ms]; dummy byte (for filling)
ConfigDescriptorEnd:
;------------------------------------------------------------------------------------------
LangIDStringDescriptor:
		.db	(LangIDStringDescriptorEnd-LangIDStringDescriptor)*2,3	;length, type: string descriptor
		.dw	0x0409			;English
LangIDStringDescriptorEnd:
;------------------------------------------------------------------------------------------
VendorStringDescriptor:
		.db	(VendorStringDescriptorEnd-VendorStringDescriptor)*4-2,3	;length, type: string descriptor
VendorStringDescriptorEnd:
;------------------------------------------------------------------------------------------
DevNameStringDescriptor:
		.db	(DevNameStringDescriptorEnd-DevNameStringDescriptor)*4-2,3;dlzka, typ: string deskriptor
		.db	"AVR309:USB to UART protocol converter (simple)"
DevNameStringDescriptorEnd:
;------------------------------------------------------------------------------------------
MaskPortData:
		bst	ACC,0
		bld	temp0,LEDlsb0
		bst	ACC,1
		bld	temp0,LEDlsb1
		bst	ACC,2
		bld	temp0,LEDlsb2
		bst	ACC,3
		bld	temp1,LEDmsb3
		bst	ACC,4
		bld	temp1,LEDmsb4
		bst	ACC,5
		bld	temp1,LEDmsb5
		bst	ACC,6
		bld	temp1,LEDmsb6
		bst	ACC,7
		bld	temp1,LEDmsb7
		ret
;------------------------------------------------------------------------------------------
SetDataPortDirection:
		in	temp0,LEDdirectionLSB		;read current LSB state to temp0 (next bit directions will be not changed)
		in	temp1,LEDdirectionMSB		;read current MSB state to temp1 (next bit directions will be not changed)
		rcall	MaskPortData
		out	LEDdirectionLSB,temp0		;and update LSB port direction
		out	LEDdirectionMSB,temp1		;and update MSB port direction
		ret
;------------------------------------------------------------------------------------------
SetOutDataPort:
		in	temp0,LEDPortLSB		;read current LSB state to temp0 (next data bits will be not changed)
		in	temp1,LEDPortMSB		;read current MSB state to temp1 (next data bits will be not changed)
		rcall	MaskPortData
		out	LEDPortLSB,temp0		;and update LSB data port
		out	LEDPortMSB,temp1		;and update MSB data port
		ret
;------------------------------------------------------------------------------------------
GetInDataPort:
		in	temp0,LEDPinMSB			;read current MSB state to temp0
		in	temp1,LEDPinLSB			;read current LSB state to temp1
MoveLEDin:
		bst	temp1,LEDlsb0			;and move LSB bits to correct positions (from temp1 to temp0)
		bld	temp0,0				;(MSB bits are in correct place)
		bst	temp1,LEDlsb1
		bld	

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲日本青草视频在线怡红院| 久久99久久99小草精品免视看| 一区二区在线观看视频在线观看| 丝袜诱惑制服诱惑色一区在线观看| 国产精品影视天天线| 欧美日韩中字一区| 国产精品国产自产拍高清av| 日韩精品成人一区二区三区| 99热这里都是精品| 2014亚洲片线观看视频免费| 亚洲国产成人va在线观看天堂| 成人在线视频一区二区| 欧美一级艳片视频免费观看| 亚洲精品国产视频| va亚洲va日韩不卡在线观看| 久久综合九色综合久久久精品综合| 亚洲一区二区三区四区不卡| 97精品超碰一区二区三区| 久久久久久亚洲综合| 丝袜亚洲精品中文字幕一区| 色狠狠一区二区三区香蕉| 亚洲欧洲精品成人久久奇米网| 国产一本一道久久香蕉| 欧美大片一区二区三区| 日韩精品乱码免费| 欧亚洲嫩模精品一区三区| 中文字幕佐山爱一区二区免费| 国产精品夜夜嗨| 欧美精品一区二| 九九热在线视频观看这里只有精品| 欧美日韩成人在线一区| 亚洲成人免费视频| 欧美日韩高清影院| 日韩av一二三| 日韩免费一区二区| 狠狠v欧美v日韩v亚洲ⅴ| 精品国产百合女同互慰| 国产做a爰片久久毛片| 久久亚洲综合av| 国产在线一区二区| 国产欧美日韩不卡| 91在线小视频| 亚洲综合在线第一页| 欧美日韩高清一区二区三区| 午夜国产不卡在线观看视频| 欧美一区二区三区四区在线观看| 天堂精品中文字幕在线| 欧美不卡一二三| 国产精品77777| 国产精品成人免费精品自在线观看 | 国产91综合网| 国产精品免费网站在线观看| 国产精品资源在线观看| 国产亚洲女人久久久久毛片| 成人av电影在线网| 亚洲制服丝袜av| 欧美一区二区网站| 国产乱人伦偷精品视频免下载 | 欧美国产视频在线| 91在线精品一区二区三区| 一区二区三区中文字幕| 欧美丰满美乳xxx高潮www| 蜜臀精品一区二区三区在线观看 | 日韩一区二区三区在线视频| 久久电影网电视剧免费观看| 亚洲国产精品高清| 欧美系列一区二区| 久久国产精品99久久久久久老狼| 久久精品日韩一区二区三区| 99免费精品视频| 日韩精彩视频在线观看| 国产欧美综合色| 欧美人狂配大交3d怪物一区| 国产福利一区二区三区视频在线| 亚洲美女屁股眼交| 精品电影一区二区三区| 91在线观看视频| 免费人成精品欧美精品| 中文字幕中文字幕一区二区| 欧美理论电影在线| av在线不卡电影| 蜜桃久久久久久| 亚洲精品高清视频在线观看| 精品国产乱码久久| 欧美主播一区二区三区| 国内精品伊人久久久久av影院| 亚洲人成在线播放网站岛国| 欧美变态口味重另类| 欧美综合一区二区| 国产成人免费视频| 麻豆精品在线播放| 亚洲一级二级在线| 亚洲桃色在线一区| 久久久精品一品道一区| 欧美日韩国产一二三| 97久久精品人人澡人人爽| 国产精品一级二级三级| 美女视频网站久久| 亚洲影视在线观看| 国产成人精品影院| 欧美a级一区二区| 亚洲综合自拍偷拍| 国产精品卡一卡二| 国产人妖乱国产精品人妖| 日韩欧美国产小视频| 欧美日韩高清一区二区三区| 色94色欧美sute亚洲线路一ni| 国精品**一区二区三区在线蜜桃| 人禽交欧美网站| 午夜欧美一区二区三区在线播放| 亚洲男人的天堂在线观看| 国产欧美日韩精品一区| 久久色中文字幕| 精品国产乱码久久| 日韩精品一区二区三区中文不卡 | 欧美人妖巨大在线| 色视频欧美一区二区三区| 色综合天天综合在线视频| 丰满少妇久久久久久久| 国产成人自拍在线| 懂色av一区二区三区免费看| 国产一区二区三区最好精华液| 久久国产免费看| 精品无码三级在线观看视频| 韩国av一区二区三区| 国产精品资源在线看| 亚洲精品一线二线三线无人区| 日韩欧美一区二区视频| 日韩亚洲欧美在线观看| 2022国产精品视频| 国产欧美精品区一区二区三区 | 欧美日韩高清一区二区| 7799精品视频| 日韩美女在线视频| 久久久精品综合| 国产精品久久久久久久久免费桃花| 亚洲国产成人一区二区三区| 中文字幕一区二区三区乱码在线| ...中文天堂在线一区| 一区二区三区四区五区视频在线观看| 亚洲线精品一区二区三区| 午夜国产精品一区| 国产原创一区二区| 波多野结衣一区二区三区| 欧美性受xxxx黑人xyx| 欧美一区欧美二区| 日本一区二区免费在线观看视频| 亚洲日本中文字幕区| 日韩专区一卡二卡| 成人午夜又粗又硬又大| 日本韩国欧美一区二区三区| 欧美一区二区在线免费播放| 久久精品视频免费| 一级特黄大欧美久久久| 麻豆精品国产91久久久久久| 成人黄色综合网站| 欧美一二区视频| 中文字幕在线观看不卡视频| 视频一区二区国产| 成人免费毛片app| 欧美丰满嫩嫩电影| 中文欧美字幕免费| 日本女人一区二区三区| 成人h精品动漫一区二区三区| 在线看日本不卡| 久久伊人中文字幕| 亚洲另类春色校园小说| 国内精品写真在线观看 | 粉嫩av一区二区三区粉嫩| 在线观看网站黄不卡| 精品福利一二区| 亚洲成人1区2区| 成人免费高清在线| 日韩精品在线看片z| 亚洲在线观看免费视频| 国产福利一区在线| 日韩欧美国产wwwww| 亚洲国产成人精品视频| 99这里只有精品| 国产午夜精品福利| 蜜臂av日日欢夜夜爽一区| 欧美调教femdomvk| 中文字幕亚洲精品在线观看 | 欧美一区二区三区成人| 亚洲特级片在线| 国产a级毛片一区| 日韩女优毛片在线| 亚洲超碰精品一区二区| 97久久精品人人爽人人爽蜜臀| 2014亚洲片线观看视频免费| 日本成人超碰在线观看| 欧美色区777第一页| 亚洲欧美另类小说| 处破女av一区二区| 国产香蕉久久精品综合网| 国产一区二区女| 久久亚洲精精品中文字幕早川悠里| 亚瑟在线精品视频| 在线观看日韩电影| 亚洲午夜激情网页|