搜索
bottom↓
回复: 50

AVR309 USB协议转换到UART 单片机源代码(中文注释) 更新

[复制链接]

出0入0汤圆

发表于 2005-6-15 19:19:32 | 显示全部楼层 |阅读模式
我自己根据理解翻译的,如果有错误敬请更正

点击此处下载armok0153069.txt


-----此内容被leon101010于2005-06-21,19:53:41编辑过

出0入0汤圆

 楼主| 发表于 2005-6-15 19:21:53 | 显示全部楼层
时间有限还有部分没有完全翻译。

出0入0汤圆

发表于 2005-6-15 19:57:24 | 显示全部楼层
好人

出0入0汤圆

发表于 2005-6-15 22:10:34 | 显示全部楼层
收了,谢谢。

出0入0汤圆

发表于 2005-6-16 12:14:57 | 显示全部楼层
期待完全翻译

出0入0汤圆

发表于 2005-6-17 13:25:36 | 显示全部楼层
收了,谢谢!

出0入0汤圆

 楼主| 发表于 2005-6-21 19:53:03 | 显示全部楼层
更新:主程序和中断服务程序已翻译完,子程序完成部分。

点击此处下载armok0153767.txt

出0入50汤圆

发表于 2005-6-21 21:23:25 | 显示全部楼层
看到了不顶一下确实有点于心不忍,谢谢楼主,收下了先。

出0入0汤圆

发表于 2005-6-22 09:01:56 | 显示全部楼层
谢谢楼主!!!!

出0入0汤圆

发表于 2005-6-24 09:58:52 | 显示全部楼层
期待完全翻译

出0入0汤圆

 楼主| 发表于 2005-6-26 13:11:25 | 显示全部楼层
这几天有点忙,稍安勿躁。

出0入0汤圆

发表于 2005-6-26 19:56:19 | 显示全部楼层
好耶,我看来我的USB有希望了。

好多人都在做呀,我也不会落后的。

出0入0汤圆

发表于 2005-6-27 10:54:00 | 显示全部楼层
楼主,请看看你的翻译的





.equ        nNRZITokenPID                =~0b10000000        ;PID maska pre Token paket (IN,OUT,SOF,SETUP) - opacne poradie NRZI

.equ        nNRZISOPbyte                =~0b10101011        ;Start of Packet byte - opacne poradie NRZI

.equ        nNRZIDATA0PID                =~0b11010111        ;PID pre DATA0 pole - opacne poradie NRZI

.equ        nNRZIDATA1PID                =~0b11001001        ;PID pre DATA1 pole - opacne poradie NRZI

.equ        nNRZIOUTPID                =~0b10101111        ;PID pre OUT pole - opacne poradie NRZI

.equ        nNRZIINPID                =~0b10110001        ;PID pre IN pole - opacne poradie NRZI

.equ        nNRZISOFPID                =~0b10010011        ;PID pre SOF pole - opacne poradie NRZI

.equ        nNRZISETUPPID                =~0b10001101        ;PID pre SETUP pole - opacne poradie NRZI

.equ        nNRZIACKPID                =~0b00100111        ;PID pre ACK pole - opacne poradie NRZI

.equ        nNRZINAKPID                =~0b00111001        ;PID pre NAK pole - opacne poradie NRZI

.equ        nNRZISTALLPID                =~0b00000111        ;PID pre STALL pole - opacne poradie NRZI

.equ        nNRZIPREPID                =~0b01111101        ;PID pre PRE pole - opacne poradie NRZI

.equ        nNRZIADDR0                =~0b01010101        ;Adresa = 0 - opacne poradie NRZI



你把它翻译成了什么文字了,老实说还不如看原文

出0入0汤圆

 楼主| 发表于 2005-6-27 12:48:38 | 显示全部楼层
我翻译错了你可以纠正。

谢谢
-----此内容被leon101010于2005-06-27,14:13:55编辑过
头像被屏蔽

出0入0汤圆

发表于 2005-6-27 13:07:10 | 显示全部楼层
支持 ARC的蜈蚣。



如果pengkewei 认为有更好的翻译,应该将翻译贴出来,这样大家才能交流。



只有批评而没有建议,有违交流精神。

出0入0汤圆

 楼主| 发表于 2005-6-27 13:08:58 | 显示全部楼层
