Board logo

标题: [求助]jb16 usb设备数据通讯 [打印本页]

作者: 流浪远方百合    时间: 2006-5-24 09:30     标题: [求助]jb16 usb设备数据通讯

突然发现我的设备只能接收主机的8个字节数据,超过8个出错,我开的存放数据缓存大于8,每包8个接收完,继续往下存放,怎么不对,发现是后面8个覆盖前面8位,请教各位?


作者: seuafu2005    时间: 2006-5-24 09:58

缓存相当于一个循环队列,队列需要一个头指针和尾指针,当数据放入的时候头指针移动,当数据被读出的时候尾指针移动。数据从USB endpoint data register读出来以后,缓存中的指针要移动,不然下一次过来的数据就覆盖掉前面的了
作者: 流浪远方百合    时间: 2006-5-24 11:33

是的,指针是移动的,我把数据直接放到RxBuffer缓冲,它是全局变量,
作者: cchen919    时间: 2006-6-5 16:06

我现在根据DRM015作了一个demo板,这个文档和事例程序是jb8,而不是jb16。我不知道大家用的怎么样。我在连接电脑的时候出现了错误,不知道大家是怎么解决的,inf文件有关系吗,谢谢!
作者: seuafu2005    时间: 2006-6-6 12:51

jb16的工作频率跟JB8不同,要注意
作者: cchen919    时间: 2006-6-7 09:09

两者的内部结构也不同啊,最后的USB主频是一样的。

作者: cchen919    时间: 2006-6-7 09:46

[upload=image/pjpeg]uploadImages/JB8osc.jpg[/upload]
作者: cchen919    时间: 2006-6-7 09:50

[upload=image/pjpeg]uploadImages/JB16osc.jpg[/upload]
作者: cchen919    时间: 2006-6-7 09:54

我仔细看了usb08的demo程序,发现一个问题。在初始化中。void initUSB() {

UADDR = BM_USBEN + 0; // USB enable, default address
UCR0 = 0; // reset EP0
UCR1 = 0; // reset EP1
UCR2 = 0; // reset EP2
UCR3 = BM_TX1STR + // clear TX1ST Flag
USB_IPUE*BM_PULLEN; // enable/disable internal Pull-up
UCR4 = 0; // USB normal operation
UIR0 = 0; // disable Interrupts
UIR2 = 0xff; // clear all Flags in UIR1
R0Sequence = 0; // EP0 Rx starts with DATA0
R2Sequence = 0; // EP2 Rx starts with DATA0
USB_State = US_POWERED; // powered, but not yet reset
TxBuf_RdIdx = 0; // reset Buffer Indexes
TxBuf_WrIdx = 0;
RxBuf_RdIdx = 0;
RxBuf_WrIdx = 0;
}
UIR0 = 0;是为什么?把所有的中断都关闭了?

作者: seuafu2005    时间: 2006-6-8 10:24

一般处理这些串行通讯无外乎查询和中断两种方式
把中断关了,那么在主程序应该有循环查询




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