首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

[求助]jb16 usb设备数据通讯

[求助]jb16 usb设备数据通讯

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

不断学习,摸索中进步!
缓存相当于一个循环队列,队列需要一个头指针和尾指针,当数据放入的时候头指针移动,当数据被读出的时候尾指针移动。数据从USB endpoint data register读出来以后,缓存中的指针要移动,不然下一次过来的数据就覆盖掉前面的了
是的,指针是移动的,我把数据直接放到RxBuffer缓冲,它是全局变量,
不断学习,摸索中进步!
我现在根据DRM015作了一个demo板,这个文档和事例程序是jb8,而不是jb16。我不知道大家用的怎么样。我在连接电脑的时候出现了错误,不知道大家是怎么解决的,inf文件有关系吗,谢谢!
jb16的工作频率跟JB8不同,要注意
两者的内部结构也不同啊,最后的USB主频是一样的。
[upload=image/pjpeg]uploadImages/JB8osc.jpg[/upload]
[upload=image/pjpeg]uploadImages/JB16osc.jpg[/upload]
我仔细看了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;是为什么?把所有的中断都关闭了?
一般处理这些串行通讯无外乎查询和中断两种方式
把中断关了,那么在主程序应该有循环查询
返回列表