谢谢,阿莫和交流的朋友

出0入0汤圆

发表于 2005-6-27 13:46:12 | 显示全部楼层
抱歉,话没有说完.语言有不敬之处,请谅解

我看了翻译稿,好像是机器翻译.

原文:

ldi   temp2,6             ;initialize counter of ones

pop   ByteCount                 ;restore buffer length

push  ByteCount                 ;back up buffer length

add   ByteCount,USBBufptrY        ;end of buffer to ByteCount

inc   ByteCount                ;and for safety increment it with 2 (because

                            of shifting)



翻译:

ldi   temp2,6                ;inicializuj pocitadlo jednotiek

pop   ByteCount                ;obnov dlzku 缓冲区

push  ByteCount                ;zalohuj dlzku 缓冲区

add   ByteCount,USBBufptrY        ;koniec 缓冲区 do ByteCount

上面是我随便选的698行.我说的"不如看原文"意思是蜈蚣先生把原文的英文改成X文的意思.

这篇文章正在看,前面我翻译的isp的程序已经贴出来了.可能翻译的比蜈蚣先生更差.大伙回帖的没有一个,我也懒得继续贴了.

出0入0汤圆

 楼主| 发表于 2005-6-27 14:00:39 | 显示全部楼层
是这样的,我将部分比较容易的使用机器。需要根据内容进行翻译的,我是看懂程序后根据理解进行翻译的,由于没有翻译完所以有的地方出现... );



我的言语也有些偏激,敬请谅解。



由于近几天有些忙,全部翻译要等一等。

我将今天翻译的结果上传。如果有兴趣,欢迎帮帮忙。

出0入0汤圆

 楼主| 发表于 2005-6-27 14:06:12 | 显示全部楼层
点击此处下载armok0154485.txt

出0入0汤圆

发表于 2005-6-27 14:26:02 | 显示全部楼层
我的速度可能慢一点,以前没有看过usb的资料,早几天有位朋友回帖说看usb的东东不如先看看avr309,这才动手的.没别的意思.我一直用的ponyprog不支持tiny26.armok的网站上面有个串口isp编程的电路,现在用羚羊的usb转串口的在驱动.现在想用mega8直接完成两个功能.刚刚着手看这篇文章.原文用12m的频率,我想修改一下程序,加到16m频率.现在的问题是能不能用么mega8上面的spi功能完成isp下载,avr910上面的程序使用软件模拟的spi功能.



蜈蚣先生有什么看法指点一下.如果我用了中断的方式使用芯片当中的spi接口传送数据,这样对本文的usb转usart的功能有多大的影响?

出0入0汤圆

 楼主| 发表于 2005-6-27 14:45:13 | 显示全部楼层
首先对12m的频率改到16m频率的个人理解。

    由于使用的是软件模拟,对软件读取USB口上的数据的时间要求非常严格。tiny26使用 12 MHz 振荡器 ( MCU 超频 !!!),原因就是指令的时间要做到与USB的"位"误差非常小。

使用mega8 16m频率,就需要对INT0Handler和SendUSBBuffer等操作USB口的程序进行改造。并且改造的时候要计算每条指令的时间。有点难度的。



中断的方式使用芯片当中的spi接口传送数据。

    还是对USB口上的数据的时间要求非常严格,你可以借鉴URXCaddr的处理。

.org URXCaddr                           ;prijem zo seriovej linky

       push  temp0

       in    temp0,UDR                  ;读入异步串行数据到 temp0

       sei                              ;打开中断,为了模拟 USB

在URXCaddr中开中断就是为了将其他的中断对INT0Handler的影响减到最小。



以上是我的个人看法,希望对你有帮助

出0入0汤圆

发表于 2005-6-27 15:04:43 | 显示全部楼层
谢了:我先把avr309读懂了,再同你联系把.现在的阻力很大.一个usb就这么麻烦,难怪ms的那帮家伙的软件可以买到天价了

出0入0汤圆

 楼主| 发表于 2005-7-14 17:05:26 | 显示全部楼层
再次更新.

不好,上传不了。晚上吧

出0入0汤圆

发表于 2005-7-14 17:13:37 | 显示全部楼层
谢谢,辛苦了楼主!

出0入0汤圆

 楼主| 发表于 2005-7-14 20:31:46 | 显示全部楼层
