Board logo

标题: 请教usb通讯,hc08jb16 [打印本页]

作者: 流浪远方百合    时间: 2005-7-18 10:09

顶一下吧!
作者: 流浪远方百合    时间: 2005-7-18 10:13     标题: 请教usb通讯,hc08jb16

我做usb设备与主机通讯,在仿真器的接收缓冲区可以接收到主机发送的数据,然后直接向仿真器的发送缓冲区写数据,运行程序主机没有接收到数据。
我的接收数据处理程序是端点2处理,向主机发送数据是在端点1,寄存器设置是正确的,请教各位指点,问题会出在那?[em06]


[此贴子已经被作者于2005-7-18 10:13:43编辑过]


作者: seuafu2005    时间: 2005-7-18 10:37

给你回信了。T1SEQ位必须通过异或来toggle其原来的状态。
作者: 流浪远方百合    时间: 2005-7-19 15:35

重新设置了,UCR1 = ((UCR1^BM_T1SEQ) & BM_T1SEQ) + BM_TX1E + n;
用程序将发送数据写到TxBuffer中可以在仿真器中看见,我的中断判断是:
......
if(UIR1 & BM_TXD1F) {       
                handleIN1();
                }
.......
但是进步了中断程序
作者: seuafu2005    时间: 2005-7-19 17:20

中断是表明数据已经被发送出去。对于数据的发送建议不要在中断里面做,中断里面只进行标志位的设置和清除。
作者: 流浪远方百合    时间: 2005-7-19 17:24

把数据发送放到主程序,运行还是不行,
作者: seuafu2005    时间: 2005-7-20 09:52

把程序打包发给我看看
作者: maingao    时间: 2005-7-20 10:10

建议你再仔细阅读一下些此芯片的Datasheet,再对照一下你的程序中的问题。
一、你的程序中是不是已经把数据送到发送端点的寄存器中?一般的数据缓冲区是双buffer,toggle标志置位了吗?
二、在你发送之前,也就是用端点2之前是不是已经把端点号置为2了呢?
三、你端点2的初始化设置正确吗?
四、你还可以把接收和发送的两个端点互换试试的!
五、在程序中你可以设置断点,在发送第一个数据包后设置断点,看一下状态。
六,在发送的时候,可以用BUS HOUND监控一下,是不是已经发送到总线上。
七,在发送之前还有一个检测Buffer的BUSY状态。你检测了吗?
作者: 流浪远方百合    时间: 2005-7-22 16:55

我的程序现在可以进入HandleIn1()的中断处理,
设置端点看见数据已经发送到端点寄存器,toggle异或设置了。 端点号是正确的。各个允许发送寄存器都设置了,但是还是没有在总线上看见数据。
作者: maingao    时间: 2005-7-22 18:11

那你得看一下你的端点的初始化设置,如果你的端点设置有错也会出现这样的问题!
作者: 流浪远方百合    时间: 2005-8-3 13:30

检查了好久,发现我的程序烧到片子可以与主机通讯,但是直接在仿真其在线调试不行,
请教各位是硬件干扰造成的,还是软件的原因,
作者: strongchen    时间: 2005-8-3 13:52

仿真器的时钟频率选择是否正确?
作者: 流浪远方百合    时间: 2005-8-3 14:47

我用的是08JBJG的仿真板,时钟选择外部OSC,在truetime窗口的都试过了,不行,
作者: strongchen    时间: 2005-8-3 15:02

如果目标板上用的是晶振,则仿真板不能选外部OSC,而要选内部。注意这个“内部”还“外部”指的是仿真板的内部和外部,而不是指芯片!
作者: 流浪远方百合    时间: 2005-8-3 15:27

迷糊啦!麻烦版主看一下帖子:
http://bbs.chinaecnet.com/dispbbs.asp?boardID=3&RootID=38527&ID=38527
问题是我选择其它时钟设置运行提示硬件有问题,只能选择OSC
作者: strongchen    时间: 2005-8-3 16:30

我看了你说的帖子。有什么问题吗?




欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) Powered by Discuz! 7.0.0