现在只有“填充位”和"CRC”和几个小子程序没有翻译完成

点击此处下载armok0156286.txt

过几天完成后再更新

出0入0汤圆

发表于 2005-7-15 21:37:35 | 显示全部楼层
蜈蚣,你好,最近看了mega8的那个源程序,做了点笔记,可能对你的翻译有用。

错误不少,请检查以后使用。





点击此处下载armok0156666.rar



希望早日看到你的完整的翻译文稿。

出0入0汤圆

 楼主| 发表于 2005-7-16 20:14:36 | 显示全部楼层
谢谢

出0入0汤圆

发表于 2005-7-17 22:32:45 | 显示全部楼层
兄弟最好改成PDF就完善了谢谢啊!

出0入0汤圆

 楼主| 发表于 2005-7-18 12:10:48 | 显示全部楼层
翻译完成后会给出的

出0入0汤圆

 楼主| 发表于 2005-7-18 12:10:50 | 显示全部楼层
翻译完成后会给出的

出0入0汤圆

发表于 2005-7-20 12:29:41 | 显示全部楼层
蜈蚣兄:

你好:看了好久avr309,有关int0中断的一个问题想请教大侠。



usb在闲置的状态应该是“0",也就是D-高,D+低,开始传送数据的时候

线路切换到低速“k"状态(”1")这个时候应该产生int0中断。但是如果这样

分析的话,源程序里面有关“CheckChangeMinus"  &  "CheckChangePlus"

就会检测同步位的前两位。以后的程序就更难懂了。以我看usb1.1,我认为

usb时序应该如下:

1.上一个数据包发送完毕,线路进入se0状态,俩线变低。持续两个时钟。

2.线路进入闲置模式,状态为”0"。此状态一直保持。

3.主机开始传送数据,线路进入低速“K”状态(输出’1'),保持一个时钟。

  表示sop。

4.主机输出同步信号(NRZI=1,data=01010100)

5.以后程序省略。



但是从源程序看:

1.中断产生,D+线变高。状态‘1'

2.CheckchangeMinus程序要求D-线变高。状态’0'

3.CheckchangePlus程序要求D+线变高。状态‘1'

4.以上的程序完成表示sop检测完毕。



可是无论我如何分析时序,总是乱的,想请问一下蜈蚣兄:

1.上面我对usb线路时序的分析有什么错?

2.int0产生的时候主机的时序在什么时候?

谢谢

出0入0汤圆

 楼主| 发表于 2005-7-20 19:20:04 | 显示全部楼层
“上面我对usb线路时序的分析有什么错? ”

你理解的USB时序是对的,但是你对源程序地理解有一点误解。

1.中断产生,D+线变高。状态‘1'

2.CheckchangeMinus程序要求D-线变高。状态’0'

3.CheckchangePlus程序要求D+线变高。状态‘1'

4.检测D+连续2Bit为1。

5.以上的程序完成表示sop检测完毕。



“int0产生的时候主机的时序在什么时候? ”

int0产生的时候,主机正在发同步码的第1Bit的。大约在第1Bit前50%的时间内产生int0



以上解答不知满意?为了你比较容易看懂,你将D+和D-的波形分开画,就容易看懂。

出0入0汤圆

发表于 2005-8-6 16:56:42 | 显示全部楼层
可惜只是汇编啊。有C的吗

出0入0汤圆

发表于 2005-8-10 14:20:54 | 显示全部楼层
回35楼,AVR309是文档编号,不是芯片。

能跟我联系一下吗?13808466997

出0入0汤圆

发表于 2006-2-5 15:05:02 | 显示全部楼层
好东西,谢谢

出0入0汤圆

发表于 2007-4-2 08:35:00 | 显示全部楼层
收下

出0入0汤圆

发表于 2007-4-2 09:15:04 | 显示全部楼层
谢谢了

出0入0汤圆

发表于 2007-5-21 13:36:25 | 显示全部楼层
TestSetupPacket:;检测是不是 SETUP 包

                cpi        temp0,nNRZISETUPPID     ;是不是 SETUP 包

                brne        TestOutPacket

                cp        temp1,MyInAddress        ;是不是本机地址(IN)  ;ENG;if this isn't assigned (address) for me

                brne        TestDataPacket

                ldi        State,SetupState        ;标记为设置状态

                rjmp        EndInt0HandlerPOP        ;结束中断0处理 ak je Setup PID - prijimaj nasledny Data paket





不是本机地址不是该不接收吗?

出0入0汤圆

发表于 2007-5-21 13:41:21 | 显示全部楼层
TestDataPacket: ;检测是不是循环位(DATA0)或(DATA1)

       cpi   temp0,nNRZIDATA0PID        ;是不是循环位(DATA0)包

       breq  Data0Packet

       cpi   temp0,nNRZIDATA1PID        ;是不是循环位(DATA1)包

       brne  NoMyPacked                 ;不是本机能识别的包





跳到这段代码之后还重新检测temp0的内容?但前面temp0的内容不是已经和nNRZISETUPPID相符合了才跳到这段代码来的吗?这样不是一定会跳到NoMyPacked程序段了吗?

出0入0汤圆

 楼主| 发表于 2007-5-21 19:30:59 | 显示全部楼层
TestSetupPacket:;检测是不是 SETUP 包

    cpi   temp0,nNRZISETUPPID                   ;是不是 SETUP 包

    brne  TestOutPacket

    cp    temp1,MyInAddress                     ;是不是本机地址(IN)  ;注:如果不是本机地址。可能是设置包后面的数据包

    brne  TestDataPacket                        ;  所以跳转到数据包检测

    ldi   State,SetupState                      ;标记为设置状态

    rjmp  EndInt0HandlerPOP                     ;结束中断0处理

出0入0汤圆

 楼主| 发表于 2007-5-21 19:41:48 | 显示全部楼层
TestDataPacket: ;检测是不是循环位(DATA0)或(DATA1)

       cpi   temp0,nNRZIDATA0PID        ;是不是循环位(DATA0)包

       breq  Data0Packet

       cpi   temp0,nNRZIDATA1PID        ;是不是循环位(DATA1)包

       brne  NoMyPacked                 ;不是本机能识别的包

跳到这段代码之后还重新检测temp0的内容?但前面temp0的内容不是已经和nNRZISETUPPID相符合了才跳到这段代码来的吗?这样不是一定会跳到NoMyPacked程序段了吗?



;注:如果不是本机地址。可能是设置包后面的数据包,所以跳转到数据包检测。数据包中的temp0可能和nNRZISETUPPID相同,所以不一定“一定会跳到NoMyPacked程序段”

出0入0汤圆

发表于 2007-5-21 22:11:15 | 显示全部楼层
数据包中的temp0可能和nNRZISETUPPID相同,所以不一定“一定会跳到NoMyPacked程序段”





temp0装PID吧?

.equ nNRZIDATA0PID  =~0b11001001

.equ nNRZISETUPPID  =~0b10001101



怎么可能相同呢?



再说了

设置包:SETUP ADDR ENDP CRC5  (3个字节)

数据包:DATA0 DATA      CRC16



一个包如果是SETUP包的话 这次传输就3个字节 哪来的数据包?
-----此内容被aslan于2007-05-21,22:12:39编辑过

出0入0汤圆

 楼主| 发表于 2007-5-22 12:56:24 | 显示全部楼层
aslan 说的对,我理解错误了。

出0入0汤圆

发表于 2008-1-11 16:59:42 | 显示全部楼层
有做好的没,我也想试试

出0入0汤圆

发表于 2008-1-11 20:40:46 | 显示全部楼层
强烈支持蜈蚣兄!

出0入0汤圆

发表于 2008-3-13 15:27:28 | 显示全部楼层
谢谢,我正准备看代码,多谢你的翻译.

出0入0汤圆

发表于 2008-3-21 13:22:36 | 显示全部楼层
mark

出0入0汤圆

发表于 2008-11-19 10:44:58 | 显示全部楼层
首先很感谢该网站,我支持!
我刚下了这个源程序.用STDIO4.13软件编译了一下,有1个错误,错误如下
        .equ        CRC16poly                =0b1000000000000101        ;CRC16 polynom
        ldi        bitcount,CRC16poly        ;do bitcount CRC polynom - spodny byte


很显然CRC16poly是16位的,而LDI在AT90S2313-10中只能传递8位数据.所以上面的程序是错误的.

不知道我的解释是否正确!请大家参考啦!呵呵!



本贴被 Joyce 编辑过,最后修改时间:2008-11-19,11:05:08.
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-11 17:54

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表